Skip to main content

Rust-accelerated structured data encoder for LLM token compression

Project description

CLM Encoder

sd-encoder

Rust-Accelerated Structured Data Encoder for LLMs

Test Suite PyPI License

Compress structured data into compact token sequences — 40–85% fewer tokens, no model retraining, no heavy dependencies.


sd-encoder is the standalone Structured Data Encoder from CLM, compiled in Rust and exposed as a Python extension. It encodes dicts, lists, and nested objects into compact token sequences that LLMs interpret with equal or better accuracy at a fraction of the token cost.

Install it on its own if you only need structured data encoding — no spaCy, no NLP stack, no unnecessary overhead.

Input Typical Compression
Product catalogs 55–85%
Knowledge bases 40–75%
Business rules 50–80%
API responses 45–70%

Installation

pip install sd-encoder

No additional downloads required. Pre-built wheels are available for Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), and Windows.


Quick Start

from sd_encoder import SDEncoderV2, SDCompressionConfig

config = SDCompressionConfig(preserve_structure=True, auto_detect=True)
encoder = SDEncoderV2(config)

catalog = [
    {"article_id": "KB-001", "title": "Reset Password", "content": "To reset your password...", "tags": ["security"]},
    {"article_id": "KB-002", "title": "Update Billing",  "content": "To update your billing...",  "tags": ["billing"]},
]

result = encoder.encode_validated(catalog)
print(result.compressed)
# {article_id,title,content,tags}[KB-001,Reset Password,To reset your password...,security][KB-002,Update Billing,To update your billing...,billing]

print(f"{result.compression_ratio():.1f}% reduction")
print(f"{result.n_tokens()}{result.c_tokens()} tokens")

Configuration

SDCompressionConfig controls field selection, truncation, and structure preservation. All parameters are optional.

from sd_encoder import SDCompressionConfig, FieldImportance

config = SDCompressionConfig(
    # Field selection
    required_fields=["id", "title", "status"],      # always include these
    excluded_fields=["internal_notes", "raw_log"],  # always drop these
    drop_non_required_fields=False,                 # if True, emit only required_fields

    # Importance filtering
    auto_detect=True,                               # infer importance from field name/value
    importance_threshold=FieldImportance.MEDIUM,    # drop fields below this level
    field_importance={                              # explicit overrides
        "summary": FieldImportance.HIGH,
        "version": FieldImportance.LOW,
    },

    # Truncation
    max_truncation_length=300,                      # global string truncation
    max_truncation_mapping={                        # per-field truncation
        "description": 150,
        "content": 500,
    },

    # Structure
    preserve_structure=True,                        # encode nested objects inline
    default_fields_order=["id", "title", "status"], # pin ordering of known fields
)

Field Importance

FieldImportance controls the auto-detection threshold. Values are ordered — NEVER < LOW < MEDIUM < HIGH < CRITICAL.

from sd_encoder import FieldImportance

FieldImportance.NEVER    # always drop
FieldImportance.LOW      # drop when filtering
FieldImportance.MEDIUM   # include by default
FieldImportance.HIGH     # always include unless explicitly excluded
FieldImportance.CRITICAL # never drop (ids, names, titles)

# Comparable
FieldImportance.HIGH >= FieldImportance.MEDIUM  # True
int(FieldImportance.HIGH)                       # 3

Auto-detection applies heuristics to field names and values when auto_detect=True:

Pattern Detected importance
id, uuid, name, title CRITICAL
status, priority, details HIGH
description, type, channel MEDIUM
source, version, metadata LOW
_*, *_at, *_date NEVER
Empty or very short values NEVER

Output

encode_validated runs compression then strips redundant whitespace and falls back to the original if the compressed output is larger.

result = encoder.encode_validated(data)

result.compressed        # str — the encoded token sequence
result.original          # original input, returned as Python dict/list
result.component         # "ds_compression"
result.n_tokens()        # estimated token count of original
result.c_tokens()        # estimated token count of compressed
result.compression_ratio()  # float — percentage reduction

# Validate manually if needed
result = encoder.encode(data)
result.validate_compression_ratio()  # fall back to original if compressed is larger
result.validate_compressed()         # strip redundant whitespace

Use encode directly when you want to inspect the output before deciding whether to validate.


Encoding Examples

Single object:

encoder.encode_validated({"id": "T-42", "title": "Login fails", "status": "open", "priority": "high"})
# {id,title,status,priority}[T-42,Login fails,open,high]

Nested object:

encoder.encode_validated({
    "user": {"id": "U-1", "name": "Ana"},
    "ticket": {"id": "T-42", "status": "open"}
})
# {user:{id,name},ticket:{id,status}}[U-1,Ana][T-42,open]

List of dicts (table encoding):

encoder.encode_validated([
    {"id": 1, "name": "Laptop",  "status": "active"},
    {"id": 2, "name": "Monitor", "status": "active"},
])
# {id,name,status}[1,Laptop,active][2,Monitor,active]

With field filtering:

config = SDCompressionConfig(
    required_fields=["id", "title"],
    drop_non_required_fields=True,
)
encoder = SDEncoderV2(config)
encoder.encode_validated({"id": 1, "title": "Test", "internal_log": "...", "raw": "..."})
# {id,title}[1,Test]

Relationship to CLM

sd-encoder is the engine behind the Structured Data encoder in CLM. If you need thread or system prompt encoding alongside structured data, install the full library instead:

pip install clm-core

sd-encoder is the right choice when:

  • You only need structured data encoding
  • You want to avoid the spaCy dependency
  • You're deploying in a constrained environment
  • You're integrating encoding into a Rust or polyglot pipeline

License

Dual-licensed:

  • AGPL-3.0 — free for open source use (LICENSE-AGPL)
  • Commercial — for proprietary products and SaaS (contact)

Issues · Discussions · Contact

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

sd_encoder-0.1.1.tar.gz (54.1 kB view details)

Uploaded Source

Built Distributions

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

sd_encoder-0.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp314-cp314-win_amd64.whl (861.8 kB view details)

Uploaded CPython 3.14Windows x86-64

sd_encoder-0.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp314-cp314-macosx_11_0_arm64.whl (964.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

sd_encoder-0.1.1-cp314-cp314-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

sd_encoder-0.1.1-cp313-cp313-win_amd64.whl (861.6 kB view details)

Uploaded CPython 3.13Windows x86-64

sd_encoder-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp313-cp313-macosx_11_0_arm64.whl (964.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sd_encoder-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

sd_encoder-0.1.1-cp312-cp312-win_amd64.whl (862.0 kB view details)

Uploaded CPython 3.12Windows x86-64

sd_encoder-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp312-cp312-macosx_11_0_arm64.whl (965.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sd_encoder-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

sd_encoder-0.1.1-cp311-cp311-win_amd64.whl (863.5 kB view details)

Uploaded CPython 3.11Windows x86-64

sd_encoder-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (968.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sd_encoder-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

sd_encoder-0.1.1-cp310-cp310-win_amd64.whl (863.4 kB view details)

Uploaded CPython 3.10Windows x86-64

sd_encoder-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sd_encoder-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

File details

Details for the file sd_encoder-0.1.1.tar.gz.

File metadata

  • Download URL: sd_encoder-0.1.1.tar.gz
  • Upload date:
  • Size: 54.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sd_encoder-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a1cc0d499b634f1775ae7bf3f2fef65a4ddc5d17d90a766ac694ae91438cbac1
MD5 18e35cd13837c06946f662f8f1a5a85d
BLAKE2b-256 a015f52bddb441d6d144668311ee75efe6b4eeaf54781df84ca113d0be7ba2d3

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d084f0a1285f2f53d8bd5afd9e7604a9601a6ff362f1d88ce7fe0f3aed144ee0
MD5 bc73f3a7df583a860b42ad04bcc476c1
BLAKE2b-256 8520f45dff55cb218a81829ae909315649fce25dd23ed6139acb67b982cf3cfd

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ed9dada77f2b4a5a6883972c874d45a6ba2b0f8bba1f18b0256ebabbbabd41f
MD5 b09c7586203dc457ba1e7c8b0d48bd72
BLAKE2b-256 a8baa76e28e64e802e4c7c6ef18cfacaaeecba73d510f043126a46aaa5b790b2

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: sd_encoder-0.1.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 861.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sd_encoder-0.1.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 14df4c26063d069428e2a1312ca1dd27f964625cf21619363aacddd452e15b7c
MD5 2e2fd3725afba5e29e85cf29921ac3a9
BLAKE2b-256 3c54ab3a316cdf691c798d3d4d4e8d5b93723e513975f8e040a2bf759938bd5b

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8e4686bfea6c20e6d1c5d0349b934fb006681767f0e809193e63770535559cf8
MD5 7fda51ce2dd3444a59dcd096282f35a0
BLAKE2b-256 6f163d3fc502197e374a2bfab51725dbc3009649e5d685a7655ece015f922346

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3a1772ec7d446d6624c5dcd03d8f03fc05815c01c76c6864426f30ceb801e8c1
MD5 a9056005e39c5d2664189e6ce0daa66f
BLAKE2b-256 92355a563c586c79937a1f58b39a721850c96c753c2655cfdfcb782ac77bf14a

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 71cdb5449772345949841a9325a33bcf60be20bc539f1236df089a6ed4dd5337
MD5 0d960696d98c43c472767db0a8a4685e
BLAKE2b-256 468b767e5ee88f0a6da1d7c0f2b1f377e2262437d3a1baa33ba47cfe8ecafde9

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sd_encoder-0.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 861.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sd_encoder-0.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 50a069be7be22e6e7cbeba2b014e89724db5600525fa2f8698a7959fa53d6a73
MD5 aaafe6bc6946d05a89622e7314092be5
BLAKE2b-256 734b878d800153a3568d8962ba9ccd15d1451758426a9deb7e04d4d7df17e293

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39b0e0e2ae2f37717c2b832dc5821b33168775a7727fdbfeb7565404a493027b
MD5 4ae18e8a43c16d7af0921fecd406464f
BLAKE2b-256 ab6cbce0a74de9f74cbdae03b70f539004b8f003acad71dd74cf84bfeb39e94e

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb7b6df187abf98347d0c81b19a0bf57929047cf83d976b5f83a6e81f9ce56de
MD5 2fb077bffba95bd3d90f0e4bebccc1f8
BLAKE2b-256 24fd6182c288e7a5294f41e29301688a55b568d96fe24dde090cc675de8a6d69

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a8fdea07785fcdc5a410c4c42ec5d38536117af82e5939a75af6bb332dbf165b
MD5 649b8034b2f7081636d4eb344e8dbee1
BLAKE2b-256 813ec7eea97cd80cbae65ec826503bf338ce87494e41c90ed69f5577ed08fe35

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sd_encoder-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 862.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sd_encoder-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a0f09b53a0e2a8a922161ba7cc08471285169c3540b450bc01fc438b2c6023b6
MD5 9acf2b3b0f006b3e83b50cf3a609c28b
BLAKE2b-256 ae185552f89ab5117665fa5635dcdd94ac0eafc27b4c3bf4766274e33dcedd5a

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5042ff2fb334510eabc97d1029ce83feda58f5f48117144a4fec460802785aa7
MD5 b3aa5d349d758f1f5ee2d12e59a8a973
BLAKE2b-256 83f66ea0af233303d0a5d977665b8f785807511faeab06f4ceeec2bc744cd690

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b16fa49acc4141704a42c3932f33304e1e551d304ab8bfd0f550cb291a8fde1
MD5 d2e0292578684a56069f75f981bf2ba6
BLAKE2b-256 9df6a6cf09206dd9cc8fb921a38412ff728b990b92992e1d06e8a6dc87db4d1b

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4157769ba473e39b02d1e8eb721e27960819a912ea0577fa0d526ea104f39c13
MD5 03551bce51318ae44c92776c9e27abed
BLAKE2b-256 19b746c8b037f58c52ba07628a3778f6f6809bb24185901b9a492d4f0626ecd7

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sd_encoder-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 863.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sd_encoder-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 666709efa0d9ea5341ab73f952dac3ba2a4defac530fd8c2d969fccd9a29e8b7
MD5 b53244cc35f5051cf6889c57afbe5372
BLAKE2b-256 4068d2d2c2eb218488b2ae6dc0a1a594aff2fbebe2479c8cf84f72a14282f2c9

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d76401bcc2144cb7b30b48bfbc5aac5d42c4836f4aa9bd5404fc3b381bfa8ec4
MD5 82a40f70bad5ea79eee2dece74d4ee70
BLAKE2b-256 3fbdd204081942c71e9f5b8d935280d5e341ddb2a11fddb0d4059e22e5720eb6

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ad7eb0ff9aa264053097946acc05332c3f6d4a1ae13af0fe6b4dfa5f8704598
MD5 41b47a7f90b4489a15f3ef0a698ca6b5
BLAKE2b-256 a651140b27e39b1fbc5a9ef03b4bdd496053ad0cd961384cafcc8b2c1fc3a6f5

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9c26825f43f9a8937215557c3814ee77678a4b933c44146a56f127f7f86a2497
MD5 af027c42a2e6962989de91f62d844a6b
BLAKE2b-256 f55585ee9368ac54cedd7e5576e5e745944d1beadf115362e09a14d26ef67940

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sd_encoder-0.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 863.4 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sd_encoder-0.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 34e8f5f42b26d637152abda707cbd0918c74fe2d9e169908a4177cfe4f03c849
MD5 f70bc602963f197412481ba60f700626
BLAKE2b-256 1b7b077767c61aa234358d8871c832dc524e8c07603cbce997bb66e60f4342d3

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 05fa15e1ca0dc43382db9124cbfcfa4e6236e70fa2fb427d060c41101bfcacf0
MD5 5e3154ed381649d416ee6001168ea08d
BLAKE2b-256 e2f37c5cff271c2a76466148bc5e4dc838941a0b50f2e16b9add0ae4cc41b57d

See more details on using hashes here.

File details

Details for the file sd_encoder-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sd_encoder-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b862e3bb50310fe47ef9ec302b79c04e12f7ede05c0388fd3efcdef525b59ac
MD5 a2f84dd1ad64735e70f516c04eb0be3b
BLAKE2b-256 270c753db3cabb72ba2d50256071a7ec5a48096611f68af9a18064aba8be24cd

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