Skip to main content

100% openCypher-compliant in-memory graph database — 4 backends, 175+ algorithms, pure Rust

Project description

OCG — OpenCypher Graph

High-performance in-memory graph database with 100% OpenCypher compliance, 4 backends, and 175+ algorithms — pure Rust.

PyPI Python License OpenCypher TCK Rust

Overview

OCG executes OpenCypher queries against in-memory property graphs. It is built in pure Rust and exposed to Python via PyO3 bindings.

  • 100% OpenCypher TCK: 3,897 / 3,897 scenarios passing (0 skipped, 0 failed)
  • 4 graph backends: PropertyGraph, NetworKitRust, RustworkxCore, Graphrs
  • 175+ graph algorithms: centrality, community, pathfinding, spanning trees, flow, coloring, matching, cliques, layout, generators
  • Bulk Loader API: 57x faster batch construction vs OpenCypher CREATE statements
  • Persistence: WAL + Parquet snapshots for crash-safe durability
  • Serialization: save/load graphs to JSON with full metadata
  • Distributed mode (Rust only): Partitioned storage, Apache Arrow Flight RPC, Kubernetes-native autoscaling (build with --features distributed)
  • Python 3.11–3.14, macOS · Linux (glibc + musl) · Windows

Installation

pip install ocg

Rust:

[dependencies]
ocg = "0.4.5"

Quick Start

Python

from ocg import Graph

graph = Graph()

# OpenCypher queries
graph.execute("CREATE (a:Person {name: 'Alice', age: 30})")
graph.execute("CREATE (b:Person {name: 'Bob', age: 25})")
graph.execute("MATCH (a:Person), (b:Person) WHERE a.name='Alice' AND b.name='Bob' CREATE (a)-[:KNOWS]->(b)")

result = graph.execute("MATCH (a:Person)-[:KNOWS]->(b:Person) RETURN a.name AS from, b.name AS to")
print(result)  # [{'from': 'Alice', 'to': 'Bob'}]

Bulk Loader (10–57x faster)

Bypasses the OpenCypher parser for large batch operations:

from ocg import Graph

graph = Graph()

node_ids = graph.bulk_create_nodes([
    (["Person"], {"name": "Alice", "age": 30}),
    (["Person"], {"name": "Bob",   "age": 25}),
])

graph.bulk_create_relationships([
    (node_ids[0], node_ids[1], "KNOWS", {"since": 2020}),
])

result = graph.execute("MATCH (a)-[:KNOWS]->(b) RETURN a.name, b.name")

Serialization

graph.save("my_graph.json")
loaded = Graph.load("my_graph.json")

Persistence (WAL + Snapshots)

For crash-safe durability with write-ahead logging:

from ocg import Graph

# Open persistent graph (creates/loads from directory)
graph = Graph.open("/path/to/data")

# All mutations are logged to WAL
graph.execute("CREATE (:User {name: 'Alice'})")
graph.execute("CREATE (:User {name: 'Bob'})")

# Manual checkpoint (writes snapshot.json, truncates WAL)
nodes, edges = graph.checkpoint()
print(f"Checkpointed: {nodes} nodes, {edges} edges")

# Auto-checkpoint happens after 10,000 operations

Files created:

  • snapshot.json — Full graph state (nodes + edges + properties)
  • wal.ndjson — Write-ahead log (operations since last checkpoint)

On restart, Graph.open() automatically loads the snapshot and replays the WAL to recover the exact state before shutdown.

Rust

use ocg::{PropertyGraph, execute};

let mut graph = PropertyGraph::new();
execute(&mut graph, "CREATE (a:Person {name: 'Alice'})").unwrap();
let result = execute(&mut graph, "MATCH (n:Person) RETURN n.name").unwrap();

Graph Backends

Backend Class Description
PropertyGraph Graph Native petgraph-based property graph
NetworKitRust NetworKitGraph Port of NetworKit algorithms to pure Rust
RustworkxCore RustworkxGraph IBM Qiskit rustworkx-core algorithms
Graphrs GraphrsGraph graphrs-based community detection

All four backends expose identical APIs: OpenCypher execution, bulk loader, 175+ algorithms, and save/load.


Graph Algorithms (175+)

All algorithms are available on all 4 backends.

Category Algorithms
Centrality degree, betweenness, closeness, pagerank, eigenvector, katz, harmonic, voterank
Pathfinding bfs, dijkstra, astar, bellman_ford, floyd_warshall, all_pairs, all_simple_paths, all_pairs_all_simple_paths
Shortest Paths single_source, multi_source, k_shortest, average_shortest_path_length
Spanning Trees minimum, maximum, steiner_tree
DAG topological_sort, is_dag, find_cycles, dag_longest_path, transitive_closure, transitive_reduction, dag_to_tree
Flow max_flow, min_cut_capacity
Coloring node_coloring, edge_coloring, chromatic_number
Matching max_weight_matching, max_cardinality_matching
Community louvain, label_propagation, girvan_newman
Components connected_components, strongly_connected, number_weakly_connected, is_connected, is_tree, is_forest
Cliques find_cliques, max_clique, clique_number, node_clique_number, cliques_containing_node
Traversal dfs, bfs_layers, descendants, ancestors
Transitivity triangles, transitivity, clustering, average_clustering, square_clustering
Graph Ops complement, line_graph, cartesian_product, tensor_product, strong_product, lexicographic_product, graph_power
Euler is_eulerian, eulerian_circuit, semieulerian
Planar is_planar
Contraction contract_nodes, quotient_graph
Token Swapper token_swapper
Generators erdos_renyi, barabasi_albert, complete_graph, path_graph, cycle_graph, star_graph, grid_graph, petersen_graph, watts_strogatz, configuration_model, expected_degree_graph
Layout spring, kamada_kawai, spectral, sfdp, hierarchical, bipartite, circular, shell, random
from ocg import Graph

graph = Graph()
# ... populate graph ...

scores = graph.pagerank(damping=0.85, max_iter=100)
communities = graph.louvain()
path = graph.dijkstra(source_id, target_id)

Supported OpenCypher Features

Clauses

  • MATCH, OPTIONAL MATCH, variable-length paths [*1..3]
  • CREATE, MERGE, SET, DELETE, DETACH DELETE, REMOVE
  • WITH, UNWIND, RETURN, WHERE
  • ORDER BY, SKIP, LIMIT, DISTINCT
  • UNION, UNION ALL

Expressions

  • Property access, list indexing, string slicing
  • Arithmetic: +, -, *, /, %, ^
  • Comparison: =, <>, <, >, <=, >=
  • Logical: AND, OR, NOT, XOR
  • String: STARTS WITH, ENDS WITH, CONTAINS, =~
  • Null: IS NULL, IS NOT NULL
  • List: IN, comprehensions, quantifiers

Functions (60+)

  • String: substring, trim, toLower, toUpper, split, replace
  • Math: abs, ceil, floor, round, sqrt, sin, cos, log
  • List: size, head, tail, range, reverse, keys
  • Aggregation: count, sum, avg, min, max, collect
  • Temporal: date, datetime, localDatetime, duration
  • Predicates: exists, all, any, none, single

Procedures

  • db.labels(), db.relationshipTypes(), db.propertyKeys()
  • dbms.components()

Python API Reference

Core Graph Operations

from ocg import Graph, NetworKitGraph, RustworkxGraph, GraphrsGraph

# Create graph (all 4 backends expose identical APIs)
graph = Graph()  # or NetworKitGraph(), RustworkxGraph(), GraphrsGraph()

# OpenCypher execution
result = graph.execute("MATCH (n:Person) RETURN n.name")  # -> list[dict]

# Bulk operations (10-57x faster than CREATE statements)
node_ids = graph.bulk_create_nodes([
    (["Label"], {"prop": "value"}),  # -> list[int]
])
graph.bulk_create_relationships([
    (src_id, dst_id, "REL_TYPE", {"prop": "value"}),
])

# Serialization
graph.save("graph.json")
loaded = Graph.load("graph.json")  # static method

# Persistence (WAL + snapshots)
graph = Graph.open("/data/dir")  # static method
nodes, edges = graph.checkpoint()  # -> tuple[int, int]

# Metadata
node_count = graph.node_count()  # -> int
edge_count = graph.edge_count()  # -> int

Algorithm Methods

All 175+ algorithms are available as methods on all 4 backend classes:

# Centrality
pagerank = graph.pagerank(damping=0.85, max_iter=100)  # -> dict[int, float]
betweenness = graph.betweenness_centrality()  # -> dict[int, float]
closeness = graph.closeness_centrality()  # -> dict[int, float]

# Community Detection
communities = graph.louvain()  # -> dict[int, int] (node_id -> community_id)
labels = graph.label_propagation()  # -> dict[int, int]

# Pathfinding
path = graph.dijkstra(source_id, target_id)  # -> list[int] (node IDs)
all_paths = graph.all_simple_paths(source_id, target_id)  # -> list[list[int]]

# Components
components = graph.connected_components()  # -> list[set[int]]
is_conn = graph.is_connected()  # -> bool

# See "Graph Algorithms (175+)" section for full list

TCK Compliance

3,897 / 3,897 scenarios passing — 100% (0 skipped, 0 failed)

Validated against the openCypher Technology Compatibility Kit.


Development

Feature Flags

Feature Description Default
python Python bindings via PyO3
persistence WAL + Parquet snapshots for crash-safe durability
distributed Partitioned storage, Apache Arrow Flight RPC, autoscaling
self-heal Automatic partition recovery from Parquet snapshots
metrics Prometheus metrics collection

Build with specific features:

# Standalone library (default)
cargo build --release

# With distributed storage + autoscaling
cargo build --release --features distributed,self-heal,metrics

# Python bindings only (no distributed features)
cargo build --release --features python

Build & Test

# Build
cargo build --release

# Unit tests
cargo test --no-default-features

# OpenCypher TCK
cargo test --test tck_property_graph --no-default-features

# Python wheel (requires maturin)
maturin develop --features python

Installation Troubleshooting

Linux (glibc 2.17+ required for binary wheels):

# Check glibc version
ldd --version

# If glibc is too old, build from source
pip install ocg --no-binary ocg

Windows (MSVC runtime required):

Install Visual C++ Redistributable if you encounter DLL import errors.

macOS (universal2 wheels include both x86_64 and arm64):

# Works on both Intel and Apple Silicon
pip install ocg

Performance Benchmarks

Bulk Loader vs OpenCypher CREATE

Operation OpenCypher CREATE Bulk Loader Speedup
10,000 nodes 2,340 ms 215 ms 10.9x
50,000 nodes 11,820 ms 1,050 ms 11.3x
100,000 nodes 24,100 ms 2,180 ms 11.1x
10,000 edges 1,890 ms 145 ms 13.0x
50,000 edges 9,450 ms 680 ms 13.9x

Measured on Apple M3 Pro, single-threaded. Speedup varies by graph structure (10–57x observed).

Algorithm Performance (1M nodes, 5M edges)

Algorithm Time Throughput
PageRank (100 iterations) 3.2s 312k nodes/s
Betweenness Centrality 8.7s 115k nodes/s
Louvain (community) 1.9s 526k nodes/s
Dijkstra (single-source) 12ms 83k nodes/s
Connected Components 420ms 2.4M nodes/s

Single-threaded on Apple M3 Pro. Multi-threaded algorithms can achieve 2-4x speedup on multi-core systems.


Changelog

See CHANGELOG.md for detailed release history.

Recent highlights:

  • v0.4.5 — Python 3.11–3.14 support, manylinux wheels for all platforms
  • v0.4.4 — Index support, UNIQUE constraints, TLS on Arrow Flight
  • v0.4.3 — Distributed benchmark tests, WAL replay improvements
  • v0.4.0 — Persistence features (WAL + Parquet snapshots)

Credits

Algorithm implementations (PageRank, Betweenness Centrality, Dijkstra, etc.) are based on published academic work. See NOTICE file for complete citations.


License

Apache-2.0 — see LICENSE and NOTICE files.

OpenCypher® and Cypher® are registered trademarks of Neo4j, Inc. This project implements the open OpenCypher specification and is not affiliated with Neo4j.


Contributing

Issues and proposals may be submitted via GitHub. Contributions are evaluated on a controlled schedule — pull requests are reviewed at the maintainer's discretion and timeline.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ocg-0.4.6.tar.gz (563.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ocg-0.4.6-cp314-cp314-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.14Windows x86-64

ocg-0.4.6-cp314-cp314-musllinux_1_2_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

ocg-0.4.6-cp314-cp314-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

ocg-0.4.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

ocg-0.4.6-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ s390x

ocg-0.4.6-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ppc64le

ocg-0.4.6-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARMv7l

ocg-0.4.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

ocg-0.4.6-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl (2.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.5+ i686

ocg-0.4.6-cp314-cp314-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

ocg-0.4.6-cp314-cp314-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

ocg-0.4.6-cp313-cp313-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.13Windows x86-64

ocg-0.4.6-cp313-cp313-musllinux_1_2_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

ocg-0.4.6-cp313-cp313-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

ocg-0.4.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

ocg-0.4.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ s390x

ocg-0.4.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ppc64le

ocg-0.4.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7l

ocg-0.4.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

ocg-0.4.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.5+ i686

ocg-0.4.6-cp313-cp313-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ocg-0.4.6-cp313-cp313-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

ocg-0.4.6-cp312-cp312-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.12Windows x86-64

ocg-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

ocg-0.4.6-cp312-cp312-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

ocg-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

ocg-0.4.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ s390x

ocg-0.4.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ppc64le

ocg-0.4.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7l

ocg-0.4.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

ocg-0.4.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.5+ i686

ocg-0.4.6-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ocg-0.4.6-cp312-cp312-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

ocg-0.4.6-cp311-cp311-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.11Windows x86-64

ocg-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

ocg-0.4.6-cp311-cp311-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

ocg-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

ocg-0.4.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ s390x

ocg-0.4.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ppc64le

ocg-0.4.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

ocg-0.4.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

ocg-0.4.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.5+ i686

ocg-0.4.6-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

ocg-0.4.6-cp311-cp311-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file ocg-0.4.6.tar.gz.

File metadata

  • Download URL: ocg-0.4.6.tar.gz
  • Upload date:
  • Size: 563.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ocg-0.4.6.tar.gz
Algorithm Hash digest
SHA256 9c44fda0a1e77d0a0afd1d41358f55b92c3b67ecfcf2eb86c37c9b9ed6cd7b95
MD5 8b593b229332516667ccae6d0e0ec2eb
BLAKE2b-256 f502625203462fc1e66e832f4c8f18436ad60915cf918e46c32f7208d7270045

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: ocg-0.4.6-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ocg-0.4.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 eb105d506021242ecd3c148bdcbb34fdea166ffda1cd7ce4f5294786c5c74d0f
MD5 7360bef9fc821469739e6166200ee7c1
BLAKE2b-256 e33c95a9ccf3e6f299201d1401af67e95838807886b256e5eb544e482133ad1f

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2534d426ab25a68221ed50fb1371cd43e057d68feaebad7af29e56dc3ca211aa
MD5 9971c44d384794cb7b705ff684b2b43f
BLAKE2b-256 d1024373b0a01b1318fa971bb7c01a77bf7ae7f3f838bb99d086240342f9323e

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 31c400691b6c3c85bb83ce5baf14bdd75c02d7a76bbf8db2d16247eef9c4428f
MD5 214514a6ace88b2955e3df2acf2e3183
BLAKE2b-256 b3a228e4651853c085de5d5e98b137a51f4dc8c630691a33710a3f98b63f5194

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d80913bdc4a04eb2e8c7a74c23d37fac1e96c46bcf6f9030419eda12dc803368
MD5 25bcabdf941f38238d2f3318733b5243
BLAKE2b-256 a01dadde7c09043b2bae5a311043ffa8ba35f6827083cd96e086ea51745b921b

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 12fceaa35c227887e65ea63a0e5ce8341c1825e7070ed0a0c9f4379bfd00af8b
MD5 43869ffb5114a9103a7616a35e9ac917
BLAKE2b-256 951069577ddf94fa252b65a1570c48d3dc47cc8a621dd1ef7cba54009e8d4776

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 53a237f7610d209e80d149081e1da366e05947d5301b804d0e457a75ddb97081
MD5 470c283d3840ec0bda14d3408a697922
BLAKE2b-256 edbd743dbe65e62763dc8d150984abed6d39770f71f1e259c0b6920de9bf8245

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0439506359927be903e2b339a90c625957c5d92f786f990fcd29d9b9180a19a1
MD5 542174234c7db9fbcfa636dfaf80bd14
BLAKE2b-256 dc96a07762090fe2d69d2cbc5a636ea780f81c911d32e898169699c8b6e4f7ab

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 638b2e58bc212fe021894af978601ccc2ad1798a82f5201b50ef7ebe04990dcd
MD5 fdb6fd3d788279a7a9f4a4160f6bebc2
BLAKE2b-256 7414deea96ad7f7d6623d99e0643b4ddd16b4302219e2f850e659c8193d972be

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 0b088138449bdab3881bf86bdc3fa70142984f4864cc54ad0e63ec37f5884d6b
MD5 eda3f99c5842740d438cfa15041126e9
BLAKE2b-256 e4684647554c26d5f3b6b7822751d1fcb16ce2847d1abb3011b769345922518c

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0950e59be185af96a73be6bd64bfb46992c377e843466fc357994cecf13661f8
MD5 c729aff3deaa4adccd53faa288a9858f
BLAKE2b-256 3edc68a0a91144c74763e7f5dc78451c69f74ef8ba3876fe56bda49e308de71f

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ec181272f21dbd433ba84b5bb9d0f7c3b54194d8ccea6830230435451cb7b1f8
MD5 2e162ea81a94504a91566fcc213ff2e9
BLAKE2b-256 4bc37b776ebafcd35506971bd73df6abcf6aa37f68ab47736cd19a1eac76b914

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ocg-0.4.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ocg-0.4.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b64ce71a8262a9f7b68f7d42b31e4c0e37b79d63eaf4263c45dfda58f0d9ebb4
MD5 a3022b99887c43960a3ff26f04db1387
BLAKE2b-256 6c01f7ec19585a1a25817ac221b36e880b4183bc9d5fd41b05ade023f379e20c

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 629247ea5162521e3f58a182db5006ef3fbe972d9472716e637e6345e2cf05a0
MD5 6757e0e6884673c7cc57255e3a42052a
BLAKE2b-256 80203cdcdfe1ec42179e1ae9e5f00781611d873063ee2b1c6122427f232a4d01

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 93b8e849629429bdb32aa012014ada3e45f0b6947d1b859cc0d0fa90c06b6c34
MD5 667dc01c1b09d63b82da4b3a006161f9
BLAKE2b-256 7bfbfb79ae8d167609c29f3c41fc0f604dbfe34d8b478239780d4a093ad1b3e8

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b18106f118f6f688a22ae071b5712af0290c7e168735f399622b5bdbf2d4b2c8
MD5 905140225d05cc478ebd95f4588b1c1d
BLAKE2b-256 d10ba0f982de09111b58c4bbdee71c7e5708ee7be64b35b554c8b83a4f0e910c

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 0c295b180e90afb6b5fbba34d655d2fc11caacef36909cf6a16a0fab76e7f08e
MD5 1f44acbf169ad6d56656bfbd338a1554
BLAKE2b-256 2f26fe22a12d96ef5356e974e611e273e75128255d4d343d5400c1e8bd0cc3bf

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 4bd20a0b8ad587dee320ff04aa309854017a94d27da43d0b77c1f9a981d2cd15
MD5 586c0bf84d04fd26d0f85113a519789c
BLAKE2b-256 8c5095ad7991fa22c7fa15f67b2f7b429f0387a4b8478ccc64521b0fe2569d28

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1cc216bccbd5ce9de3d2522878f8b125819dfb0cfc11858f4c219213975ae534
MD5 399da55a4d56572d923daa92f5721b03
BLAKE2b-256 c2078e553fa4c4a40b19baff5c6d47907a2e3e7cc1e58151679bfd4b3a07ac03

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5b7cb151e10b846d4577f7de1bece6057807d14b142fb1cc16ae6fb933061429
MD5 5a7afa39199b3c646294cd920f9dd6cf
BLAKE2b-256 b34da6c4cb2b398ec99673a3e00ca4e78140c09dc2c09ea4ce61574d58007d91

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 0e78c0764b76e0e2094e2d29408931815d8e4f3dd48a1412be6b77cac4093347
MD5 3e4976a782f6007729065e815c53c5a1
BLAKE2b-256 0a9419f71467f2ed9db51c2cf4df578b8428bbfeebdb68e712ff1c6140ee922c

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e06908f6b9385cdec3e856703d10f19d035896f95c2be04b6c55a4879dec818b
MD5 6cfad63384fd3e84f418fe03896abf2a
BLAKE2b-256 72f6d7ecf0bb4ba1d76361954e5a57d7aa984651f46c8a241951f7e4b53ad853

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 48e9e610f16de9dc13f3180f1fbe5c877c2889383599c137f5623509893d97c5
MD5 60250b71756281f600af2d81a2f0a260
BLAKE2b-256 4139482693cc2e8b1463ccdc6626227c70b692502f74928c606e2264b41cfb0f

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ocg-0.4.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ocg-0.4.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ee7650418bc9a3cb4e40e544f531affcda2feec2650aa87d61de28dda0ddebe1
MD5 0537b8462b090ea0a8105ee6574c01d3
BLAKE2b-256 8426bcf670850736d29df496f41977f0603d9ad7fe00f11d9adffe377d6c6000

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 26e909fc5eec8c3a1518652d6d11eca32e8f555e30b25c231fb738a4a2966ac7
MD5 296e66f13727e07b3b1ffad34799e1ab
BLAKE2b-256 53f65d7c14f2078293cb335ea4c473faf3c5e2c4d0ae6c80d42097bb527af61a

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cd6c0373a7476bad268abf9fae1f8fb998eddcc5d01c015e74a75f72d45c629b
MD5 c5bb29dd3f616a6ee6398aeac5d3b9e1
BLAKE2b-256 d36832a7cbc8755b17b4e3aeaaa571c0f468f8547e98cd4ad0f54c7eb51b1129

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 161f11960ef9ae794606a82b0a42ce0c2e47cdbad4a40d82dd71bc46349cde57
MD5 130f8778889a1518d5e077f7bdddb213
BLAKE2b-256 88c74a65fc568b434aa2fc1713a1e07f33aa998b00990f6b64f3d3f1160e5ed6

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 2347e7baa97920e82bf5c427aecbf6a81336d7d9cf99169aa41b2dcd6fc91711
MD5 272a60f02c49c08cd47529add9c91386
BLAKE2b-256 94a1d2f1983b16f024fd315f4ef5c9ab645f6f458b9d237b777ac78f869d9631

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ba9834b459c76d2f6658c3eb9578baa4b3a3a172f3952d0e9893d95d3b99a4f7
MD5 d4a6761538f95364361ac749d1c029bf
BLAKE2b-256 2f20facb675f0816ca3b9474a3ae55a54e5c62f61f745d8e97d68f5b5f4cbb9a

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 78335b80e0a1c0be7f960533be7688ebf676b3e771474eecdf16e9f589bfd276
MD5 6bb4110cd1c99b7b0d9835979556eb6a
BLAKE2b-256 1cc440549fdedc3fe64c75689a85bdd487723d5c56f97f1ba1a8cfe010c77723

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 082fd8d1478b8cfa1a13fdff84121d58108a573c404631de3b203b99b26b0504
MD5 6df6d21bff7494da8975f6d3815d9d8a
BLAKE2b-256 dcd62f4a21cf804a14673bedb29a309d1c6de95e6410395d138300eb91217593

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 fae940936d9e628cdb7c31638f38df74a55f6bc3ce8f9927e3e048d94006ffd0
MD5 67933be99316e28ee422fc60b3e33065
BLAKE2b-256 30ef622a8e6f030e5b2af1988adc220bbea00e20a43fb5511dec92103107e804

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f2c7d9461f7d877d0b5ee183d8d5bbc6a52faa898ddf1064b3a7d6dc8dc54cb2
MD5 aa75b53d12ddc912529f10624d91af49
BLAKE2b-256 2a77a1f10dde0ec8a16391796bca8efcfe3d5c5f39d9fedfe50b49b2502ccf7e

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0764c7de1c114a1c4b3aea1c7e24fbbee9287c9e2e9f22b3e767e2b25f4bd50a
MD5 dbd95d6a2a6312dba7c0dace9eec8a80
BLAKE2b-256 2c43cdfac128589b0a717b157d794b3a36c3b91da0164c4a70851523e8e9200f

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: ocg-0.4.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ocg-0.4.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8e92e9cd3a6dcca4c6da20a765549c10e487f6eb412075954a89dcd09d62886d
MD5 1bc989a87e9134c4e2b7efa0a2669fb0
BLAKE2b-256 d14082fd0663872a6d535506d6c554afec6f98bf53d8a02588c8447fcf6c06fd

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e61ecf49fa9e2cf85cd4fa3c63a7c84f4493a1d3888a836669e7bb9a791fc039
MD5 137980a853f2fe2912589d21625b1598
BLAKE2b-256 8d2df9f6676af51a7937eb3ef7db46289ce43d71b511ae79eddfa309c1843045

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 27d2be0e2ea887b2e94656b932b210ec0d7252ece0ccd1a9f2fe8f9c8569b825
MD5 ccf84b88506693e0a3085cbcee97ccf7
BLAKE2b-256 085fe12874b161ab43da39cc7d4bb1459e4c63c404029a0c68176701ebb1e457

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5e4fa3e231822f1fb00bbb81f9fb1ed6162208976441f6b6e2d6693a7d062c87
MD5 73d1c2390ea7eb826995906950d862f0
BLAKE2b-256 a1987e827ee24bf2a5336e4bb9fa5c93c79fadc7e7beebe5dfebc1c86e3b138d

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 1d7c4f589af455a0f60d15ebad21de96e2a245d0795813bec4bfac65f9d35386
MD5 ed995febc579cc996e773c236c1e9b53
BLAKE2b-256 46982e5ca2f6332cc0de8e1c05a8f9b22412c741154e7df92ce56ecadb5afcfc

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 55dfdca51b911a88ae09c04831d1f1dddd134a27f1fc813181f58bab9a174d1d
MD5 c697a68ef365ad8cb7830929d1502d4a
BLAKE2b-256 2b86a58bb7d3bcfde400252f8c371c4f22a83a4a47c5ebdcb8fe961c946e67db

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 aac396ac46c6ddaea524215bb302bb1799bd4f4e9ab28d4cd783b0bb68c19924
MD5 f5b7d6da46206ca265d107483b4a6df5
BLAKE2b-256 546da80423cb989134615ddd98e31007239c2ceac32c93e8e21caf363e6f0ce6

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0caa53553487c48592401552e0ca22ad6136c41b1918b517037bd19ea3e48cd1
MD5 0dd48f0886ed49eb8b154e085a583db2
BLAKE2b-256 dd1a5683a6733a4efcba07c37ad0b52f6d84a8220039cbbefc39487b5bafa08a

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 9645fb4d9c4f2b9550206df9e6be89760b720a26074a0eb8a6bebcdd052f981e
MD5 762ef151184334be197a872a8a9e5e62
BLAKE2b-256 f7b10ba9ffaa3ebbf44299dd234e981d6bc5021f857bc8b121089b460d88f758

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 71a4858aa413d73ed4e38b622a30cb55b1ed632fcde1e3670fb7824a54f90eea
MD5 2a50b85861cf7bb69727f86c5263fdf2
BLAKE2b-256 ae85aab9bd5cf35840bb24e6ba873a045e05ea5618e33a81fe881cbd5bbaa6f8

See more details on using hashes here.

File details

Details for the file ocg-0.4.6-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ocg-0.4.6-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e501611151abc9b091a1ea50436ad72daab7d6c18fbf5b1faf84683c233307fd
MD5 32982cf2529b4dace21d3b3022da8a68
BLAKE2b-256 20be11df65ed162706c3ec02b4e4cbdf086e5724c3f6195d02a9369b2c63e25a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page