openstl


Nameopenstl JSON
Version 1.3.0 PyPI version JSON
download
home_pagehttps://github.com/Innoptech/OpenSTL
SummaryA simple STL serializer and deserializer
upload_time2025-01-15 23:35:51
maintainerNone
docs_urlNone
authorJean-Christophe Ruel
requires_python>=3.4
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # OpenSTL
The fastest and most intuitive library to manipulate STL files (stereolithography) for C++ and Python, header-only.   


[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=flat-square)](http://commitizen.github.io/cz-cli/)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square)](https://conventionalcommits.org)
[![PyPI license](https://img.shields.io/pypi/l/ansicolortags.svg?style=flat-square)](LICENSE)  
[![pypi](https://badge.fury.io/py/openstl.svg?style=flat-square)](https://badge.fury.io/py/openstl)
[![build](https://github.com/Innoptech/OpenSTL/actions/workflows/publish-to-test-pypi.yml/badge.svg?style=flat-square)](https://github.com/Innoptech/OpenSTL/actions/workflows/publish-to-test-pypi.yml)
[![Python](https://img.shields.io/pypi/pyversions/openstl.svg)](https://pypi.org/project/openstl/)  

 🌟 :fist_raised: Please consider starring and sponsoring the GitHub repo to show your support! :fist_raised: 🌟   
![GitHub Sponsor](https://img.shields.io/github/sponsors/Innoptech?label=Sponsor&logo=GitHub)

## Index
1. **Performance**
 - [Performance Benchmark](#performances-benchmark)

2. **Python Usage**
 - [Install](#install)
 - [Read and Write STL Files](#read-and-write-from-a-stl-file)
 - [Rotate, Translate, and Scale Meshes](#rotate-translate-and-scale-a-mesh)
 - [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces)
 - [Find Connected Components](#find-connected-components-in-mesh-topology-disjoint-solids)
 - [Use with PyTorch](#use-with-pytorch)
 - [Handling Large STL Files](#read-large-stl-file)

3. **C++ Usage**
 - [Read STL from File](#read-stl-from-file)
 - [Write STL to File](#write-stl-to-a-file)
 - [Serialize STL to Stream](#serialize-stl-to-a-stream)
 - [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces-1)
 - [Find Connected Components](#find-connected-components-in-mesh-topology)

4. **C++ Integration**
 - [Smart Method with CMake](#smart-method)
 - [Naïve Method](#naïve-method)

5. **Testing**
 - [Run Tests](#test)

6. **Requirements**
 - [C++ Standards](#requirements)

7. **Disclaimer**
 - [STL File Format Limitations](#disclaimer-stl-file-format)


# Performances benchmark
Discover the staggering performance of OpenSTL in comparison to [numpy-stl](https://github.com/wolph/numpy-stl),
 [meshio](https://github.com/nschloe/meshio) and [stl-reader](https://github.com/pyvista/stl-reader), thanks to its powerful C++ backend.
See [benchmark.py](benchmark/benchmark.py). Benchmark performed on an Intel i5-9600KF CPU @ 3.70GHz.

![Benchmark Results](benchmark/benchmark.png)

    Performance gains over numpy-stl, meshio and stl-reader
    #openstl vs numpy-stl  
    Write:	OpenSTL is 1.262 to 5.998 X faster than numpy-stl
    Read:	OpenSTL is 2.131 to 11.144 X faster than numpy-stl
    Rotate:	OpenSTL is 0.971 to 13.873 X faster than numpy-stl
    Rotate:	OpenSTL + PyTorch is 0.022 to 100.25 X faster than numpy-stl

    #openstl  vs meshio  
    Write:	OpenSTL is 4.289 to 80.714 X faster than meshio
    Read:	OpenSTL is 15.915 to 311.365 X faster than meshio

    #openstl vs stl_reader  
    Read:	OpenSTL is 0.719 to 2.2 X faster than stl_reader

Note: meshio has no specific way of rotating vertices, so it was not benchmarked. 

# Python Usage
### Install
`pip install openstl` or `pip install -U git+https://github.com/Innoptech/OpenSTL@main`

### Read and write from a STL file
```python
import openstl
import numpy as np

# Define an array of triangles
# Following the STL standard, each triangle is defined with : normal, v0, v1, v2
quad = np.array([
    # normal,          vertices 0,      vertices 1,      vertices 2
    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1
    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2
])

# Serialize the triangles to a file
success = openstl.write("quad.stl", quad, openstl.format.binary) # Or openstl.format.ascii (slower but human readable)

if not success:
    raise Exception("Error: Failed to write to the specified file.")

# Deserialize triangles from a file
deserialized_quad = openstl.read("quad.stl")

# Print the deserialized triangles
print("Deserialized Triangles:", deserialized_quad)
```
### Rotate, translate and scale a mesh
```python
import openstl
import numpy as np

quad = openstl.read("quad.stl")

# Rotating
rotation_matrix = np.array([
    [0,-1, 0],
    [1, 0, 0],
    [0, 0, 1]
])
rotated_quad = np.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)

# Translating
translation_vector = np.array([1,1,1])
quad[:,1:4,:] += translation_vector # Avoid translating normals

# Scaling
scale = 1000.0
quad[:,1:4,:] *= scale # Avoid scaling normals
```

### Convert Triangles :arrow_right: Vertices and Faces
```python
import openstl

# Define an array of triangles
triangles = [
    # normal,          vertices 0,      vertices 1,      vertices 2
    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1
    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2
]

# Convert triangles to vertices and faces
vertices, faces = openstl.convert.verticesandfaces(triangles)
```

### Convert Vertices and Faces :arrow_right: Triangles
```python
import openstl

# Define vertices and faces
vertices = [
    [0.0, 0.0, 0.0],
    [1.0, 1.0, 1.0],
    [2.0, 2.0, 2.0],
    [3.0, 3.0, 3.0],
]

faces = [
    [0, 1, 2],  # Face 1 
    [1, 3, 2]   # Face 2 
]

# Convert vertices and faces to triangles
triangles = openstl.convert.triangles(vertices, faces)
``` 

### Find Connected Components in Mesh Topology (Disjoint solids)
```python
import openstl

# Define vertices and faces for two disconnected components
vertices = [
 [0.0, 0.0, 0.0],
 [1.0, 0.0, 0.0],
 [0.0, 1.0, 0.0],
 [2.0, 2.0, 0.0],
 [3.0, 2.0, 0.0],
 [2.5, 3.0, 0.0],
]

faces = [
 [0, 1, 2],  # Component 1
 [3, 4, 5],  # Component 2
]

# Identify connected components of faces
connected_components = openstl.topology.find_connected_components(vertices, faces)

# Print the result
print(f"Number of connected components: {len(connected_components)}")
for i, component in enumerate(connected_components):
 print(f"Component {i + 1}: {component}")
```


### Use with `Pytorch`
```python
import openstl
import torch

quad = torch.Tensor(openstl.read("quad.stl")).to('cuda')

# Rotating
rotation_matrix = torch.Tensor([
    [0,-1, 0],
    [1, 0, 0],
    [0, 0, 1]
]).to('cuda')
rotated_quad = torch.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)

# Translating
translation_vector = torch.Tensor([1,1,1]).to('cuda')
quad[:,1:4,:] += translation_vector # Avoid translating normals

# Scaling
scale = 1000.0
quad[:,1:4,:] *= scale # Avoid scaling normals
```

### Read large STL file
To read STL file with a large triangle count > **1 000 000**, the openstl buffer overflow safety must be unactivated with
`openstl.set_activate_overflow_safety(False)` after import. Deactivating overflow safety may expose the application 
to a potential buffer overflow attack vector since the stl standard is not backed by a checksum.
This can cause significant risks if openstl (and any other STL reader) is used as part of a service in a backend server for example. For
domestic usage, ignore this warning. OpenSTl is the only stl reader to provide such default safety feature.

# C++ Usage
### Read STL from file
```c++
#include <openstl/core/stl.h>

std::ifstream file(filename, std::ios::binary);
if (!file.is_open()) {
    std::cerr << "Error: Unable to open file '" << filename << "'" << std::endl;
}

// Deserialize the triangles in either binary or ASCII format
std::vector<openstl::Triangle> triangles = openstl::deserializeStl(file);
file.close();
```

### Write STL to a file
```c++
std::ofstream file(filename, std::ios::binary);
if (!file.is_open()) {
    std::cerr << "Error: Unable to open file '" << filename << "'" << std::endl;
}

std::vector<openstl::Triangle> originalTriangles{}; // User triangles
openstl::serialize(originalTriangles, file, openstl::StlFormat::Binary); // Or StlFormat::ASCII

if (file.fail()) {
    std::cerr << "Error: Failed to write to file " << filename << std::endl;
} else {
    std::cout << "File " << filename << " has been successfully written." << std::endl;
}
file.close();
```

### Serialize STL to a stream
```c++
std::stringstream ss;

std::vector<openstl::Triangle> originalTriangles{}; // User triangles
openstl::serialize(originalTriangles, ss, openstl::StlFormat::Binary); // Or StlFormat::ASCII
```

### Convert Triangles :arrow_right: Vertices and Faces
```c++
using namespace openstl

std::vector triangles = {
    //        normal,             vertices 0,         vertices 1,        vertices 2
    Triangle{{0.0f, 0.0f, 1.0f}, {1.0f, 1.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}},
    Triangle{{0.0f, 0.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}, {4.0f, 4.0f, 4.0f}}
};

const auto& [vertices, faces] = convertToVerticesAndFaces(triangles);
```

### Convert Vertices and Faces :arrow_right: Triangles
```c++
using namespace openstl

std::vector vertices = {
    Vec3{0.0f, 0.0f, 0.0f}, Vec3{1.0f, 1.0f, 1.0f}, Vec3{2.0f, 2.0f, 2.0f}, Vec3{3.0f, 3.0f, 3.0f}
};
std::vector<Face> faces = {
    {0, 1, 2}, {3, 1, 2}
};

const auto& triangles = convertToTriangles(vertices, faces);
```

### Find Connected Components in Mesh Topology
```c++
#include <openstl/topology.hpp>
#include <vector>
#include <iostream>

using namespace openstl;

int main() {
    std::vector<Vec3> vertices = {
        {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f},  // Component 1
        {2.0f, 2.0f, 0.0f}, {3.0f, 2.0f, 0.0f}, {2.5f, 3.0f, 0.0f}   // Component 2
    };

    std::vector<Face> faces = {
        {0, 1, 2},  // Component 1
        {3, 4, 5},  // Component 2
    };

    const auto& connected_components = findConnectedComponents(vertices, faces);

    std::cout << "Number of connected components: " << connected_components.size() << "\\n";
    for (size_t i = 0; i < connected_components.size(); ++i) {
        std::cout << "Component " << i + 1 << ":\\n";
        for (const auto& face : connected_components[i]) {
            std::cout << "  {" << face[0] << ", " << face[1] << ", " << face[2] << "}\\n";
        }
    }

    return 0;
}
```
****
# Integrate to your C++ codebase
### Smart method
Include this repository with CMAKE Fetchcontent and link your executable/library to `openstl::core` library.   
Choose weither you want to fetch a specific branch or tag using `GIT_TAG`. Use the `main` branch to keep updated with the latest improvements.
```cmake
include(FetchContent)
FetchContent_Declare(
    openstl
    GIT_REPOSITORY https://github.com/Innoptech/OpenSTL.git
    GIT_TAG main
    GIT_SHALLOW TRUE
    GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(openstl)
```
### Naïve method
Simply add [stl.h](modules/core/include/openstl/core/stl.h) to your codebase.

# Test
```bash
git clone https://github.com/Innoptech/OpenSTL
mkdir OpenSTL/build && cd OpenSTL/build
cmake -DOPENSTL_BUILD_TESTS=ON .. && cmake --build .
ctest .
```

# Requirements
C++17 or higher.


# DISCLAIMER: STL File Format #

The STL file format, while widely used for 3D modeling and printing, was designed to be simple and easy to parse. However, this simplicity comes with some significant limitations:

- Lack of Built-in Validation Mechanisms: The STL format does not include built-in mechanisms such as checksums, hashes, or any form of file validation. This makes it challenging to detect certain types of file corruption, such as a truncated header or malformed data. As a result, errors in file transmission, storage, or manipulation might go undetected.

- Vulnerability to Corruption: Due to the lack of validation features, STL files can be easily corrupted. For example, if the file is truncated or contains invalid data, these issues may not be detected until the file is parsed or processed, potentially leading to crashes or undefined behavior in applications that use the file.

- Potential for Buffer Overflow Attacks: The lack of built-in validation and the absence of bounds checking in the STL format can make it susceptible to buffer overflow attacks. Care should be taken when handling STL files, especially those from untrusted sources, to ensure they are properly validated before being used.

These limitations are inherent to the STL format and should be considered when working with or implementing software that processes STL files. Developers are encouraged to implement additional validation and error-handling mechanisms in their applications to mitigate these risks.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Innoptech/OpenSTL",
    "name": "openstl",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.4",
    "maintainer_email": null,
    "keywords": null,
    "author": "Jean-Christophe Ruel",
    "author_email": "info@innoptech.com",
    "download_url": null,
    "platform": null,
    "description": "# OpenSTL\nThe fastest and most intuitive library to manipulate STL files (stereolithography) for C++ and Python, header-only.   \n\n\n[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=flat-square)](http://commitizen.github.io/cz-cli/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square)](https://conventionalcommits.org)\n[![PyPI license](https://img.shields.io/pypi/l/ansicolortags.svg?style=flat-square)](LICENSE)  \n[![pypi](https://badge.fury.io/py/openstl.svg?style=flat-square)](https://badge.fury.io/py/openstl)\n[![build](https://github.com/Innoptech/OpenSTL/actions/workflows/publish-to-test-pypi.yml/badge.svg?style=flat-square)](https://github.com/Innoptech/OpenSTL/actions/workflows/publish-to-test-pypi.yml)\n[![Python](https://img.shields.io/pypi/pyversions/openstl.svg)](https://pypi.org/project/openstl/)  \n\n \ud83c\udf1f :fist_raised: Please consider starring and sponsoring the GitHub repo to show your support! :fist_raised: \ud83c\udf1f   \n![GitHub Sponsor](https://img.shields.io/github/sponsors/Innoptech?label=Sponsor&logo=GitHub)\n\n## Index\n1. **Performance**\n - [Performance Benchmark](#performances-benchmark)\n\n2. **Python Usage**\n - [Install](#install)\n - [Read and Write STL Files](#read-and-write-from-a-stl-file)\n - [Rotate, Translate, and Scale Meshes](#rotate-translate-and-scale-a-mesh)\n - [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces)\n - [Find Connected Components](#find-connected-components-in-mesh-topology-disjoint-solids)\n - [Use with PyTorch](#use-with-pytorch)\n - [Handling Large STL Files](#read-large-stl-file)\n\n3. **C++ Usage**\n - [Read STL from File](#read-stl-from-file)\n - [Write STL to File](#write-stl-to-a-file)\n - [Serialize STL to Stream](#serialize-stl-to-a-stream)\n - [Convert Between Triangles and Vertices/Faces](#convert-triangles-arrow_right-vertices-and-faces-1)\n - [Find Connected Components](#find-connected-components-in-mesh-topology)\n\n4. **C++ Integration**\n - [Smart Method with CMake](#smart-method)\n - [Na\u00efve Method](#na\u00efve-method)\n\n5. **Testing**\n - [Run Tests](#test)\n\n6. **Requirements**\n - [C++ Standards](#requirements)\n\n7. **Disclaimer**\n - [STL File Format Limitations](#disclaimer-stl-file-format)\n\n\n# Performances benchmark\nDiscover the staggering performance of OpenSTL in comparison to [numpy-stl](https://github.com/wolph/numpy-stl),\n [meshio](https://github.com/nschloe/meshio) and [stl-reader](https://github.com/pyvista/stl-reader), thanks to its powerful C++ backend.\nSee [benchmark.py](benchmark/benchmark.py). Benchmark performed on an Intel i5-9600KF CPU @ 3.70GHz.\n\n![Benchmark Results](benchmark/benchmark.png)\n\n    Performance gains over numpy-stl, meshio and stl-reader\n    #openstl vs numpy-stl  \n    Write:\tOpenSTL is 1.262 to 5.998 X faster than numpy-stl\n    Read:\tOpenSTL is 2.131 to 11.144 X faster than numpy-stl\n    Rotate:\tOpenSTL is 0.971 to 13.873 X faster than numpy-stl\n    Rotate:\tOpenSTL + PyTorch is 0.022 to 100.25 X faster than numpy-stl\n\n    #openstl  vs meshio  \n    Write:\tOpenSTL is 4.289 to 80.714 X faster than meshio\n    Read:\tOpenSTL is 15.915 to 311.365 X faster than meshio\n\n    #openstl vs stl_reader  \n    Read:\tOpenSTL is 0.719 to 2.2 X faster than stl_reader\n\nNote: meshio has no specific way of rotating vertices, so it was not benchmarked. \n\n# Python Usage\n### Install\n`pip install openstl` or `pip install -U git+https://github.com/Innoptech/OpenSTL@main`\n\n### Read and write from a STL file\n```python\nimport openstl\nimport numpy as np\n\n# Define an array of triangles\n# Following the STL standard, each triangle is defined with : normal, v0, v1, v2\nquad = np.array([\n    # normal,          vertices 0,      vertices 1,      vertices 2\n    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1\n    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2\n])\n\n# Serialize the triangles to a file\nsuccess = openstl.write(\"quad.stl\", quad, openstl.format.binary) # Or openstl.format.ascii (slower but human readable)\n\nif not success:\n    raise Exception(\"Error: Failed to write to the specified file.\")\n\n# Deserialize triangles from a file\ndeserialized_quad = openstl.read(\"quad.stl\")\n\n# Print the deserialized triangles\nprint(\"Deserialized Triangles:\", deserialized_quad)\n```\n### Rotate, translate and scale a mesh\n```python\nimport openstl\nimport numpy as np\n\nquad = openstl.read(\"quad.stl\")\n\n# Rotating\nrotation_matrix = np.array([\n    [0,-1, 0],\n    [1, 0, 0],\n    [0, 0, 1]\n])\nrotated_quad = np.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)\n\n# Translating\ntranslation_vector = np.array([1,1,1])\nquad[:,1:4,:] += translation_vector # Avoid translating normals\n\n# Scaling\nscale = 1000.0\nquad[:,1:4,:] *= scale # Avoid scaling normals\n```\n\n### Convert Triangles :arrow_right: Vertices and Faces\n```python\nimport openstl\n\n# Define an array of triangles\ntriangles = [\n    # normal,          vertices 0,      vertices 1,      vertices 2\n    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 1\n    [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]], # Triangle 2\n]\n\n# Convert triangles to vertices and faces\nvertices, faces = openstl.convert.verticesandfaces(triangles)\n```\n\n### Convert Vertices and Faces :arrow_right: Triangles\n```python\nimport openstl\n\n# Define vertices and faces\nvertices = [\n    [0.0, 0.0, 0.0],\n    [1.0, 1.0, 1.0],\n    [2.0, 2.0, 2.0],\n    [3.0, 3.0, 3.0],\n]\n\nfaces = [\n    [0, 1, 2],  # Face 1 \n    [1, 3, 2]   # Face 2 \n]\n\n# Convert vertices and faces to triangles\ntriangles = openstl.convert.triangles(vertices, faces)\n``` \n\n### Find Connected Components in Mesh Topology (Disjoint solids)\n```python\nimport openstl\n\n# Define vertices and faces for two disconnected components\nvertices = [\n [0.0, 0.0, 0.0],\n [1.0, 0.0, 0.0],\n [0.0, 1.0, 0.0],\n [2.0, 2.0, 0.0],\n [3.0, 2.0, 0.0],\n [2.5, 3.0, 0.0],\n]\n\nfaces = [\n [0, 1, 2],  # Component 1\n [3, 4, 5],  # Component 2\n]\n\n# Identify connected components of faces\nconnected_components = openstl.topology.find_connected_components(vertices, faces)\n\n# Print the result\nprint(f\"Number of connected components: {len(connected_components)}\")\nfor i, component in enumerate(connected_components):\n print(f\"Component {i + 1}: {component}\")\n```\n\n\n### Use with `Pytorch`\n```python\nimport openstl\nimport torch\n\nquad = torch.Tensor(openstl.read(\"quad.stl\")).to('cuda')\n\n# Rotating\nrotation_matrix = torch.Tensor([\n    [0,-1, 0],\n    [1, 0, 0],\n    [0, 0, 1]\n]).to('cuda')\nrotated_quad = torch.matmul(rotation_matrix, quad.reshape(-1,3).T).T.reshape(-1,4,3)\n\n# Translating\ntranslation_vector = torch.Tensor([1,1,1]).to('cuda')\nquad[:,1:4,:] += translation_vector # Avoid translating normals\n\n# Scaling\nscale = 1000.0\nquad[:,1:4,:] *= scale # Avoid scaling normals\n```\n\n### Read large STL file\nTo read STL file with a large triangle count > **1 000 000**, the openstl buffer overflow safety must be unactivated with\n`openstl.set_activate_overflow_safety(False)` after import. Deactivating overflow safety may expose the application \nto a potential buffer overflow attack vector since the stl standard is not backed by a checksum.\nThis can cause significant risks if openstl (and any other STL reader) is used as part of a service in a backend server for example. For\ndomestic usage, ignore this warning. OpenSTl is the only stl reader to provide such default safety feature.\n\n# C++ Usage\n### Read STL from file\n```c++\n#include <openstl/core/stl.h>\n\nstd::ifstream file(filename, std::ios::binary);\nif (!file.is_open()) {\n    std::cerr << \"Error: Unable to open file '\" << filename << \"'\" << std::endl;\n}\n\n// Deserialize the triangles in either binary or ASCII format\nstd::vector<openstl::Triangle> triangles = openstl::deserializeStl(file);\nfile.close();\n```\n\n### Write STL to a file\n```c++\nstd::ofstream file(filename, std::ios::binary);\nif (!file.is_open()) {\n    std::cerr << \"Error: Unable to open file '\" << filename << \"'\" << std::endl;\n}\n\nstd::vector<openstl::Triangle> originalTriangles{}; // User triangles\nopenstl::serialize(originalTriangles, file, openstl::StlFormat::Binary); // Or StlFormat::ASCII\n\nif (file.fail()) {\n    std::cerr << \"Error: Failed to write to file \" << filename << std::endl;\n} else {\n    std::cout << \"File \" << filename << \" has been successfully written.\" << std::endl;\n}\nfile.close();\n```\n\n### Serialize STL to a stream\n```c++\nstd::stringstream ss;\n\nstd::vector<openstl::Triangle> originalTriangles{}; // User triangles\nopenstl::serialize(originalTriangles, ss, openstl::StlFormat::Binary); // Or StlFormat::ASCII\n```\n\n### Convert Triangles :arrow_right: Vertices and Faces\n```c++\nusing namespace openstl\n\nstd::vector triangles = {\n    //        normal,             vertices 0,         vertices 1,        vertices 2\n    Triangle{{0.0f, 0.0f, 1.0f}, {1.0f, 1.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}},\n    Triangle{{0.0f, 0.0f, 1.0f}, {2.0f, 2.0f, 2.0f}, {3.0f, 3.0f, 3.0f}, {4.0f, 4.0f, 4.0f}}\n};\n\nconst auto& [vertices, faces] = convertToVerticesAndFaces(triangles);\n```\n\n### Convert Vertices and Faces :arrow_right: Triangles\n```c++\nusing namespace openstl\n\nstd::vector vertices = {\n    Vec3{0.0f, 0.0f, 0.0f}, Vec3{1.0f, 1.0f, 1.0f}, Vec3{2.0f, 2.0f, 2.0f}, Vec3{3.0f, 3.0f, 3.0f}\n};\nstd::vector<Face> faces = {\n    {0, 1, 2}, {3, 1, 2}\n};\n\nconst auto& triangles = convertToTriangles(vertices, faces);\n```\n\n### Find Connected Components in Mesh Topology\n```c++\n#include <openstl/topology.hpp>\n#include <vector>\n#include <iostream>\n\nusing namespace openstl;\n\nint main() {\n    std::vector<Vec3> vertices = {\n        {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f},  // Component 1\n        {2.0f, 2.0f, 0.0f}, {3.0f, 2.0f, 0.0f}, {2.5f, 3.0f, 0.0f}   // Component 2\n    };\n\n    std::vector<Face> faces = {\n        {0, 1, 2},  // Component 1\n        {3, 4, 5},  // Component 2\n    };\n\n    const auto& connected_components = findConnectedComponents(vertices, faces);\n\n    std::cout << \"Number of connected components: \" << connected_components.size() << \"\\\\n\";\n    for (size_t i = 0; i < connected_components.size(); ++i) {\n        std::cout << \"Component \" << i + 1 << \":\\\\n\";\n        for (const auto& face : connected_components[i]) {\n            std::cout << \"  {\" << face[0] << \", \" << face[1] << \", \" << face[2] << \"}\\\\n\";\n        }\n    }\n\n    return 0;\n}\n```\n****\n# Integrate to your C++ codebase\n### Smart method\nInclude this repository with CMAKE Fetchcontent and link your executable/library to `openstl::core` library.   \nChoose weither you want to fetch a specific branch or tag using `GIT_TAG`. Use the `main` branch to keep updated with the latest improvements.\n```cmake\ninclude(FetchContent)\nFetchContent_Declare(\n    openstl\n    GIT_REPOSITORY https://github.com/Innoptech/OpenSTL.git\n    GIT_TAG main\n    GIT_SHALLOW TRUE\n    GIT_PROGRESS TRUE\n)\nFetchContent_MakeAvailable(openstl)\n```\n### Na\u00efve method\nSimply add [stl.h](modules/core/include/openstl/core/stl.h) to your codebase.\n\n# Test\n```bash\ngit clone https://github.com/Innoptech/OpenSTL\nmkdir OpenSTL/build && cd OpenSTL/build\ncmake -DOPENSTL_BUILD_TESTS=ON .. && cmake --build .\nctest .\n```\n\n# Requirements\nC++17 or higher.\n\n\n# DISCLAIMER: STL File Format #\n\nThe STL file format, while widely used for 3D modeling and printing, was designed to be simple and easy to parse. However, this simplicity comes with some significant limitations:\n\n- Lack of Built-in Validation Mechanisms: The STL format does not include built-in mechanisms such as checksums, hashes, or any form of file validation. This makes it challenging to detect certain types of file corruption, such as a truncated header or malformed data. As a result, errors in file transmission, storage, or manipulation might go undetected.\n\n- Vulnerability to Corruption: Due to the lack of validation features, STL files can be easily corrupted. For example, if the file is truncated or contains invalid data, these issues may not be detected until the file is parsed or processed, potentially leading to crashes or undefined behavior in applications that use the file.\n\n- Potential for Buffer Overflow Attacks: The lack of built-in validation and the absence of bounds checking in the STL format can make it susceptible to buffer overflow attacks. Care should be taken when handling STL files, especially those from untrusted sources, to ensure they are properly validated before being used.\n\nThese limitations are inherent to the STL format and should be considered when working with or implementing software that processes STL files. Developers are encouraged to implement additional validation and error-handling mechanisms in their applications to mitigate these risks.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A simple STL serializer and deserializer",
    "version": "1.3.0",
    "project_urls": {
        "Homepage": "https://github.com/Innoptech/OpenSTL"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f615359f482c1a84727047be5f6e858622837ac5a05ed33a5bf1529afc977693",
                "md5": "cf76ad9e24f42d397977bcc6884fb2bb",
                "sha256": "e79da3382cff9eceb96b37a78a64475bf2f5112863865cc3c884c51f41713a30"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cf76ad9e24f42d397977bcc6884fb2bb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 125950,
            "upload_time": "2025-01-15T23:35:51",
            "upload_time_iso_8601": "2025-01-15T23:35:51.399135Z",
            "url": "https://files.pythonhosted.org/packages/f6/15/359f482c1a84727047be5f6e858622837ac5a05ed33a5bf1529afc977693/openstl-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4b4fa611628f2b8549e55c2eceff8836a666de14b049c2cd043682d166d2aa0e",
                "md5": "1d7bb54e12590a0a269f629e6a0ffeaf",
                "sha256": "515a425c276a981dd852162fd0858ef458383f35397ab25e896901c01313a1e0"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1d7bb54e12590a0a269f629e6a0ffeaf",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 116676,
            "upload_time": "2025-01-15T23:35:54",
            "upload_time_iso_8601": "2025-01-15T23:35:54.178088Z",
            "url": "https://files.pythonhosted.org/packages/4b/4f/a611628f2b8549e55c2eceff8836a666de14b049c2cd043682d166d2aa0e/openstl-1.3.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "46e862087881142371493d133f7500afaab63240504ba86334b92413c3054a9f",
                "md5": "2c4696a6be37fde7c84927d9efcb02f8",
                "sha256": "40f0b2dad52651de67cb4a5030508a8de88e95062d5999b0aa76b7ce782db807"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "2c4696a6be37fde7c84927d9efcb02f8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 181839,
            "upload_time": "2025-01-15T23:35:55",
            "upload_time_iso_8601": "2025-01-15T23:35:55.462857Z",
            "url": "https://files.pythonhosted.org/packages/46/e8/62087881142371493d133f7500afaab63240504ba86334b92413c3054a9f/openstl-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9a8e900edc9844859b16908ed5ec416a7a4309cc48642c8ba99bb347647dbfa0",
                "md5": "d03345241358b07abd2765db76ef0aca",
                "sha256": "a0f1bc44f5b3fdf8dfe70a29aabc5e93a7f14c79c527faaa5b164d2ff693d36e"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d03345241358b07abd2765db76ef0aca",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 172777,
            "upload_time": "2025-01-15T23:35:58",
            "upload_time_iso_8601": "2025-01-15T23:35:58.032661Z",
            "url": "https://files.pythonhosted.org/packages/9a/8e/900edc9844859b16908ed5ec416a7a4309cc48642c8ba99bb347647dbfa0/openstl-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4856654b95dd4bd4c5b4ca09ce91d5c62f49fdafeeb054f19135e0da25136523",
                "md5": "bfd5424460169182b447cff19b8e69cf",
                "sha256": "e9c81394d8764a3700186c50279e3e30e94ed1a5326122307c517bf87c8202ea"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "bfd5424460169182b447cff19b8e69cf",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 1241979,
            "upload_time": "2025-01-15T23:36:00",
            "upload_time_iso_8601": "2025-01-15T23:36:00.820999Z",
            "url": "https://files.pythonhosted.org/packages/48/56/654b95dd4bd4c5b4ca09ce91d5c62f49fdafeeb054f19135e0da25136523/openstl-1.3.0-cp310-cp310-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b980abfa32b343da8762aef0177fb08023556a3932b081e2037b46807ef39790",
                "md5": "aecbc39852e0358248d79153e2cc4510",
                "sha256": "49b3454b7c2131403501397b689ca27b9db4930a479169fd80529337e1b83ef7"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "aecbc39852e0358248d79153e2cc4510",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 1140685,
            "upload_time": "2025-01-15T23:36:05",
            "upload_time_iso_8601": "2025-01-15T23:36:05.103148Z",
            "url": "https://files.pythonhosted.org/packages/b9/80/abfa32b343da8762aef0177fb08023556a3932b081e2037b46807ef39790/openstl-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "50e6691ad7246a23293d61118a27d33c5066429868d52cff21aa7b712d419606",
                "md5": "96aa4cad86419e6bf7edae669f4cf489",
                "sha256": "2845c60fa67b60a7aa633920edad1b04d030d69202192529414ffb1effe4add9"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "96aa4cad86419e6bf7edae669f4cf489",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 124334,
            "upload_time": "2025-01-15T23:36:08",
            "upload_time_iso_8601": "2025-01-15T23:36:08.134890Z",
            "url": "https://files.pythonhosted.org/packages/50/e6/691ad7246a23293d61118a27d33c5066429868d52cff21aa7b712d419606/openstl-1.3.0-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0ade733fff15c1ad0a1f622fd93ddf96c2c118361bdd54ea1128fe5554f6f963",
                "md5": "2e9668224c3cada6cab9c6514f722611",
                "sha256": "69afdee92faa561afc4db3378643f408538cae47d90db6b1327c6ed650957724"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2e9668224c3cada6cab9c6514f722611",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.4",
            "size": 145525,
            "upload_time": "2025-01-15T23:36:12",
            "upload_time_iso_8601": "2025-01-15T23:36:12.104802Z",
            "url": "https://files.pythonhosted.org/packages/0a/de/733fff15c1ad0a1f622fd93ddf96c2c118361bdd54ea1128fe5554f6f963/openstl-1.3.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d5fa000c992a4d5d1e2e7c3cfa95c01e3f5f9d06fc66dd3e84cf4fbc652668d5",
                "md5": "a82f390ef4cb1adcdaa6638aca33de9d",
                "sha256": "d381b952cfc0fc5271b5e19b6d996937b61390c82e27cf28e6c51258ff52e2a9"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a82f390ef4cb1adcdaa6638aca33de9d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 127264,
            "upload_time": "2025-01-15T23:36:13",
            "upload_time_iso_8601": "2025-01-15T23:36:13.636101Z",
            "url": "https://files.pythonhosted.org/packages/d5/fa/000c992a4d5d1e2e7c3cfa95c01e3f5f9d06fc66dd3e84cf4fbc652668d5/openstl-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3439cb6596a89b9cb18350255a5405f007657bbac8010d8eac2cc4184a57b860",
                "md5": "4587d57c63eed658b694324c32714cd5",
                "sha256": "1b6c824d9c89383cf5e5cca88aab77e4746579cd94d314e0543dba7e8222b488"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "4587d57c63eed658b694324c32714cd5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 118116,
            "upload_time": "2025-01-15T23:36:16",
            "upload_time_iso_8601": "2025-01-15T23:36:16.339814Z",
            "url": "https://files.pythonhosted.org/packages/34/39/cb6596a89b9cb18350255a5405f007657bbac8010d8eac2cc4184a57b860/openstl-1.3.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c16199e42ad92e913d09716d44aae7eecbf64ea5a2c3ff91a90a93c62fb924b0",
                "md5": "a17ebcdf6892a5414a7407c4365b86c6",
                "sha256": "3bbc9dcc7b0dd174f1953ed07a5a7eacff766348c8f8c1b624ac515ead1c8bff"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "a17ebcdf6892a5414a7407c4365b86c6",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 182604,
            "upload_time": "2025-01-15T23:36:18",
            "upload_time_iso_8601": "2025-01-15T23:36:18.870788Z",
            "url": "https://files.pythonhosted.org/packages/c1/61/99e42ad92e913d09716d44aae7eecbf64ea5a2c3ff91a90a93c62fb924b0/openstl-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5db6fda4e47b0bb015f28bae32e0d9bc4ff057da0fe90ac8a0c4ba6c3ad568f1",
                "md5": "0f664db899c99edce5340e2669a7b47b",
                "sha256": "875c334c64f5c2b68cf6bb2ba775dca519c9a60ab0d7c0f09d2ed8686e0dfef5"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0f664db899c99edce5340e2669a7b47b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 173556,
            "upload_time": "2025-01-15T23:36:20",
            "upload_time_iso_8601": "2025-01-15T23:36:20.395675Z",
            "url": "https://files.pythonhosted.org/packages/5d/b6/fda4e47b0bb015f28bae32e0d9bc4ff057da0fe90ac8a0c4ba6c3ad568f1/openstl-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "199c1e1fc8a7132e2492aad5013bdd088429bbd4f7803c8d12e9bd91e44336b1",
                "md5": "e06c245f9ec37277726bc7699f71b219",
                "sha256": "b7a618a3cc99d4a87651a78025616e87cc49d420ce44bd160a506b1ef6a1dbb9"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "e06c245f9ec37277726bc7699f71b219",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 1242483,
            "upload_time": "2025-01-15T23:36:23",
            "upload_time_iso_8601": "2025-01-15T23:36:23.184211Z",
            "url": "https://files.pythonhosted.org/packages/19/9c/1e1fc8a7132e2492aad5013bdd088429bbd4f7803c8d12e9bd91e44336b1/openstl-1.3.0-cp311-cp311-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c73ed3c55976e7672bc7e492d6adf06b1ff48e6106089cda46e2a66412d74999",
                "md5": "c61c47d7ea5592b06f93db487172d28f",
                "sha256": "c145d7cada707cc4714b309e366ca6a912f0740ff009943357792318835b0ec2"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c61c47d7ea5592b06f93db487172d28f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 1141887,
            "upload_time": "2025-01-15T23:36:26",
            "upload_time_iso_8601": "2025-01-15T23:36:26.029552Z",
            "url": "https://files.pythonhosted.org/packages/c7/3e/d3c55976e7672bc7e492d6adf06b1ff48e6106089cda46e2a66412d74999/openstl-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "45c0a30db8b65e848e3e5ee8e231aa6c953d604c5117a222281f083c6575f3d9",
                "md5": "002ac991994e2749419bac575af48ba5",
                "sha256": "d60dfea7c8d9db57aaa56836623ef2c2b6ccac38dec0e844c08961afe53703db"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "002ac991994e2749419bac575af48ba5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 125607,
            "upload_time": "2025-01-15T23:36:31",
            "upload_time_iso_8601": "2025-01-15T23:36:31.738669Z",
            "url": "https://files.pythonhosted.org/packages/45/c0/a30db8b65e848e3e5ee8e231aa6c953d604c5117a222281f083c6575f3d9/openstl-1.3.0-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f7b0b812c1cb1aeda68882f511262ea247ccb2046c25d05ea1ccf5b28d45363f",
                "md5": "b984cc92b2e78b8ecea33f603e257286",
                "sha256": "44279a17b3d0c5ba23accd6246eb7f717f3eb3186fa2e4353c292f09a996af29"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b984cc92b2e78b8ecea33f603e257286",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.4",
            "size": 146994,
            "upload_time": "2025-01-15T23:36:33",
            "upload_time_iso_8601": "2025-01-15T23:36:33.138458Z",
            "url": "https://files.pythonhosted.org/packages/f7/b0/b812c1cb1aeda68882f511262ea247ccb2046c25d05ea1ccf5b28d45363f/openstl-1.3.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e07305d583f4d9082676e6f456020685830066db224cde1047719cd63638fd34",
                "md5": "eccae2691b6b1f4c0b0d6c849db11706",
                "sha256": "1e6bb539b031c8b10d922c74bff147af3e9a04a859007caaeae5878a55e10544"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "eccae2691b6b1f4c0b0d6c849db11706",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 127840,
            "upload_time": "2025-01-15T23:36:36",
            "upload_time_iso_8601": "2025-01-15T23:36:36.143589Z",
            "url": "https://files.pythonhosted.org/packages/e0/73/05d583f4d9082676e6f456020685830066db224cde1047719cd63638fd34/openstl-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a3bd25dc5ea757caf25f9480b405e40bb4d0879b52a61cbbbb4543ae4f419b5a",
                "md5": "f94b605bf588cd0c66f0b665c43e7666",
                "sha256": "42e64ced556a848c1048f9ce3c58ba34a2e1af1ae41b6b90c1f631add696817e"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "f94b605bf588cd0c66f0b665c43e7666",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 118193,
            "upload_time": "2025-01-15T23:36:38",
            "upload_time_iso_8601": "2025-01-15T23:36:38.338573Z",
            "url": "https://files.pythonhosted.org/packages/a3/bd/25dc5ea757caf25f9480b405e40bb4d0879b52a61cbbbb4543ae4f419b5a/openstl-1.3.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f1fd9ca3c19d1f637ca0dac604e37fb2f8f13b788f919a9db8a066c23ffc92d9",
                "md5": "217ed3b130bb21340d5061861f2101f8",
                "sha256": "4b1d0d510c5b9f726db6fc9a9e7d1df5d07d6f1c7bbd57dc3126123c263f4c48"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "217ed3b130bb21340d5061861f2101f8",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 182566,
            "upload_time": "2025-01-15T23:36:39",
            "upload_time_iso_8601": "2025-01-15T23:36:39.873238Z",
            "url": "https://files.pythonhosted.org/packages/f1/fd/9ca3c19d1f637ca0dac604e37fb2f8f13b788f919a9db8a066c23ffc92d9/openstl-1.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b8dd639faf7de66a1e719a1e143ffcdabc9ec8c7a029939fcdc8092ae73100dc",
                "md5": "02f8c6a4fac0f149ffb4aa889aec4dc8",
                "sha256": "6417fcd5a8cc212bb4c4825dced3d658ea6f4a5de161f1b49b96c63fca1be908"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "02f8c6a4fac0f149ffb4aa889aec4dc8",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 173429,
            "upload_time": "2025-01-15T23:36:42",
            "upload_time_iso_8601": "2025-01-15T23:36:42.806902Z",
            "url": "https://files.pythonhosted.org/packages/b8/dd/639faf7de66a1e719a1e143ffcdabc9ec8c7a029939fcdc8092ae73100dc/openstl-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b023ec04dfe0881747599c5d861bea7a7bbb72a350bdbe83360f7dbf464ed574",
                "md5": "df43889db52b1614ecfd874759f0edd6",
                "sha256": "264d4c253b5d9107e7b4242acc4c88bb995029fa5674ca239315daee2763e271"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "df43889db52b1614ecfd874759f0edd6",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 1242676,
            "upload_time": "2025-01-15T23:36:46",
            "upload_time_iso_8601": "2025-01-15T23:36:46.915100Z",
            "url": "https://files.pythonhosted.org/packages/b0/23/ec04dfe0881747599c5d861bea7a7bbb72a350bdbe83360f7dbf464ed574/openstl-1.3.0-cp312-cp312-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3d59b46ad7954bfffa8268274b7a38d4b20b284cf41a5ebdb85f7abce31a5a3d",
                "md5": "d2a9de769e87d038e2ee1bdfdf0fe36a",
                "sha256": "42e5d96a3c867b490b841ebddbe734b44d3fc871e77c3add2076969ac4eabdb6"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d2a9de769e87d038e2ee1bdfdf0fe36a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 1142164,
            "upload_time": "2025-01-15T23:36:48",
            "upload_time_iso_8601": "2025-01-15T23:36:48.825246Z",
            "url": "https://files.pythonhosted.org/packages/3d/59/b46ad7954bfffa8268274b7a38d4b20b284cf41a5ebdb85f7abce31a5a3d/openstl-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b152efb89beff494d2e316f46c085e552fb9fec24c46144bffea5aac967c7c65",
                "md5": "0069c90e166b6730111be5e1093696ec",
                "sha256": "6818b6689c8d628280e10141583f9390f12061dbb651793c844645c50921ef64"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "0069c90e166b6730111be5e1093696ec",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 124857,
            "upload_time": "2025-01-15T23:36:50",
            "upload_time_iso_8601": "2025-01-15T23:36:50.730443Z",
            "url": "https://files.pythonhosted.org/packages/b1/52/efb89beff494d2e316f46c085e552fb9fec24c46144bffea5aac967c7c65/openstl-1.3.0-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ccabf9c9b29f91f2c7d1b1a3a42a2cbb7326758f4d51b3f7c137c2c296fceafa",
                "md5": "db5162dd3928e8c060e0a8ea26dd5978",
                "sha256": "75eb7995689e2529dd31c441228a9a3f7a0e3c32e97ff7dfd2c190475382dad1"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "db5162dd3928e8c060e0a8ea26dd5978",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.4",
            "size": 146676,
            "upload_time": "2025-01-15T23:36:52",
            "upload_time_iso_8601": "2025-01-15T23:36:52.491201Z",
            "url": "https://files.pythonhosted.org/packages/cc/ab/f9c9b29f91f2c7d1b1a3a42a2cbb7326758f4d51b3f7c137c2c296fceafa/openstl-1.3.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8cc9d8aeed8f6371ef1b728b945c593a1f5e9d31647cf721c138872443d3d8e0",
                "md5": "a824534eddd3a47c73d40b0e37280363",
                "sha256": "169254ed73705859e0019637fda6f23f128870cc73e09c7f4baae0dbdd267941"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a824534eddd3a47c73d40b0e37280363",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 127581,
            "upload_time": "2025-01-15T23:36:53",
            "upload_time_iso_8601": "2025-01-15T23:36:53.833986Z",
            "url": "https://files.pythonhosted.org/packages/8c/c9/d8aeed8f6371ef1b728b945c593a1f5e9d31647cf721c138872443d3d8e0/openstl-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8b0fb9bfc17249e6158a55f64d18b95d9bbf37a672ed991479937b74205ea2e9",
                "md5": "586d6f76026b01a2190cfb6c632ec1e9",
                "sha256": "95cfc1756b63afc930f8284862999f9020c3bcdc555a6261f08ec6280aeda645"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "586d6f76026b01a2190cfb6c632ec1e9",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 118195,
            "upload_time": "2025-01-15T23:36:56",
            "upload_time_iso_8601": "2025-01-15T23:36:56.038449Z",
            "url": "https://files.pythonhosted.org/packages/8b/0f/b9bfc17249e6158a55f64d18b95d9bbf37a672ed991479937b74205ea2e9/openstl-1.3.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "83a782269cd1748b0565c73c53f5ed90ca8319b27b4cb632c74709fc0d8b8cc4",
                "md5": "adf1ea3e4b66418279a09de189631662",
                "sha256": "7d46f7d065d385d53416878dd73ceea2678990f40a2dace2f90d4814cb55717d"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "adf1ea3e4b66418279a09de189631662",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 182578,
            "upload_time": "2025-01-15T23:36:57",
            "upload_time_iso_8601": "2025-01-15T23:36:57.810789Z",
            "url": "https://files.pythonhosted.org/packages/83/a7/82269cd1748b0565c73c53f5ed90ca8319b27b4cb632c74709fc0d8b8cc4/openstl-1.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d992bb2e5b389b730cf92bc49146f6973cb7e47c2d15a03fc7049f19108860af",
                "md5": "6fa70975265cf62bdcf7464ed4a0b1de",
                "sha256": "4bd882f454aeaa22712396eaa306d8446b8d09a4410520f17cb900c66f5c85b1"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6fa70975265cf62bdcf7464ed4a0b1de",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 173374,
            "upload_time": "2025-01-15T23:37:00",
            "upload_time_iso_8601": "2025-01-15T23:37:00.540374Z",
            "url": "https://files.pythonhosted.org/packages/d9/92/bb2e5b389b730cf92bc49146f6973cb7e47c2d15a03fc7049f19108860af/openstl-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9d1d23eb46aafe3c827b912d2fb1072d20a93d187521a7f467953014a8faa833",
                "md5": "8b44d1e287c0bb8977d8928352fa7ecf",
                "sha256": "ebfb3ab89d7d0943cced1e73d231a9e02648f89dc47612ea1a3b2dcf78e97991"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "8b44d1e287c0bb8977d8928352fa7ecf",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 1242970,
            "upload_time": "2025-01-15T23:37:03",
            "upload_time_iso_8601": "2025-01-15T23:37:03.408922Z",
            "url": "https://files.pythonhosted.org/packages/9d/1d/23eb46aafe3c827b912d2fb1072d20a93d187521a7f467953014a8faa833/openstl-1.3.0-cp313-cp313-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f9a898f92bb95e1b6145f2d65e2fec7043c5475f2381a180b3b9ab1a303e6b6b",
                "md5": "55a84c8da097f5f957e636f2ebea49f0",
                "sha256": "efc4c8717f672645f236f96e07de81113d3d280de3808d67ca304dc4998c27a6"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "55a84c8da097f5f957e636f2ebea49f0",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 1142163,
            "upload_time": "2025-01-15T23:37:05",
            "upload_time_iso_8601": "2025-01-15T23:37:05.219165Z",
            "url": "https://files.pythonhosted.org/packages/f9/a8/98f92bb95e1b6145f2d65e2fec7043c5475f2381a180b3b9ab1a303e6b6b/openstl-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a79cef883ce63173876ce05ade0690a275d6907c6c1167dc3299ae31cd11d276",
                "md5": "35d98f743443909848a272272ada6785",
                "sha256": "2b68605c7e859f90d1ef4dc00a0e6697db37597ada9ad7feb145681e8902cd36"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "35d98f743443909848a272272ada6785",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 125466,
            "upload_time": "2025-01-15T23:37:06",
            "upload_time_iso_8601": "2025-01-15T23:37:06.876098Z",
            "url": "https://files.pythonhosted.org/packages/a7/9c/ef883ce63173876ce05ade0690a275d6907c6c1167dc3299ae31cd11d276/openstl-1.3.0-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0a93ec423dc4cbb54a39129ea717ce77b6a1da2341043fb68d812568e606987f",
                "md5": "7e178ce03ec398635633a537d535f41b",
                "sha256": "535f4049654639a89c9237d00c0237e24e69fcb4b07e5d97b50e006fdfbbdd8c"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7e178ce03ec398635633a537d535f41b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.4",
            "size": 147589,
            "upload_time": "2025-01-15T23:37:08",
            "upload_time_iso_8601": "2025-01-15T23:37:08.127006Z",
            "url": "https://files.pythonhosted.org/packages/0a/93/ec423dc4cbb54a39129ea717ce77b6a1da2341043fb68d812568e606987f/openstl-1.3.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3cbc421e16c5116cff1d25b7905612c8398048cbb37329af382269f225289ae0",
                "md5": "0d9540babb110945693381c80fbea20f",
                "sha256": "4c4b55cce5a2b3deb5df7eb418cefeaec6441fe7e5515c4101095acc02214ae2"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0d9540babb110945693381c80fbea20f",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 125278,
            "upload_time": "2025-01-15T23:37:09",
            "upload_time_iso_8601": "2025-01-15T23:37:09.466393Z",
            "url": "https://files.pythonhosted.org/packages/3c/bc/421e16c5116cff1d25b7905612c8398048cbb37329af382269f225289ae0/openstl-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7388fb3b6ef3a668f29f60f2aea13914d6b1bb62adad2bcc8f9d8e02c25bf911",
                "md5": "8a405de9659300dc868ee69c79295d19",
                "sha256": "16c5f092c0acc6a4e22f4ad49581ece736ee711275f42db1d2b21c1a917f6773"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "8a405de9659300dc868ee69c79295d19",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 179874,
            "upload_time": "2025-01-15T23:37:10",
            "upload_time_iso_8601": "2025-01-15T23:37:10.844428Z",
            "url": "https://files.pythonhosted.org/packages/73/88/fb3b6ef3a668f29f60f2aea13914d6b1bb62adad2bcc8f9d8e02c25bf911/openstl-1.3.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0579486be53f273553480d40d3b1259827e10b77ad1f60a84d4708966e38e3e6",
                "md5": "f8c434c7c2adf87c8c9798f1287851af",
                "sha256": "2bf2b762134419198459a7f691069727dcee5196811d19179e13d1e1e041b242"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f8c434c7c2adf87c8c9798f1287851af",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 170691,
            "upload_time": "2025-01-15T23:37:12",
            "upload_time_iso_8601": "2025-01-15T23:37:12.632545Z",
            "url": "https://files.pythonhosted.org/packages/05/79/486be53f273553480d40d3b1259827e10b77ad1f60a84d4708966e38e3e6/openstl-1.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5b8a9d45db3100f02ce1db02805f2bc62eab95a17a0764eb5f3296df4a692063",
                "md5": "93e487226f99b3545ff0520924bd42d4",
                "sha256": "30ff5602d322c9f4f5fed797424e80119979af653da54f570a5498f0f8edee15"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "93e487226f99b3545ff0520924bd42d4",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 1240492,
            "upload_time": "2025-01-15T23:37:14",
            "upload_time_iso_8601": "2025-01-15T23:37:14.285887Z",
            "url": "https://files.pythonhosted.org/packages/5b/8a/9d45db3100f02ce1db02805f2bc62eab95a17a0764eb5f3296df4a692063/openstl-1.3.0-cp36-cp36m-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "911af62a14d92f4cb92e4bb4180cbbc0d06867a69e57a07ecbcb3d4685429b97",
                "md5": "a7285a87e26b88ef505bc3543aa903c4",
                "sha256": "ce973d5d5acdf718262e24f59e54ad713b5e340c28982f6851acd557e8f1e94d"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a7285a87e26b88ef505bc3543aa903c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 1139326,
            "upload_time": "2025-01-15T23:37:19",
            "upload_time_iso_8601": "2025-01-15T23:37:19.887187Z",
            "url": "https://files.pythonhosted.org/packages/91/1a/f62a14d92f4cb92e4bb4180cbbc0d06867a69e57a07ecbcb3d4685429b97/openstl-1.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "23bab068f0c4fe9f1ce6dd378d2fe9237716e2b660609d4c53af59f8e2d25dd9",
                "md5": "3f27d024699691cf43e0d5a20794eced",
                "sha256": "022167a50461e4f3ce748f23dedd4710e912b1565922047612ae208f1e474a54"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-win32.whl",
            "has_sig": false,
            "md5_digest": "3f27d024699691cf43e0d5a20794eced",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 124322,
            "upload_time": "2025-01-15T23:37:21",
            "upload_time_iso_8601": "2025-01-15T23:37:21.484810Z",
            "url": "https://files.pythonhosted.org/packages/23/ba/b068f0c4fe9f1ce6dd378d2fe9237716e2b660609d4c53af59f8e2d25dd9/openstl-1.3.0-cp36-cp36m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9190456704551fee537aa8065799ce8e6ab3e3df1defebec2af6a46b4103551e",
                "md5": "b2d4445bfeb576bdcfbec2cdad677901",
                "sha256": "ec4610b63a8f66404d148065ac2781f46458ec74037330b48b151684742f5198"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp36-cp36m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b2d4445bfeb576bdcfbec2cdad677901",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.4",
            "size": 144604,
            "upload_time": "2025-01-15T23:37:22",
            "upload_time_iso_8601": "2025-01-15T23:37:22.798978Z",
            "url": "https://files.pythonhosted.org/packages/91/90/456704551fee537aa8065799ce8e6ab3e3df1defebec2af6a46b4103551e/openstl-1.3.0-cp36-cp36m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "04059f1a07483fe854938adfc4336374ff52389afbc221d8233413dedcc271d4",
                "md5": "0aed83ddcdcc28e62cfd15b16fdcda33",
                "sha256": "ca282fde14d1516ed925077c6f0a4fb4c1f5b30b5abbdf24b4fdb4f4864aeca2"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0aed83ddcdcc28e62cfd15b16fdcda33",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 125414,
            "upload_time": "2025-01-15T23:37:24",
            "upload_time_iso_8601": "2025-01-15T23:37:24.623991Z",
            "url": "https://files.pythonhosted.org/packages/04/05/9f1a07483fe854938adfc4336374ff52389afbc221d8233413dedcc271d4/openstl-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d0dbf515d8e488cac0aad11e97f14e3539c8b6789e0b3a34c1243af0aeb67810",
                "md5": "9d2192101b02f5712ad6bcc9cd505ad6",
                "sha256": "fe104c60ffbaa5577bba7f67a7e5ce38082b8e80964669a12215a434a5133765"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "9d2192101b02f5712ad6bcc9cd505ad6",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 179755,
            "upload_time": "2025-01-15T23:37:25",
            "upload_time_iso_8601": "2025-01-15T23:37:25.896078Z",
            "url": "https://files.pythonhosted.org/packages/d0/db/f515d8e488cac0aad11e97f14e3539c8b6789e0b3a34c1243af0aeb67810/openstl-1.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cbe11f2f0b8a7c5569c8c5cf8c2d095780bc845cba3c3499f1ebc5d84e2165c8",
                "md5": "c8dc42d94daaf270c7d782d5897f0eed",
                "sha256": "462b6b1e2dbd922818fdede08407ee04ba0e9056b60460cc044162b665dd7796"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c8dc42d94daaf270c7d782d5897f0eed",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 170535,
            "upload_time": "2025-01-15T23:37:27",
            "upload_time_iso_8601": "2025-01-15T23:37:27.651066Z",
            "url": "https://files.pythonhosted.org/packages/cb/e1/1f2f0b8a7c5569c8c5cf8c2d095780bc845cba3c3499f1ebc5d84e2165c8/openstl-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "62d01e06b74162d61a5e5e4c087c29eef2a2ad83c108248f582688d09074cd95",
                "md5": "49d4e035fa69b7cc9ff7238a28ae9992",
                "sha256": "1c2b45cdd31961236b7ce6c0c4bb80aecd373194ae0f2a92c7031bc4dd226edf"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "49d4e035fa69b7cc9ff7238a28ae9992",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 1240501,
            "upload_time": "2025-01-15T23:37:29",
            "upload_time_iso_8601": "2025-01-15T23:37:29.191679Z",
            "url": "https://files.pythonhosted.org/packages/62/d0/1e06b74162d61a5e5e4c087c29eef2a2ad83c108248f582688d09074cd95/openstl-1.3.0-cp37-cp37m-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1bf550a5851914fb3130f5cb9633929c649ec6b1da61ec3a7ba464364e6875eb",
                "md5": "4f306ad6ef6c579b1d2fe984e08d9840",
                "sha256": "02957287780ef697d35a6e59d5647b3d707c4acfd5e89ae011651bbc81f4eded"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4f306ad6ef6c579b1d2fe984e08d9840",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 1139198,
            "upload_time": "2025-01-15T23:37:31",
            "upload_time_iso_8601": "2025-01-15T23:37:31.422300Z",
            "url": "https://files.pythonhosted.org/packages/1b/f5/50a5851914fb3130f5cb9633929c649ec6b1da61ec3a7ba464364e6875eb/openstl-1.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fdeb468ebf7396204a335d5d86c2b4196e54b05f6a4f188805eb039a22449ebd",
                "md5": "ece58e81682e822bd5704dce6c992432",
                "sha256": "40435ba95d96b1cf0fc72d989ed5d62d0357ab9a4cb3b675bcac8374c6437a10"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-win32.whl",
            "has_sig": false,
            "md5_digest": "ece58e81682e822bd5704dce6c992432",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 124493,
            "upload_time": "2025-01-15T23:37:34",
            "upload_time_iso_8601": "2025-01-15T23:37:34.943038Z",
            "url": "https://files.pythonhosted.org/packages/fd/eb/468ebf7396204a335d5d86c2b4196e54b05f6a4f188805eb039a22449ebd/openstl-1.3.0-cp37-cp37m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "54d6ea634ae50f3ff3e9430050dcd4302b8cae45632c5551de26018448314a16",
                "md5": "99176c7b922c242940717cfb15154410",
                "sha256": "1dcc6a4d1c8b4666b313507c5e0ba38d4040d7d9833d7ca1fe4da398cf423507"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "99176c7b922c242940717cfb15154410",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.4",
            "size": 144816,
            "upload_time": "2025-01-15T23:37:36",
            "upload_time_iso_8601": "2025-01-15T23:37:36.241803Z",
            "url": "https://files.pythonhosted.org/packages/54/d6/ea634ae50f3ff3e9430050dcd4302b8cae45632c5551de26018448314a16/openstl-1.3.0-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "90e8d2eba80698ed956b4021a3fd8c76a424b5713c5c3f0f4ad073c14fcfe1d7",
                "md5": "6ce0bf840a05e841ab6e1956bbd9f3e1",
                "sha256": "bdcc66122191784064c848296ebfd42cc440f98dc11ac1d7223dd61fb8198328"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6ce0bf840a05e841ab6e1956bbd9f3e1",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 125750,
            "upload_time": "2025-01-15T23:37:39",
            "upload_time_iso_8601": "2025-01-15T23:37:39.086797Z",
            "url": "https://files.pythonhosted.org/packages/90/e8/d2eba80698ed956b4021a3fd8c76a424b5713c5c3f0f4ad073c14fcfe1d7/openstl-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2e887b2100c6cf434dbba59d0e2a85a4ebf4eca4229da1e7ddaeefe11f0c4e80",
                "md5": "c4fcdf4ce65ccbd01b80f1ca6d49b836",
                "sha256": "eb6ab009071587c358e3322f7c73803970b2912ca5c8259504fd363174d4a0e7"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c4fcdf4ce65ccbd01b80f1ca6d49b836",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 116506,
            "upload_time": "2025-01-15T23:37:40",
            "upload_time_iso_8601": "2025-01-15T23:37:40.758741Z",
            "url": "https://files.pythonhosted.org/packages/2e/88/7b2100c6cf434dbba59d0e2a85a4ebf4eca4229da1e7ddaeefe11f0c4e80/openstl-1.3.0-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c3298db3067c2fc6896415f2e2ec16a6043d825c4f800f098951101834ef5468",
                "md5": "5a4e7bfbdf181c2dd7ab5bdaa8550267",
                "sha256": "98e6c5b3818dc0051c8f3044887bdf7f22f0bd7ece0c39d2aa4657ea87025d1a"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "5a4e7bfbdf181c2dd7ab5bdaa8550267",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 181235,
            "upload_time": "2025-01-15T23:37:42",
            "upload_time_iso_8601": "2025-01-15T23:37:42.033374Z",
            "url": "https://files.pythonhosted.org/packages/c3/29/8db3067c2fc6896415f2e2ec16a6043d825c4f800f098951101834ef5468/openstl-1.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "514d4662992e9fa5f9d49bd92ee00dd4ef223bf6bb05fbdac84afa6ebed26c4e",
                "md5": "f7c6c66cffc5b6cffad4bced904f2ef2",
                "sha256": "d95e684386cfc6ad24dfb3711ca98476354ccd4c3da13cbe94116053a2c87ca0"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f7c6c66cffc5b6cffad4bced904f2ef2",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 172566,
            "upload_time": "2025-01-15T23:37:43",
            "upload_time_iso_8601": "2025-01-15T23:37:43.458022Z",
            "url": "https://files.pythonhosted.org/packages/51/4d/4662992e9fa5f9d49bd92ee00dd4ef223bf6bb05fbdac84afa6ebed26c4e/openstl-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1be76c0d4cda9ebea6bcf81ad3e98a5ec7c95e36845be41a66838d58b875050a",
                "md5": "893766aff80f07028b229525ac6d52c1",
                "sha256": "90a0836ac2f98e15b252d1f61c787a6e91f2d1a332ea916d614afb0035cb0be1"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "893766aff80f07028b229525ac6d52c1",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 1241675,
            "upload_time": "2025-01-15T23:37:45",
            "upload_time_iso_8601": "2025-01-15T23:37:45.588964Z",
            "url": "https://files.pythonhosted.org/packages/1b/e7/6c0d4cda9ebea6bcf81ad3e98a5ec7c95e36845be41a66838d58b875050a/openstl-1.3.0-cp38-cp38-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8bfa421635698aa963214040340df5b727937d8978d948d97258a06b2a62a65c",
                "md5": "8546b8c03480ff87963365e7271463df",
                "sha256": "3cee198d3799f396a36044127e7cc67fb4042efdbb9bf79a824a51dd18050c72"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8546b8c03480ff87963365e7271463df",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 1140298,
            "upload_time": "2025-01-15T23:37:47",
            "upload_time_iso_8601": "2025-01-15T23:37:47.376008Z",
            "url": "https://files.pythonhosted.org/packages/8b/fa/421635698aa963214040340df5b727937d8978d948d97258a06b2a62a65c/openstl-1.3.0-cp38-cp38-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "101a07728dbf78b5825bfe0a39e77706ac5f8cae761b5687e504504c9f9f7170",
                "md5": "81443cea195a4e83fa1545e88e3c9acf",
                "sha256": "713863a5f31126eb169eb8bb2e0c5b373537fd6cf046fd642142c28cae8c4ae1"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "81443cea195a4e83fa1545e88e3c9acf",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 124206,
            "upload_time": "2025-01-15T23:37:48",
            "upload_time_iso_8601": "2025-01-15T23:37:48.876888Z",
            "url": "https://files.pythonhosted.org/packages/10/1a/07728dbf78b5825bfe0a39e77706ac5f8cae761b5687e504504c9f9f7170/openstl-1.3.0-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c8b6eca9af3f660884d9cceab096b2a52bac4baef2a59ab059496261e32352a0",
                "md5": "b4643678891cfd4c127659eeb1368116",
                "sha256": "ced025db49ebfa36adb1f914cfda3d55cfd0bdee0107abdfe8e01770e4112952"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b4643678891cfd4c127659eeb1368116",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.4",
            "size": 145314,
            "upload_time": "2025-01-15T23:37:50",
            "upload_time_iso_8601": "2025-01-15T23:37:50.336924Z",
            "url": "https://files.pythonhosted.org/packages/c8/b6/eca9af3f660884d9cceab096b2a52bac4baef2a59ab059496261e32352a0/openstl-1.3.0-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "24752e7b0cd4dbdde1fea71a53ece660542254ae58e1d927a044409edac52154",
                "md5": "8cf4143f7ba135c6553d0c3d81badf7e",
                "sha256": "3779468650ec6f7cad31a4d5935530388e57db1353a8da1d736d1f92ac967477"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8cf4143f7ba135c6553d0c3d81badf7e",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 126049,
            "upload_time": "2025-01-15T23:37:53",
            "upload_time_iso_8601": "2025-01-15T23:37:53.250236Z",
            "url": "https://files.pythonhosted.org/packages/24/75/2e7b0cd4dbdde1fea71a53ece660542254ae58e1d927a044409edac52154/openstl-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9181c4d0748b20c18f0ff492e4571ccb82c860d891120d2a65a3fb43d751ec0b",
                "md5": "6e308a5161b4223ab3dd769ae9446c3f",
                "sha256": "c2f84d9094a3cbc3c9dc5eb9697929dac50c8554a8da0356189139440d105a1d"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "6e308a5161b4223ab3dd769ae9446c3f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 116796,
            "upload_time": "2025-01-15T23:37:55",
            "upload_time_iso_8601": "2025-01-15T23:37:55.189795Z",
            "url": "https://files.pythonhosted.org/packages/91/81/c4d0748b20c18f0ff492e4571ccb82c860d891120d2a65a3fb43d751ec0b/openstl-1.3.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "20f8070eb37701784e553af64fcac5feca414b3a81fd52d64a991654893e9e7b",
                "md5": "ad8cd7a0d2c1cd23aeb3beea4e2926aa",
                "sha256": "81f5bd080c0b0c49cefbd1d1a9e0e39b826da4a5e6b464f2cb14dae435a90bc3"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "ad8cd7a0d2c1cd23aeb3beea4e2926aa",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 182012,
            "upload_time": "2025-01-15T23:37:56",
            "upload_time_iso_8601": "2025-01-15T23:37:56.555166Z",
            "url": "https://files.pythonhosted.org/packages/20/f8/070eb37701784e553af64fcac5feca414b3a81fd52d64a991654893e9e7b/openstl-1.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5e9f31e2bf40887e5889c81ea75ee7bf526ce926b78f5e4f2884da6d3d5e6c79",
                "md5": "6b73ea7ab7ae661875457db16e5067e8",
                "sha256": "28b6b6d5369e1c4fa128e7bd6bb62f2f138fe4e1f00cd6fcb1e0ac3b5c0e6861"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6b73ea7ab7ae661875457db16e5067e8",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 173005,
            "upload_time": "2025-01-15T23:37:57",
            "upload_time_iso_8601": "2025-01-15T23:37:57.943426Z",
            "url": "https://files.pythonhosted.org/packages/5e/9f/31e2bf40887e5889c81ea75ee7bf526ce926b78f5e4f2884da6d3d5e6c79/openstl-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a5f71b9c65eabd869325b2891f44041f39be7e7137cf151de300d551ec357c15",
                "md5": "687babf80ab155299ceffbfa350cc205",
                "sha256": "9f9402bc01c69443aaf3aead542ba6946641cea5318bc683ac3d929d5efebc76"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "687babf80ab155299ceffbfa350cc205",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 1242318,
            "upload_time": "2025-01-15T23:37:59",
            "upload_time_iso_8601": "2025-01-15T23:37:59.511432Z",
            "url": "https://files.pythonhosted.org/packages/a5/f7/1b9c65eabd869325b2891f44041f39be7e7137cf151de300d551ec357c15/openstl-1.3.0-cp39-cp39-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aa4c101a165d2d7959eb0ca9f26e5797d0bf167e140cfe045e325b739aeed5ab",
                "md5": "0380f8370ff6ad530a5321abe2e4812a",
                "sha256": "89ffcc08858eefd94f8a63b47a5ca0438b563d6ef9e35de4cfdfb20eebc667b9"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0380f8370ff6ad530a5321abe2e4812a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 1140952,
            "upload_time": "2025-01-15T23:38:01",
            "upload_time_iso_8601": "2025-01-15T23:38:01.193826Z",
            "url": "https://files.pythonhosted.org/packages/aa/4c/101a165d2d7959eb0ca9f26e5797d0bf167e140cfe045e325b739aeed5ab/openstl-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "226d3f0369180243cee370c0b40d9e309d458dd967949d027cf72e6d978b0273",
                "md5": "d848e3ac5a3dd5b981e0be98a3296594",
                "sha256": "1f3d788f7aa9767805abcb12d035ef1af944dc5e16636eaebc3e5b87f6779871"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "d848e3ac5a3dd5b981e0be98a3296594",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 124419,
            "upload_time": "2025-01-15T23:38:02",
            "upload_time_iso_8601": "2025-01-15T23:38:02.891904Z",
            "url": "https://files.pythonhosted.org/packages/22/6d/3f0369180243cee370c0b40d9e309d458dd967949d027cf72e6d978b0273/openstl-1.3.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e9baf67c1632c241690b6ecb178c1efc45a30cb0b3607115c111e22209b78330",
                "md5": "1c50ce89abc712bedf778793ec0e2996",
                "sha256": "6023a434f1b2a5a70a3501d371d5d285ca70da459118a760338ddf3908051402"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1c50ce89abc712bedf778793ec0e2996",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.4",
            "size": 145474,
            "upload_time": "2025-01-15T23:38:04",
            "upload_time_iso_8601": "2025-01-15T23:38:04.242589Z",
            "url": "https://files.pythonhosted.org/packages/e9/ba/f67c1632c241690b6ecb178c1efc45a30cb0b3607115c111e22209b78330/openstl-1.3.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7b3b4307f7b5fdd90fbf044c8d15da3aab01015fcc9f4b594a5c7bafd5f250b7",
                "md5": "6787d12d3850d580c7fdfe9b9e2905e2",
                "sha256": "2c76aa6ecd80c16b738d5215145792fdd4195aec30e9f69cf91df7ac44ca73a2"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6787d12d3850d580c7fdfe9b9e2905e2",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.4",
            "size": 125598,
            "upload_time": "2025-01-15T23:38:05",
            "upload_time_iso_8601": "2025-01-15T23:38:05.667565Z",
            "url": "https://files.pythonhosted.org/packages/7b/3b/4307f7b5fdd90fbf044c8d15da3aab01015fcc9f4b594a5c7bafd5f250b7/openstl-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "15fac6e14c976d6ac199303cb1aee449b2dfe937734a4241824690526f14a693",
                "md5": "d8f6af01ac76d6d1ab3349013c3f2848",
                "sha256": "dcdb023f5e277f2827c23b1f11c1be242ed9b8b50a9673d4ad2c1f930f384a63"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d8f6af01ac76d6d1ab3349013c3f2848",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.4",
            "size": 116274,
            "upload_time": "2025-01-15T23:38:07",
            "upload_time_iso_8601": "2025-01-15T23:38:07.285957Z",
            "url": "https://files.pythonhosted.org/packages/15/fa/c6e14c976d6ac199303cb1aee449b2dfe937734a4241824690526f14a693/openstl-1.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3d1b7cabeccaa53ad1450d52e7797ee8cf99d786ade47b05716288a90b62ca3c",
                "md5": "e7bfa80b786a24f44c04ca6db385ecd2",
                "sha256": "570384d9255cee432dd5ffff7509fe0810e6f7e70146e3501f0f62320780b4b0"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "e7bfa80b786a24f44c04ca6db385ecd2",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.4",
            "size": 176704,
            "upload_time": "2025-01-15T23:38:09",
            "upload_time_iso_8601": "2025-01-15T23:38:09.055509Z",
            "url": "https://files.pythonhosted.org/packages/3d/1b/7cabeccaa53ad1450d52e7797ee8cf99d786ade47b05716288a90b62ca3c/openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b2822b6cdf47a4c4d7ad2d763d853014af5a113bf18d0ceecb689d9f752ce6f7",
                "md5": "f74449ef110af462b4094ce4e07fa1fd",
                "sha256": "5f74b194865d24c51ee8fdc3c1e50c2b3a9421dcf569c48e6d42792e1f3e5a4f"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f74449ef110af462b4094ce4e07fa1fd",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.4",
            "size": 167171,
            "upload_time": "2025-01-15T23:38:10",
            "upload_time_iso_8601": "2025-01-15T23:38:10.447707Z",
            "url": "https://files.pythonhosted.org/packages/b2/82/2b6cdf47a4c4d7ad2d763d853014af5a113bf18d0ceecb689d9f752ce6f7/openstl-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "153f425764b5913c1ce4988ef904ebacfecd428c0cd3f0b864af4aee055530ca",
                "md5": "540834e7e5565c4cff579c7f9a6538b8",
                "sha256": "67e1d5c1e48c84a2febc6ab7e6ea2ea5d6c64cac93c8e90e7b6269501c0e706d"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp310-pypy310_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "540834e7e5565c4cff579c7f9a6538b8",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.4",
            "size": 135447,
            "upload_time": "2025-01-15T23:38:11",
            "upload_time_iso_8601": "2025-01-15T23:38:11.838115Z",
            "url": "https://files.pythonhosted.org/packages/15/3f/425764b5913c1ce4988ef904ebacfecd428c0cd3f0b864af4aee055530ca/openstl-1.3.0-pp310-pypy310_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6dd98e78321e59e0bb2d1deea919c0bb6ef448e58e98fd464682f506bb83bc51",
                "md5": "800703d1775b8b2047ea8ef507e36e8e",
                "sha256": "4eea16327c334b14036fd09126b0f0112dbdc3fe9b1d2698016d8310c49e476f"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "800703d1775b8b2047ea8ef507e36e8e",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.4",
            "size": 125076,
            "upload_time": "2025-01-15T23:38:13",
            "upload_time_iso_8601": "2025-01-15T23:38:13.204559Z",
            "url": "https://files.pythonhosted.org/packages/6d/d9/8e78321e59e0bb2d1deea919c0bb6ef448e58e98fd464682f506bb83bc51/openstl-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1eeeab21ce47a9b57dee59f6ef310da521f8f922251e009d6368e0d4d0534b60",
                "md5": "85473df4536c94151ab760cdecdc261f",
                "sha256": "2902846c323cbd8fc2170079124481c6f95dede52c15fe77f8ae5ce2d0a9113a"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "85473df4536c94151ab760cdecdc261f",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.4",
            "size": 175792,
            "upload_time": "2025-01-15T23:38:16",
            "upload_time_iso_8601": "2025-01-15T23:38:16.115713Z",
            "url": "https://files.pythonhosted.org/packages/1e/ee/ab21ce47a9b57dee59f6ef310da521f8f922251e009d6368e0d4d0534b60/openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7fc2c36b50aa4c1e456afaec77e849695fa6862785563cb6b89e886bb2ef3458",
                "md5": "83d956860edc7dac5a1568b041144a31",
                "sha256": "b13d95004b5750197aa9cd006d555d98c256f500687c170937f0dfc406cf00c5"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "83d956860edc7dac5a1568b041144a31",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.4",
            "size": 166508,
            "upload_time": "2025-01-15T23:38:17",
            "upload_time_iso_8601": "2025-01-15T23:38:17.819962Z",
            "url": "https://files.pythonhosted.org/packages/7f/c2/c36b50aa4c1e456afaec77e849695fa6862785563cb6b89e886bb2ef3458/openstl-1.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5f9de0c92d8e0669c6d3881915208fd51cffcb81b628c422a87537e28b4eb49f",
                "md5": "1dd3bb32420be2e8c0aa12be1f8650f8",
                "sha256": "e1265d8cbbb6c4e8596efe5247cf954e28f42faa32b2fae1ea8450daf8cb0da7"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp37-pypy37_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1dd3bb32420be2e8c0aa12be1f8650f8",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.4",
            "size": 135292,
            "upload_time": "2025-01-15T23:38:19",
            "upload_time_iso_8601": "2025-01-15T23:38:19.319583Z",
            "url": "https://files.pythonhosted.org/packages/5f/9d/e0c92d8e0669c6d3881915208fd51cffcb81b628c422a87537e28b4eb49f/openstl-1.3.0-pp37-pypy37_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "71e7a5e03054b6fb43b9c663403387c6e11d5962da5bdab574801d7002bff95a",
                "md5": "4fe42e8f5aa120b4f0755f5c65786d9f",
                "sha256": "3e347fd0e79fd7a6bd706b2dea18941f98832050fdb3155a7c2c5f4c7a663b86"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4fe42e8f5aa120b4f0755f5c65786d9f",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.4",
            "size": 125453,
            "upload_time": "2025-01-15T23:38:20",
            "upload_time_iso_8601": "2025-01-15T23:38:20.781299Z",
            "url": "https://files.pythonhosted.org/packages/71/e7/a5e03054b6fb43b9c663403387c6e11d5962da5bdab574801d7002bff95a/openstl-1.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "066b9b7af77fa0fa397df9c760f22b66220b723bd02b5104bfaa9ad59960ef85",
                "md5": "39eb8f5143c6b711eef3c776516a54cd",
                "sha256": "e5f6609e4f83dc48d1b223fbc3737244ef7e073705bdd6fb96d4d5fb3894c901"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "39eb8f5143c6b711eef3c776516a54cd",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.4",
            "size": 116211,
            "upload_time": "2025-01-15T23:38:22",
            "upload_time_iso_8601": "2025-01-15T23:38:22.224881Z",
            "url": "https://files.pythonhosted.org/packages/06/6b/9b7af77fa0fa397df9c760f22b66220b723bd02b5104bfaa9ad59960ef85/openstl-1.3.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "03a33749746117092ba65f3a355935206701de471e52481f17daf1b687872d5c",
                "md5": "dc4f73f63dbbd8d0ecdd150f9c4a5cd6",
                "sha256": "66d68a3a7e471eb9b92eca98829f1118d0134fc5f4d7b7c907027ce00fb2de1b"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "dc4f73f63dbbd8d0ecdd150f9c4a5cd6",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.4",
            "size": 176509,
            "upload_time": "2025-01-15T23:38:27",
            "upload_time_iso_8601": "2025-01-15T23:38:27.244137Z",
            "url": "https://files.pythonhosted.org/packages/03/a3/3749746117092ba65f3a355935206701de471e52481f17daf1b687872d5c/openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7fb460f76c1f4b4fd5c0bb9053641f3735f9029aff337e9272f079a7d6becb08",
                "md5": "9d159d10f75235ba7ef4a680e80641c7",
                "sha256": "73c25700ad6e00563234d52726208fab0e5e2c9894737adb948964a6407bd9f9"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9d159d10f75235ba7ef4a680e80641c7",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.4",
            "size": 166891,
            "upload_time": "2025-01-15T23:38:28",
            "upload_time_iso_8601": "2025-01-15T23:38:28.759345Z",
            "url": "https://files.pythonhosted.org/packages/7f/b4/60f76c1f4b4fd5c0bb9053641f3735f9029aff337e9272f079a7d6becb08/openstl-1.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "72b143679fa661daf259b4c415b15d3d5cc5cd37d7ab30f9dae13eb1394b4ff4",
                "md5": "efc2805a256f4334913f583a6cdf8143",
                "sha256": "9ad324b5616fea689c3385fe3e19bafb1004f69f4a6e688fdab6e72f7be72033"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp38-pypy38_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "efc2805a256f4334913f583a6cdf8143",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.4",
            "size": 135474,
            "upload_time": "2025-01-15T23:38:30",
            "upload_time_iso_8601": "2025-01-15T23:38:30.494320Z",
            "url": "https://files.pythonhosted.org/packages/72/b1/43679fa661daf259b4c415b15d3d5cc5cd37d7ab30f9dae13eb1394b4ff4/openstl-1.3.0-pp38-pypy38_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f7daf5119652f903b6ad5c6cabc8a2d35ad43c99001c74de7602048217e5234c",
                "md5": "e4b47a93ed7387ba5141e31737b8e697",
                "sha256": "344dfc8869efbcc665a51a84677231ef28eddf4f7018562230f32949ce61a72a"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e4b47a93ed7387ba5141e31737b8e697",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.4",
            "size": 125580,
            "upload_time": "2025-01-15T23:38:32",
            "upload_time_iso_8601": "2025-01-15T23:38:32.576846Z",
            "url": "https://files.pythonhosted.org/packages/f7/da/f5119652f903b6ad5c6cabc8a2d35ad43c99001c74de7602048217e5234c/openstl-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b488f3bdc64b77541193dbc952b456352e633962182dfb903d1dabc5dc430a48",
                "md5": "620519c5856a56589a691fd7d4b03470",
                "sha256": "841030b7027ba63c2ebc6bff27140707e7f34058321f46e5e9a207e6db9027b0"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "620519c5856a56589a691fd7d4b03470",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.4",
            "size": 116260,
            "upload_time": "2025-01-15T23:38:34",
            "upload_time_iso_8601": "2025-01-15T23:38:34.004320Z",
            "url": "https://files.pythonhosted.org/packages/b4/88/f3bdc64b77541193dbc952b456352e633962182dfb903d1dabc5dc430a48/openstl-1.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "305e6f70240bc2328f7ff0a066389d94f84e67b28dabdb4ec09156b72df05d1f",
                "md5": "8155d90eef44af4a2b4a5b382c4ed9c1",
                "sha256": "7e3c187d799369ed186208736103fdd11af69151aa7cda03a9857fb4a047b851"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "8155d90eef44af4a2b4a5b382c4ed9c1",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.4",
            "size": 176697,
            "upload_time": "2025-01-15T23:38:35",
            "upload_time_iso_8601": "2025-01-15T23:38:35.503596Z",
            "url": "https://files.pythonhosted.org/packages/30/5e/6f70240bc2328f7ff0a066389d94f84e67b28dabdb4ec09156b72df05d1f/openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a571430cf6afec6e53582aa2b063b33b00b5b4e14cb2e0bfe36e586e1806002f",
                "md5": "c1b30bf2e066c9dee82f2aa38aad8c05",
                "sha256": "fb9f0b4d68a4b888c6cb4098a281ca46d47a91e88c464dc14998e506a6cb1533"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c1b30bf2e066c9dee82f2aa38aad8c05",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.4",
            "size": 167147,
            "upload_time": "2025-01-15T23:38:36",
            "upload_time_iso_8601": "2025-01-15T23:38:36.955252Z",
            "url": "https://files.pythonhosted.org/packages/a5/71/430cf6afec6e53582aa2b063b33b00b5b4e14cb2e0bfe36e586e1806002f/openstl-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a93a4c9804e3eb8b8d645500ac2555e6dd76b1123091806a71c211b85bc7f721",
                "md5": "bb595a842603189ca7bd7e98d894c5c6",
                "sha256": "533b8c56b55680f64a36e7e77b2a28b8f32f1131b581c285283aca801ebb1fee"
            },
            "downloads": -1,
            "filename": "openstl-1.3.0-pp39-pypy39_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "bb595a842603189ca7bd7e98d894c5c6",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.4",
            "size": 135549,
            "upload_time": "2025-01-15T23:38:38",
            "upload_time_iso_8601": "2025-01-15T23:38:38.333161Z",
            "url": "https://files.pythonhosted.org/packages/a9/3a/4c9804e3eb8b8d645500ac2555e6dd76b1123091806a71c211b85bc7f721/openstl-1.3.0-pp39-pypy39_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-15 23:35:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Innoptech",
    "github_project": "OpenSTL",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "openstl"
}
        
Elapsed time: 0.58822s