Skip to main content

Decision Diagrams

Project description

OxiDD

Matrix

These are the Python bindings for OxiDD, a highly modular decision diagram framework written in Rust. The most prominent instance of decision diagrams is provided by (reduced ordered) binary decision diagrams (BDDs), which are succinct representations of Boolean functions 𝔹n → 𝔹. Such BDD representations are canonical and thus, deciding equality of Boolean functions—in general a co-NP-complete problem—can be done in constant time. Further, many Boolean operations on two BDDs f,g are possible in 𝒪(|f| · |g|) (where |f| denotes the node count in f). There are various other kinds of decision diagrams for which OxiDD aims to be a framework enabling high-performance implementations with low effort.

Features

  • Several kinds of (reduced ordered) decision diagrams are already implemented:
    • Binary decision diagrams (BDDs)
    • BDDs with complement edges (BCDDs)
    • Zero-suppressed BDDs (ZBDDs, aka ZDDs/ZSDDs)
    • Not yet exposed via the Python API: Multi-terminal BDDs (MTBDDs, aka ADDs) and Ternary decision diagrams (TDDs)
  • Extensibility: Due to OxiDD’s modular design, one can implement new kinds of decision diagrams without having to reimplement core data structures.
  • Concurrency: Functions represented by DDs can safely be used in multi-threaded contexts. Furthermore, apply algorithms can be executed on multiple CPU cores in parallel.
  • Performance: Compared to other popular BDD libraries (e.g., BuDDy, CUDD, and Sylvan), OxiDD is already competitive or even outperforms them.
  • Support for Reordering: OxiDD can reorder a decision diagram to a given variable order. Support for dynamic reordering, e.g., via sifting, is about to come.

Licensing

OxiDD is licensed under either MIT or Apache 2.0 at your opinion.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache 2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Publications

The seminal paper presenting OxiDD was published at TACAS'24. If you use OxiDD, please cite us as:

Nils Husung, Clemens Dubslaff, Holger Hermanns, and Maximilian A. Köhl: OxiDD: A safe, concurrent, modular, and performant decision diagram framework in Rust. In: Proceedings of the 30th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS’24) (accepted for publication 2024)

@inproceedings{oxidd24,
  author        = {Husung, Nils and Dubslaff, Clemens and Hermanns, Holger and K{\"o}hl, Maximilian A.},
  booktitle     = {Proceedings of the 30th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'24)},
  title         = {{OxiDD}: A Safe, Concurrent, Modular, and Performant Decision Diagram Framework in {Rust}},
  year          = {2024},
  doi           = {10.1007/978-3-031-57256-2_13}
}

Acknowledgements

This work is partially supported by the German Research Foundation (DFG) under the projects TRR 248 (see https://perspicuous-computing.science, project ID 389792660) and EXC 2050/1 (CeTI, project ID 390696704, as part of Germany’s Excellence Strategy).

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

oxidd-0.8.0-pp310-pypy310_pp73-win_amd64.whl (261.6 kB view details)

Uploaded PyPy Windows x86-64

oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

oxidd-0.8.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (798.8 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

oxidd-0.8.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (813.0 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

oxidd-0.8.0-pp39-pypy39_pp73-win_amd64.whl (261.6 kB view details)

Uploaded PyPy Windows x86-64

oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

oxidd-0.8.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (798.8 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

oxidd-0.8.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (813.0 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

oxidd-0.8.0-cp39-abi3-win_arm64.whl (250.9 kB view details)

Uploaded CPython 3.9+ Windows ARM64

oxidd-0.8.0-cp39-abi3-win_amd64.whl (272.5 kB view details)

Uploaded CPython 3.9+ Windows x86-64

oxidd-0.8.0-cp39-abi3-win32.whl (266.1 kB view details)

Uploaded CPython 3.9+ Windows x86

oxidd-0.8.0-cp39-abi3-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ x86-64

oxidd-0.8.0-cp39-abi3-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ i686

oxidd-0.8.0-cp39-abi3-musllinux_1_2_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ ARMv7l

oxidd-0.8.0-cp39-abi3-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ ARM64

oxidd-0.8.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ x86-64

oxidd-0.8.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ s390x

oxidd-0.8.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ppc64le

oxidd-0.8.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ i686

oxidd-0.8.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ARM64

oxidd-0.8.0-cp39-abi3-macosx_11_0_arm64.whl (809.4 kB view details)

Uploaded CPython 3.9+ macOS 11.0+ ARM64

oxidd-0.8.0-cp39-abi3-macosx_10_9_x86_64.whl (823.2 kB view details)

Uploaded CPython 3.9+ macOS 10.9+ x86-64

File details

Details for the file oxidd-0.8.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 421738495edc656d96b551870661f5308a16afae3f8aba2a3265fb67ce92a803
MD5 c1f25f041190d53582d988136f114312
BLAKE2b-256 d4ab74c69f072dc0107039bf19f9a6ec3dbee14ae9609730d71a82c848148363

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b5a834d810aa78fc6a240e1b54c928ab5105032da6defccc8c701c9d4012d393
MD5 84e2c877ddca1ae45c6d84952cc2c1ce
BLAKE2b-256 9f7f977aa6984daa4e001a406269179a9e31aac0ff97a35f1b1ab20146ccb0a7

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0d02c91b848ad3b70724e35f80034b8daba19e972646e3cb08f278f1182d50c4
MD5 18743f56c5f2bc195cb51421a4e5d411
BLAKE2b-256 6835d1bfaaf0b8c1df1a39567df1a557ec579fdc23d8f579d803f122a81165c4

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c0d1dc309c6ff1e6d4e0566d87667b466714a90efdc42f31ecccf3f45513a8c
MD5 adcb31bd1d449779abd7357fe1c4b00a
BLAKE2b-256 35c162048985be3855d607130a34d62d1cf9748164775716dedd6a3d568bc4cf

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03c09b6ad456ff0841937df1e2d881e49f217a9015d3b3dd5f1067b49fad12c0
MD5 d24a18a4354842067d81553594caea85
BLAKE2b-256 a513ed954be12fe046f759f1de278fc9a7ff1fb4cc2e8d106561709b1de10516

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2b207f5a10cfe401cf35b81537fd004ba580ae58581e8a4f0b2a88c283e4f4a8
MD5 612ef423a71eb0db924cc0db1f915486
BLAKE2b-256 336159827827589194cde555aa053699f094b4596a1b0a63ea7731f509faaf65

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 a0b8e3bba4809e7c86c02d767eb81a010240544d5c16c59e30abf2755b7a1aa7
MD5 896a7920d9e5276763959fe6955ef02c
BLAKE2b-256 b83641e475f88517524a9b957bf8d220a128a5e5613b367d15895909045c2814

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 71ed10346c4d05cfed24e2a814dad3137e18554c3cdb9493b3502f3517f80936
MD5 5a85424827d9686df1ff9da9fe3f2d96
BLAKE2b-256 3564e110e66e77cbb8dede7e32a811a5cad165ee9330066bd2f485ce18b05b19

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 404014bcb303dc3f3e7b777f55f1325af8b125a351d4c05a51ff1fbd0204832f
MD5 e7dbd762190a97703f948f04b47bb8a9
BLAKE2b-256 36cdd1530f960a95c02ddb4ab271d2739f62d7573c3530bd3d9da4e976f5882c

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5cdf557bb7907feb2c095708bd1c6e8bdebcb2e9acb2b96363fa9062ae851b9c
MD5 45d939a9fe30afe9b8f50c08b6a72ca8
BLAKE2b-256 3a2143347d1dad25e8feb12af491515a098730d5b59675bebf58d6c4c4c97763

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d482e9d7bd208d147500667575152893b6c9a033c461d50e06a555fd11582e57
MD5 7748810f5324b15d643b0fb83b0d8f49
BLAKE2b-256 a174889ffa176c20671e3ba706ddc68624f671715fa114333d872e7875dd1b2d

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0e4c48fa9e396a045ff0c5e1fd7b58003ad1bccc7ddac921d1683663d8cb760a
MD5 90df042b674e07789a17209a177f7232
BLAKE2b-256 9a9378eb944badf693c7e9da02831cb65b1abdff420f4fa8c005ad8e5b37cbad

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-win_arm64.whl.

File metadata

  • Download URL: oxidd-0.8.0-cp39-abi3-win_arm64.whl
  • Upload date:
  • Size: 250.9 kB
  • Tags: CPython 3.9+, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.6

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 9ce2d5da2720df02b260f6daafa2d05e8502e07f87875df3912045cf5d548530
MD5 7d59669e48c856f670541206437d6910
BLAKE2b-256 1a52d48c53f3334c3995a6964a65c520b6953c8398a3d38c4e150b916b58909c

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: oxidd-0.8.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 272.5 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.6

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 380580b7781eb3c5ee36e9ef06c0ab91dc0adcec8a9c8996b26ba3bf4c910d14
MD5 5d4be6537ca0020c8438f2ca97b7556a
BLAKE2b-256 87fade96fcc7bdd08f6a7f5b1051d7f2afe1739da1efe6bfd1bcbb5313202a65

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-win32.whl.

File metadata

  • Download URL: oxidd-0.8.0-cp39-abi3-win32.whl
  • Upload date:
  • Size: 266.1 kB
  • Tags: CPython 3.9+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.6

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-win32.whl
Algorithm Hash digest
SHA256 84b4e96b1dd90b89ec282e17af64511ba57264ac3d1d4d70927568443dc8c5ce
MD5 a82902351b8e61120b0269759e7a9a94
BLAKE2b-256 c98dad387bd97aa77a324e9b88a1d22c2d3e50f6fd2bc041009100fbec30d169

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7b986cef02a1cc2c7f665140066576f4b81c84266ef11de3b874764b13feb11a
MD5 057c239e528ac7d80ce1096e6e68aa09
BLAKE2b-256 509314eee0cd2e20349d05c49bece3e261d0b2b84c3d1d4577e84c508ec49ec4

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 f986ab673f07fb75479f2f636ccf5ca6574c00f06495e3569c70c8476ec985c8
MD5 f31d8ba0cf834c6edc8ddac06388c818
BLAKE2b-256 a21c2138812f75b3f86c8e726582d57c9b0df29d74d91031b74702390021e46c

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 33e23c69966a84e3fcc6986eda0792c30e7e7d321259b3be7ee8b2630fa8c683
MD5 eb9896519d695aa2d4de97d29893dcfc
BLAKE2b-256 1e531e1b86bbdad1630f221acbbf55d22cf39b5c9ccdfa6da56f2d84e5c71965

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 775717cc4720fe4036ba8c8fbd344928ea0119b18f202bb818b0982a9612f0d0
MD5 652ff1882d6a77f9ea04d6adaaf536fa
BLAKE2b-256 9447554069f8ebf01eafd1784fa7b04ddd0656467fa4828592562ecd97a58560

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d21a5ba802d4f2da88cfab10b44966d03e0e9cc979a5c6f841aa994bd9e0f8e5
MD5 19e02cc5fed7082d7a3548fbf7cd3182
BLAKE2b-256 21f20356a1653830df105b8f74520f8d5796c3600eb00450e24bd8c64729a7bb

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 71b2d131c9f554feb8f0d845edec64411ace9a8b7cd65d732ad8589736cfa592
MD5 2e0a25b0ddde143ac6c413f5156b38cf
BLAKE2b-256 d7301a54da6a0d89c9e42bc700ae244fafbdd96340acdb40630190de3dfb5fab

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 9cb2825de38b4cebce4357fe5f74f7787faa6932ab1bc089a5fa45b190066d15
MD5 d2a96a97c94e6372cf437e431f3da769
BLAKE2b-256 03d2b76c900601ec650f84f43d727ca6b8d114adddb720f7494c657f8f83b7c5

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 187276958788451f7b60761928df19e855acfdb77cfac0bf4bf1e6e86bd60864
MD5 398fa5cad10306361de9cfb38d0d71b3
BLAKE2b-256 fbb0d42d2f423bd5c1c83097faecb717230a234bea2fb8e343014667d9cdbff6

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 29b07d42df774098bf3edafdde59caf7d4d8d9879d7f1b096ef19c55a389ee36
MD5 7ae5381b006b9fd192aee6dc8aafc9de
BLAKE2b-256 3d9b3bf51de8289c0d93c07aa20072f8a45de58ac981e23aa38216e706089b5b

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce8573fb2dbe79e030bf7349239e00960b1d6ab34c216e2a25e563e840366780
MD5 eaf14243272716d47e5802bc732f09fa
BLAKE2b-256 405588e07f4364feb50e76d328578e39d3dd35755ea56248045576650afc070e

See more details on using hashes here.

File details

Details for the file oxidd-0.8.0-cp39-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.8.0-cp39-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ce02a8945f880631ab1ebe0a6966f006730dd87fe67cedc83805209a62f6caf2
MD5 d9a3fdafb29c89a9f3fbb9ebebeab347
BLAKE2b-256 bbc1c35af27e3ac0ba6dbdda3bb71a4ca9d116e7b56e7b18923d8e47ee12ba31

See more details on using hashes here.

Supported by

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