Skip to main content

A Python library with Rust bindings for charset detection

Project description

charsetrs

A fast Python library with Rust bindings for detecting file character encodings and normalizing files.

Features

  • Simple API: Just two functions - analyse() and normalize()
  • Fast encoding detection using Rust
  • Newline detection: Detects LF, CRLF, or CR newline styles
  • File normalization: Convert encoding and newlines in-place using streaming
  • Memory efficient: Constant memory usage (~56KB) for files of any size
  • Supports large files: Process 10GB+ files on 512MB RAM systems
  • Supports multiple encodings: UTF-8, Latin-1, Windows-1252, UTF-16, ASCII, Arabic, Korean, and more
  • Configurable sample size: Control memory usage vs accuracy trade-off

Installation

Development Installation

# Install dependencies
uv sync

# Build and install in development mode
uv run maturin develop

Production Build

uv run maturin build --release

Usage

Basic Usage

import charsetrs

# Analyse file encoding and newline style
result = charsetrs.analyse("file.txt")
print(f"Encoding: {result.encoding}")  # e.g., 'utf_8'
print(f"Newlines: {result.newlines}")  # e.g., 'LF', 'CRLF', or 'CR'

# Normalize file to UTF-8 with LF newlines (in-place modification)
charsetrs.normalize(
    "file.txt",
    encoding="utf-8",
    newlines="LF"
)

Working with Large Files

The library uses streaming to efficiently handle files of any size with constant memory usage (~56KB):

import charsetrs

# Use only 512KB for detection (faster, less memory)
result = charsetrs.analyse("large_file.txt", max_sample_size=512*1024)

# Use 2MB for detection (more accurate)
result = charsetrs.analyse("large_file.txt", max_sample_size=2*1024*1024)

# Normalize large file with custom sample size
# Memory usage: ~56KB regardless of file size (10GB+ files supported)
charsetrs.normalize(
    "large_file.txt",
    encoding="utf-8",
    newlines="LF",
    max_sample_size=1024*1024
)

Newline Normalization

Convert between different newline styles (in-place modification):

import charsetrs

# Convert Windows-style (CRLF) to Unix-style (LF)
charsetrs.normalize("windows.txt", encoding="utf-8", newlines="LF")

# Convert to Windows-style (CRLF)
charsetrs.normalize("unix.txt", encoding="utf-8", newlines="CRLF")

# Convert to old Mac-style (CR)
charsetrs.normalize("file.txt", encoding="utf-8", newlines="CR")

Supported Encodings

  • UTF-8, UTF-16 (LE/BE), UTF-32
  • ISO-8859-1 (Latin-1)
  • Windows code pages: 1252, 1256 (Arabic), 1255 (Hebrew), 1253 (Greek), 1251 (Cyrillic), 1254 (Turkish), 1250 (Central European)
  • CP949 (Korean), EUC-KR
  • Shift_JIS, EUC-JP (Japanese)
  • Big5, GBK, GB2312 (Chinese)
  • KOI8-R, KOI8-U (Cyrillic)
  • Mac encodings (Roman, Cyrillic)
  • ASCII

API Reference

charsetrs.analyse(file_path, max_sample_size=None)

Analyse the encoding and newline style of a file.

Parameters:

  • file_path (str or Path): Path to the file
  • max_sample_size (int, optional): Maximum bytes to read for detection (default: 1MB)

Returns:

  • AnalysisResult: Object with encoding and newlines attributes

Example:

result = charsetrs.analyse("file.txt")
print(result.encoding)  # 'utf_8'
print(result.newlines)  # 'LF'

charsetrs.normalize(file_path, encoding="utf-8", newlines="LF", max_sample_size=None)

Normalize a file by converting its encoding and newline style in-place using streaming.

This function modifies the file in-place with constant memory usage (~56KB), making it suitable for very large files (10GB+) on memory-constrained systems (512MB RAM).

Parameters:

  • file_path (str or Path): Path to the file to normalize
  • encoding (str, optional): Target encoding (default: 'utf-8')
  • newlines (str, optional): Target newline style - 'LF', 'CRLF', or 'CR' (default: 'LF')
  • max_sample_size (int, optional): Maximum bytes to read for detection (default: 1MB)

Raises:

  • ValueError: If encoding conversion fails or invalid newlines value
  • IOError: If file cannot be read or written
  • LookupError: If target encoding is invalid

Example:

charsetrs.normalize(
    "input.txt",
    encoding="utf-8",
    newlines="LF"
)

AnalysisResult

A frozen dataclass containing analysis results:

@dataclass(frozen=True)
class AnalysisResult:
    encoding: str                        # e.g., 'utf_8', 'cp1252'
    newlines: Literal["LF", "CRLF", "CR"]  # Detected newline style

Testing

Run the test suite:

uv run pytest tests/

Run specific tests:

# Test new API
uv run pytest tests/test_charsetrs_api.py -v

# Test with sample files
uv run pytest tests/test_full_detection.py -v

Development Tasks

The project uses taskipy for common development tasks:

# Run tests
uv run task test

# Format all code (Python + Rust)
uv run task format

# Check formatting and linting (Python + Rust)
uv run task lint

# Format only Rust code
uv run task format_rust

# Lint only Rust code (formatting + clippy)
uv run task lint_rust

Project Structure

.
├── src/
│   ├── charsetrs/         # Python package
│   │   └── __init__.py    # Python API
│   └── charsetrs_core/        # Rust source code
│       └── lib.rs         # Rust encoding detection
├── tests/                 # Test suite
│   ├── test_charsetrs_api.py
│   ├── test_full_detection.py
│   └── data/              # Sample files in various encodings
├── pyproject.toml         # Python project configuration
└── Cargo.toml             # Rust project configuration

Performance

The library uses streaming to efficiently handle large files:

  • Constant memory usage: ~56KB regardless of file size
  • Suitable for large files: Process 10GB+ files on 512MB RAM systems
  • Default detection: Reads 1MB sample for encoding detection
  • Configurable: Adjust max_sample_size based on your needs
  • Single-pass processing: Linear time complexity O(n)

For more details, see MEMORY_EFFICIENCY.md

License

MIT

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

charsetrs-0.1.0.tar.gz (60.7 kB view details)

Uploaded Source

Built Distributions

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

charsetrs-0.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

charsetrs-0.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (546.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

charsetrs-0.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (542.7 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

charsetrs-0.1.0-cp313-cp313-win_amd64.whl (389.7 kB view details)

Uploaded CPython 3.13Windows x86-64

charsetrs-0.1.0-cp313-cp313-win32.whl (379.7 kB view details)

Uploaded CPython 3.13Windows x86

charsetrs-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (545.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

charsetrs-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (543.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

charsetrs-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (503.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

charsetrs-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl (506.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

charsetrs-0.1.0-cp312-cp312-win_amd64.whl (389.7 kB view details)

Uploaded CPython 3.12Windows x86-64

charsetrs-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (545.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

charsetrs-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (543.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

charsetrs-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (504.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

charsetrs-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl (506.3 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

charsetrs-0.1.0-cp311-cp311-win_amd64.whl (391.3 kB view details)

Uploaded CPython 3.11Windows x86-64

charsetrs-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

charsetrs-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (546.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

charsetrs-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (505.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

charsetrs-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl (507.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

charsetrs-0.1.0-cp310-cp310-win_amd64.whl (391.3 kB view details)

Uploaded CPython 3.10Windows x86-64

charsetrs-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

charsetrs-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (546.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

Details for the file charsetrs-0.1.0.tar.gz.

File metadata

  • Download URL: charsetrs-0.1.0.tar.gz
  • Upload date:
  • Size: 60.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.10.2

File hashes

Hashes for charsetrs-0.1.0.tar.gz
Algorithm Hash digest
SHA256 04be453b3d4c9fb5bdab4a94624db825f4f0457f6601ff38f26075feb9702211
MD5 768d59ea016768fa10538df9f8116ad0
BLAKE2b-256 60cb1443a33fe7b08e768126191ef2708798d591a502fbf846090bec5a2832a0

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 008d4b6a8fccd5cca4ee46885ca2adb2f321e662b4509b17d247754d795fed9d
MD5 9327a08f8e0b786934b65255a433e681
BLAKE2b-256 651ad77873b3c093beef4f7098d3d31fcd767e5e332f138f21563bb6adfacfe3

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d3a169bf4651163fb5c579a5ed8d8a5afa9cc5bfc7fbd3f4caea078693b6a511
MD5 8586ef02f21e05a3c98229c3023ba405
BLAKE2b-256 e34b3c4a20a0f194e3e6691471475beb480ec38a1e503f656662418018a7e8f8

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 866a49af6da79d995935dfd09f42ffbf39964bc06b8d574b0fcf3494e57f317c
MD5 0dbbb3be505b90c1d12de04907db142e
BLAKE2b-256 45c0a1287bc39393394ce9ced6f4259c7be9ac11f34ee91641d6fe29efe95449

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 56f76b356bb7e2374e135e0194828db5e96f7bd12c2d8df07508596c8f0d1c06
MD5 fbccb7a385c31fb0c3c0a1d212c429f3
BLAKE2b-256 cca0d9a015e466ba6bf147740b731066d6aa4632d4c9675fcdc698a91316ea7f

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: charsetrs-0.1.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 379.7 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.10.2

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 f7761a1be67b4f307ff9d8d0d277b088c5c6eb1e9e5f7cda64f926161decb1f5
MD5 e0ba0139459b514c961c2285019b6c9d
BLAKE2b-256 de0c74ad08655e5dce4cf4d62a8c19bbaf6a3759cb23a40cd45e9f390d2bafcd

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 976eb5ff261941aa6345941e968430647f5c23cd6512f2dd01e1fbb23e33d627
MD5 4cfc3a8e05d9dd1e5790cf269ab5e2ec
BLAKE2b-256 64908d17dcca96ecd8bf58095c48b336c6a420247ee5b443d4f0a7da2c881f5a

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4ae90576f155d37368cb0c95d9e79e99e8be4440476c5df3a7aecc5df39e4564
MD5 6510a5b6633fae19f618257cce80bff5
BLAKE2b-256 e3847f1afc06c5f3f6c569211bf9be3216c5f641a6097cc8dfcf2961bf25510c

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 20bcf821f2bd6448ec6b44611b4101ba598df4a9e247e3e46a8ea41a70607e52
MD5 d3eff28a0abb15aede3aaafdd034d409
BLAKE2b-256 97e36c2fd408a3348381dbd37a756b13e971e74ea6b4d404dbadf8f5352db866

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7acfeb9ebcdada17cbac398bff4098cff7dc973931f10853fd64f25b325b721d
MD5 7aac957ff4f954c07e255ed316c929fb
BLAKE2b-256 7260481ef2c1b1e33d86221726f029c4b142189a9a1cbcbede3ca151d42fe475

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ef220cbbc08f789102b4f003f289a1d01a75485d53ae77f542e9d48074112b2a
MD5 95b52fe46bd2924eb53b8e4020c7f8cc
BLAKE2b-256 75363ec034073219db4da4e0113728939c6c4f830dfa0f92f055cdf490ba464d

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eaf1c02550daf38219593693076f104b212d812ab8bbf9a3ebf3777aca4335ff
MD5 fd67a6c4fb7ce8ded1361dc8004bcd58
BLAKE2b-256 0beda57c3ae9431bf8889f91eff63707b66643b97a96bb6274efe037016804fa

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ceed8338c897e6bb9ecb02ae4c43a19e974359c6c1231300e3ed80d86709a1cc
MD5 957e55b872b45deaf682f9a5735c29f1
BLAKE2b-256 0fd68b8bee6ce8d12c44d60b17a32570a26c4b3ca3cc739629aac74bceb70598

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad4768a02bd4fd3b26b4ba320b7ac308aedfb7f60ddb625f94b16f3b78deab0a
MD5 0fcbb341c5c31f13fe3dd986f7bb9069
BLAKE2b-256 759b68f851bb611a25b3279dec17c6950b995cea83f70e2dd375f9d8cd201afa

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f5a1e4c1bc693e759713fd902c75fece4d216c82f2d7fe7e9f07013cc45932b2
MD5 3c98154c613e1d42c2199b0bbcc6e44f
BLAKE2b-256 ed30af2a953397eae2a8838e3ef92c6a6f700d1ad403b8973553b3c64c044c85

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 50330f0053ed58b0ce5ec784c1ff5187e3a87456f5aa55554ed0484815291cc2
MD5 e50cfb1228faedf48de06e6231c9b80c
BLAKE2b-256 bd02f9f7e70cbccd650eb8260257c0b2a4d1a8386775135688e8160040c5c682

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aea70a660e03db8920072b5fb1057eed8e6fcee0928bd506f9ddab3a83eeaa9a
MD5 83d798e654f18e03740c33442f2bbaf8
BLAKE2b-256 4bcfee48c0788d0f7bcbe76e1a7e8cc705786ca90983306d3627cb8b107216e6

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 82ad331e007b78e9fc56d360849b152e14e0651e80900b2914c3d3cb7c69a42b
MD5 b946cb09948249e4f64452446548bfcc
BLAKE2b-256 d5de0594ffde42bb39fad28922bc02d25918129a3e429e48bce93bd99360e1d2

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36e676a0458b0cdc162cb21c826c9ab35c5f717bf7265df7cff84533663dadcd
MD5 b1a7f1591072b460f584027aeb0b0cc4
BLAKE2b-256 81ba0141397334ec7ba49f72541d572dcb5f2ad56a40c231b2753eed4d492963

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e0009635bcc88bb37d3814442feeef27673b43c9ed907fb33bd6d41a46485537
MD5 c6198dd719878da0a932ef0657b6941c
BLAKE2b-256 e42900236362d5b55e9f8472fa9fa60ee29d66244f079792f76d5b8487c50833

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0dd11a6c5f4306f08a801f090ba3d047b979857f57517338b6d9de114cbbb3f0
MD5 f76e2bd5261479a2507e69b6a91f3e5d
BLAKE2b-256 a0e2cd93ffdc795087e995a78e1ee15404541510be34e5e1f0104172fc377cc0

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ec4cf2cfe172b1bba3e11343c82d7d633c4e6faec0bdee11e8f643859499f55e
MD5 01312ef228eb3a12eadd55d2052f768a
BLAKE2b-256 a6871e32d605d4fde025c9152a1a230873bf33ab95fa3cec8544326baed345ee

See more details on using hashes here.

File details

Details for the file charsetrs-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for charsetrs-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f5921cbef11ab53c7a779c7858dfe4443f7d0a245bffd0657cd12f5990ea0d01
MD5 17bae21029514bb946162cfce6df1a8f
BLAKE2b-256 b875f0a03e85d4ce7da0d923eb4d50f1d33bbd4ac97997dab5a0ab3ec5de5d18

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