Skip to main content

High-performance library for generating AWS S3 presigned URLs

Project description

Libpresign

Single-purpose library created for generating AWS S3 presigned URLs fast.

Implemented in C++ using OpenSSL 3.1.

Moto

Boto3 is heavy dependency if you just want to create a presigned URL. And it's famously slow.

How to use

import libpresign

libpresign.get(
    "AWS_ACCESS_KEY_ID",
    "AWS_SECRET_ACCESS_KEY",
    "region-1",
    "bucket-name", 
    "object-key.txt",
    3600,  # Expiration time in seconds
)

Output

'https://bucket.s3.amazonaws.com/object-key.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=creds1%2F20230711%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20230711T125101Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=5c5a2e2858261266db950e4912fb12ffcd5d0bcf40d873bf9fe209ee789f6c86'

Example with MinIO or custom S3-compatible endpoint

import libpresign

# For MinIO or other S3-compatible services
libpresign.get(
    "minioadmin",
    "minioadmin",
    "us-east-1",
    "bucket-name", 
    "object-key.txt",
    3600,
    "localhost:9000"  # MinIO endpoint
)

Function signature

def get(
    access_key_id: str,
    secret_access_key: str,
    region: Optional[str],  # defaults to "us-east-1"
    bucket: str,
    key: str,
    expires: Optional[int], # defaults to 3600 (1h)
    endpoint: Optional[str], # defaults to "s3.amazonaws.com"
):
    ...

Comparison to boto3

Test case

Generate 10 000 presigned URLs. Compare execution times

Results

┌────────────────────────┬────────┬────────────┐
│ library                │ boto3  │ libpresign │
├────────────────────────┼────────┼────────────┤
│ avg execution time, μs │ 2232.3 │ 13.9       │ 
└────────────────────────┴────────┴────────────┘

Libpresign came out to be 160 times faster

Dependencies

  • C++ Compiler (GCC, Clang, or MSVC)
  • CMake 3.15+
  • OpenSSL 3.x
  • Python 3.8+ (for Python bindings)

Building from Source

Using CMake (Recommended)

# Create build directory
mkdir build && cd build

# Configure
cmake .. -DCMAKE_BUILD_TYPE=Release

# Build
cmake --build .

# Install (optional)
cmake --install .

CMake Options

  • BUILD_PYTHON_MODULE (ON/OFF): Build Python extension module (default: ON)
  • BUILD_SHARED_LIB (ON/OFF): Build standalone shared library (default: OFF)
  • BUILD_STATIC_LIB (ON/OFF): Build standalone static library (default: OFF)

Building Python Wheels

# Using CMake-based setup
python setup_cmake.py bdist_wheel

# Or use the convenience script
./build-wheels-cmake.sh

Legacy Build Method

The original setuptools-based build is still available:

python setup.py build_ext --inplace

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

libpresign-1.1.0.tar.gz (6.3 kB view details)

Uploaded Source

Built Distributions

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

libpresign-1.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

libpresign-1.1.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

libpresign-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

libpresign-1.1.0-cp312-cp312-macosx_15_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

libpresign-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl (13.1 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

libpresign-1.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

libpresign-1.1.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

libpresign-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

libpresign-1.1.0-cp311-cp311-macosx_15_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

libpresign-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl (13.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

libpresign-1.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

libpresign-1.1.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

libpresign-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

libpresign-1.1.0-cp310-cp310-macosx_15_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

libpresign-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl (13.1 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

libpresign-1.1.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

libpresign-1.1.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

libpresign-1.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

libpresign-1.1.0-cp39-cp39-macosx_15_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

libpresign-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl (13.1 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

libpresign-1.1.0-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

libpresign-1.1.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

libpresign-1.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

libpresign-1.1.0-cp38-cp38-macosx_15_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.8macOS 15.0+ ARM64

libpresign-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl (13.1 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file libpresign-1.1.0.tar.gz.

File metadata

  • Download URL: libpresign-1.1.0.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for libpresign-1.1.0.tar.gz
Algorithm Hash digest
SHA256 2d776afc6508a6d753e954856c81894b1a088017c14bb43c3781d726d6d9fa0d
MD5 53c124545a76397e849b7518a936c3b7
BLAKE2b-256 33628a47676c6525d792f4a2b5b70494ab0660cb11617ac7bb38df7387f4a34a

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 33fb348c606ff35c28e3fd3963f562c498c3ce9b2b1e32a3053afdb1f1753da9
MD5 8f8177520c645bcd3d411565a778ecbc
BLAKE2b-256 96d377284205e1b28d5923ebdf5882e93f6f3661f4d62a856b3657b2364d1ad0

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d21474533093103d13856742a3221edb7a866cf65e174a6f20378b93c8db052
MD5 2c049dfe27b160338554c751c639162b
BLAKE2b-256 663765854a3558d8f5088215ea8757bfdd2b40d311bcc4148875c4caa6b2bbeb

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 da3fc79f5d6103f46cc9ee2b381fbca4b94f8f36089115cb0cd5417785838f3c
MD5 5ac8ab7d4d72be7ba3d54d86229ad69b
BLAKE2b-256 d2fde15092782e6e4a290a13cfca405590f14246e0375fe4abc90779b34a1507

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0541dfcf5cbf166aa0b71515012f7aa8af61dd528ead5e592d135a999f8ef1a2
MD5 d8ab5b44c07972795e7d2b60e8296802
BLAKE2b-256 a11b8beeb3d2fc4b50be833274d5f98556083d237be2afd7e359a35dbf1e2dc4

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bbb11bd5ee0861a3190129ad82456c0e267fde3bb9b03fdcc0ee56c84d6c85dd
MD5 a51e49f812bd8662b480f976a10e5ea2
BLAKE2b-256 987e7ff7d21647ff681b2ca75ac6c3a35cb3a81062289384cc3081e2ff7b6740

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cf64aab9af27c657cfc19b051a413e0c44847499a60c0e7347450586c262e9bf
MD5 c9748b4e2e040a6690fa10a614290ad5
BLAKE2b-256 6b06badb53e4acf885db53af57aee84e155ec5c7126caa68541890e44eb344de

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7bc8c27324e80c9c47c4f778612915fbd3ec53b4e4b817db55a237858461ae27
MD5 f0601635857be94dcd110b6980516356
BLAKE2b-256 9b2845939e922708eecefdd777f27424cc0db7376921f805dc68ded4ab5026cb

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 48aaa4095ba5c4f3bc49091e16865d2959d5928e98b68c86efa89f46e2d1acb0
MD5 5493b32e490454c03de03315bb443d83
BLAKE2b-256 dc69d2cc6d2d7d74c45bdc4505e06f90c0bca899893c2f33a31acce6d1d77df4

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 309b862b77ef7d8f05c8717f811538ad672f7897e8821e16e87bf7861514e360
MD5 bd207360be215a637af454c22e99e0b3
BLAKE2b-256 147298c6f10fe50b18522ac897becb10cc1a01b37f469bf507019d1fcb84a6e1

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 22e7683de5225a4509ac63240343fccf8e85e86a8302b3f398e464bce8e7c328
MD5 f023c02170660d7b84cd40bfd194f199
BLAKE2b-256 0e00f3dbff9eb0ef1b2201539886ed6a850b092f435673db4ec824023ec48e1e

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 057e1ed5fd12ca5654b7daf052096d12acbd8c1f65884f1627ec39a25422210f
MD5 878c0410c44417ae740fe39510827867
BLAKE2b-256 fabede3944b75170f7330f0303d29683d8194608aef11ebcd20782cc2a1372a0

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a6b17a323dc3ae4e5464d972020e238d94997213d6113990220f02d6515b54d0
MD5 d93b3bfcd84cf7277d02545c6d54caea
BLAKE2b-256 f5860a15989948c7f762b016c5b4282dbb28254e048f0e554b0c275fb1382006

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 dd3d29038d744cf9ea3bd63c2ee71366b9b2ddfaf8a4a3967aa3f26945483a1c
MD5 2f6638d4252925f1eb2ca2052dcb191e
BLAKE2b-256 f9487f33fb7e6ae8c5cf1e3a03fc7ca8fa7a17b4bdfcc135269d598710cef6a3

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a67518ac8d2f073e672f305c51cfe8e1ff37a68c0fb79217cba39e000589f675
MD5 c7315fcdb1ea87c3c9d4a088c134aa54
BLAKE2b-256 660efe2423d72b3a9e6a208b9d9a6b8337f869940a3f21ccdd75f45fda72caf2

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4fbf803887530f5e464c2e911204383676b367b535cc823035c70237e4d3885c
MD5 1ea259bcc0081fd8958f5908d8a7d7b4
BLAKE2b-256 feca82f4b5a7d4a3013bcfa672e83818f0df25eedbd74a121142df66a9b37c73

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 32b67f82873c95e6438b4bc76f1959b71c29a90f28a828edd7e493c4ebcff0e1
MD5 9d148d17f4ae2a66929074a747059bf7
BLAKE2b-256 cf2d82aaf2b7c425dcd7c294a0719781439e5bacac6610fd6bd52048e33031d0

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5258d72827b1498104f97ad2e8149b91979d01e6b811037ccfae999c9ca9e7cb
MD5 e9cec5d99c6c1eef711ba34a6aa42165
BLAKE2b-256 2d8446fa0ec54d050fab166f99e9eadaeb8bb620bd511637d7453339a10e0742

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 09cd81dad009458fe8aa70c00f00c6314bfea7ca93122b9295f48e31aada1629
MD5 acc1c2df2d7e3b4c7cf8d4ee10125ff9
BLAKE2b-256 a573ac230f442f0957c6ac7f644c8850b2010abeaaab7efa5dde25842691e779

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6a16beb46e180b09440544b93670faa76b9586eb97efdbea5e4790ddc6ab2cc6
MD5 33db30f7a9aec1c7e89baa762ae25296
BLAKE2b-256 5771840836f3dca5f844b04c996f930609fc82953cc97f7f406ab734abe3fd42

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 97853680398ded4ddda53a652b99e6594238e2d8c3e07598e7db28d09c4f4b92
MD5 5a155b996fc3939cb161e13a9153f3c3
BLAKE2b-256 a29ae9e73a4db2dd5b774d38abbfd49ae8e7a7016b3f4299027ba0429c6f14ee

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4aaf2e194590fafe34c69d945df133109dfa5a2eefb25b7977839547f1ae42af
MD5 ec657f21d205926a773450353fa45eb2
BLAKE2b-256 4f642602079e922331637a86597aeccfb2b134812dc972bb6273189361c8432b

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1f6021f109808e4d52276505756cdc2b8f509e8fea6b5734e70c5a1b80abc95a
MD5 e69bcca1f3aa89e9e18d1ebc5f27ee38
BLAKE2b-256 56c2c1d296fc7dba0dbbb7db3f0ba57ac3a6a452be54033e40aa21ce6e7d6d95

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1a7b2843344c486dbd79c6590accd4391ca25407c9844bb3dcf89128fb93b33d
MD5 bfca315504dedc5abdbea06b905d5479
BLAKE2b-256 fdc4a5130e9b96782ea78762e8920ffb3c9f550e1704871e0dc296bada0cf617

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp38-cp38-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp38-cp38-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 107b452b4108d01d1938f2d2ce65bc5265411ba61f7f3599888296a077eb3f0c
MD5 3c555761691f254a94253ae8241222bb
BLAKE2b-256 680354f8cda64454b7f8803444ace887435d668e528fed91e7b24a4b4a12d10e

See more details on using hashes here.

File details

Details for the file libpresign-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libpresign-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 00016d2c4437b04cbe573f96f8531134c5c4b39871416feeb2a2e4a7c25356d6
MD5 18b09a144a934cb0da14631da3c8f40d
BLAKE2b-256 1c20d18fa6be29a13caa290abcfaf38576c718eb5bae4755d83cf674e83161ac

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