FA-91701 / Digital signal filters / Open access
Bilinear mapping uses K = fs · case 01
The digital cutoff lands at about half the intended frequency.
ROOT CAUSE
The substitution constant is fs instead of 2 fs (2/T).
VERIFIED REPAIR
Use K = 2 fs.
Unsuccessful approach: The attempted repair uses fs / 2, moving the cutoff the other way.
Case contract
Input [kind, wc, fs] with rational analog cutoff wc (rad/s) and sample rate fs. Map H(s) = wc/(s+wc) (lowpass) or s/(s+wc) (highpass) with s = K (1 - z^-1)/(1 + z^-1), K = 2 fs, no prewarping. Return {"b": [b0, b1], "a": [1, a1]} as fraction strings normalized so a0 = 1, or "bad-spec".
Why this case matters
The bilinear transform is the standard analog-to-digital mapping; K or sign slips move the cutoff or flip the filter type.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
kind, wc, fs = x[0], Fraction(x[1]), Fraction(x[2])
if wc <= 0 or fs <= 0:
return 'bad-spec'
K = fs
d = K + wc
if kind == 'lowpass':
b = [wc / d, wc / d]
else:
b = [K / d, -K / d]
a = [Fraction(1), (wc - K) / d]
return {'b': [str(v) for v in b], 'a': [str(v) for v in a]}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: lowpass wc=100 fs=1000', ['lowpass', '100', '1000'], {'b': ['1/21', '1/21'], 'a': ['1', '-19/21']}], ['regression: lowpass wc=1 fs=1', ['lowpass', '1', '1'], {'b': ['1/3', '1/3'], 'a': ['1', '-1/3']}], ['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}]], [['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]], [['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=2000 fs=48000', ['highpass', '2000', '48000'], {'b': ['48/49', '-48/49'], 'a': ['1', '-47/49']}]], [['regression: highpass wc=1/2 fs=2', ['highpass', '1/2', '2'], {'b': ['8/9', '-8/9'], 'a': ['1', '-7/9']}], ['regression: lowpass wc=100 fs=1000', ['lowpass', '100', '1000'], {'b': ['1/21', '1/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]], [['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: highpass wc=2000 fs=48000', ['highpass', '2000', '48000'], {'b': ['48/49', '-48/49'], 'a': ['1', '-47/49']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: lowpass wc=100 fs=1000 | {'a': ['1', '-9/11'], 'b': ['1/11', '1/11']} | {'a': ['1', '-19/21'], 'b': ['1/21', '1/21']} | Failed |
| regression: lowpass wc=1 fs=1 | {'a': ['1', '0'], 'b': ['1/2', '1/2']} | {'a': ['1', '-1/3'], 'b': ['1/3', '1/3']} | Failed |
| regression: lowpass wc=3 fs=1/2 | {'a': ['1', '5/7'], 'b': ['6/7', '6/7']} | {'a': ['1', '1/2'], 'b': ['3/4', '3/4']} | Failed |
| control: bad spec | bad-spec | bad-spec | Passed |
| regression: lowpass wc=2000 fs=48000 | {'a': ['1', '-23/25'], 'b': ['1/25', '1/25']} | {'a': ['1', '-47/49'], 'b': ['1/49', '1/49']} | Failed |
| regression: lowpass wc=1/2 fs=2 | {'a': ['1', '-3/5'], 'b': ['1/5', '1/5']} | {'a': ['1', '-7/9'], 'b': ['1/9', '1/9']} | Failed |
| regression: highpass wc=100 fs=1000 | {'a': ['1', '-9/11'], 'b': ['10/11', '-10/11']} | {'a': ['1', '-19/21'], 'b': ['20/21', '-20/21']} | Failed |
SHA-256 / 1a8e7184f51f835d4bf5c5e9373219334c765b33ccd266592734282bbd1a7060
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
kind, wc, fs = x[0], Fraction(x[1]), Fraction(x[2])
if wc <= 0 or fs <= 0:
return 'bad-spec'
K = fs / 2
d = K + wc
if kind == 'lowpass':
b = [wc / d, wc / d]
else:
b = [K / d, -K / d]
a = [Fraction(1), (wc - K) / d]
return {'b': [str(v) for v in b], 'a': [str(v) for v in a]}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: lowpass wc=100 fs=1000', ['lowpass', '100', '1000'], {'b': ['1/21', '1/21'], 'a': ['1', '-19/21']}], ['regression: lowpass wc=1 fs=1', ['lowpass', '1', '1'], {'b': ['1/3', '1/3'], 'a': ['1', '-1/3']}], ['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}]], [['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]], [['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=2000 fs=48000', ['highpass', '2000', '48000'], {'b': ['48/49', '-48/49'], 'a': ['1', '-47/49']}]], [['regression: highpass wc=1/2 fs=2', ['highpass', '1/2', '2'], {'b': ['8/9', '-8/9'], 'a': ['1', '-7/9']}], ['regression: lowpass wc=100 fs=1000', ['lowpass', '100', '1000'], {'b': ['1/21', '1/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]], [['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: highpass wc=2000 fs=48000', ['highpass', '2000', '48000'], {'b': ['48/49', '-48/49'], 'a': ['1', '-47/49']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: lowpass wc=100 fs=1000 | {'a': ['1', '-2/3'], 'b': ['1/6', '1/6']} | {'a': ['1', '-19/21'], 'b': ['1/21', '1/21']} | Failed |
| regression: lowpass wc=1 fs=1 | {'a': ['1', '1/3'], 'b': ['2/3', '2/3']} | {'a': ['1', '-1/3'], 'b': ['1/3', '1/3']} | Failed |
| regression: lowpass wc=3 fs=1/2 | {'a': ['1', '11/13'], 'b': ['12/13', '12/13']} | {'a': ['1', '1/2'], 'b': ['3/4', '3/4']} | Failed |
| control: bad spec | bad-spec | bad-spec | Passed |
| regression: lowpass wc=2000 fs=48000 | {'a': ['1', '-11/13'], 'b': ['1/13', '1/13']} | {'a': ['1', '-47/49'], 'b': ['1/49', '1/49']} | Failed |
| regression: lowpass wc=1/2 fs=2 | {'a': ['1', '-1/3'], 'b': ['1/3', '1/3']} | {'a': ['1', '-7/9'], 'b': ['1/9', '1/9']} | Failed |
| regression: highpass wc=100 fs=1000 | {'a': ['1', '-2/3'], 'b': ['5/6', '-5/6']} | {'a': ['1', '-19/21'], 'b': ['20/21', '-20/21']} | Failed |
SHA-256 / 4fa30e6e1403dfb270a6ccb3ed102896dd0e984b59c9eac6b9d167a6a42497b0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
kind, wc, fs = x[0], Fraction(x[1]), Fraction(x[2])
if wc <= 0 or fs <= 0:
return 'bad-spec'
K = 2 * fs
d = K + wc
if kind == 'lowpass':
b = [wc / d, wc / d]
else:
b = [K / d, -K / d]
a = [Fraction(1), (wc - K) / d]
return {'b': [str(v) for v in b], 'a': [str(v) for v in a]}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: lowpass wc=100 fs=1000', ['lowpass', '100', '1000'], {'b': ['1/21', '1/21'], 'a': ['1', '-19/21']}], ['regression: lowpass wc=1 fs=1', ['lowpass', '1', '1'], {'b': ['1/3', '1/3'], 'a': ['1', '-1/3']}], ['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}]], [['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]], [['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=2000 fs=48000', ['highpass', '2000', '48000'], {'b': ['48/49', '-48/49'], 'a': ['1', '-47/49']}]], [['regression: highpass wc=1/2 fs=2', ['highpass', '1/2', '2'], {'b': ['8/9', '-8/9'], 'a': ['1', '-7/9']}], ['regression: lowpass wc=100 fs=1000', ['lowpass', '100', '1000'], {'b': ['1/21', '1/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: lowpass wc=1/2 fs=2', ['lowpass', '1/2', '2'], {'b': ['1/9', '1/9'], 'a': ['1', '-7/9']}], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]], [['regression: lowpass wc=3 fs=1/2', ['lowpass', '3', '1/2'], {'b': ['3/4', '3/4'], 'a': ['1', '1/2']}], ['regression: lowpass wc=2000 fs=48000', ['lowpass', '2000', '48000'], {'b': ['1/49', '1/49'], 'a': ['1', '-47/49']}], ['regression: highpass wc=2000 fs=48000', ['highpass', '2000', '48000'], {'b': ['48/49', '-48/49'], 'a': ['1', '-47/49']}], ['control: bad spec', ['lowpass', '0', '1'], 'bad-spec'], ['regression: highpass wc=100 fs=1000', ['highpass', '100', '1000'], {'b': ['20/21', '-20/21'], 'a': ['1', '-19/21']}], ['regression: highpass wc=1 fs=1', ['highpass', '1', '1'], {'b': ['2/3', '-2/3'], 'a': ['1', '-1/3']}], ['regression: highpass wc=3 fs=1/2', ['highpass', '3', '1/2'], {'b': ['1/4', '-1/4'], 'a': ['1', '1/2']}]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: lowpass wc=100 fs=1000 | {'a': ['1', '-19/21'], 'b': ['1/21', '1/21']} | {'a': ['1', '-19/21'], 'b': ['1/21', '1/21']} | Passed |
| regression: lowpass wc=1 fs=1 | {'a': ['1', '-1/3'], 'b': ['1/3', '1/3']} | {'a': ['1', '-1/3'], 'b': ['1/3', '1/3']} | Passed |
| regression: lowpass wc=3 fs=1/2 | {'a': ['1', '1/2'], 'b': ['3/4', '3/4']} | {'a': ['1', '1/2'], 'b': ['3/4', '3/4']} | Passed |
| control: bad spec | bad-spec | bad-spec | Passed |
| regression: lowpass wc=2000 fs=48000 | {'a': ['1', '-47/49'], 'b': ['1/49', '1/49']} | {'a': ['1', '-47/49'], 'b': ['1/49', '1/49']} | Passed |
| regression: lowpass wc=1/2 fs=2 | {'a': ['1', '-7/9'], 'b': ['1/9', '1/9']} | {'a': ['1', '-7/9'], 'b': ['1/9', '1/9']} | Passed |
| regression: highpass wc=100 fs=1000 | {'a': ['1', '-19/21'], 'b': ['20/21', '-20/21']} | {'a': ['1', '-19/21'], 'b': ['20/21', '-20/21']} | Passed |
SHA-256 / a1ab277fe8b5a952e42206b1813f85875fae5bd276a1633b5d2f45e7d5ac470c
Verification & scope
A deterministic bounded teaching model with a stipulated toy contract; exact rational arithmetic or fixed-decimal rounding keeps outputs strict JSON. It is not a production DSP library and claims no standards conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:38.288717+00:00.
Case digest / cc229482fcf5148558b11eaaf13cab7c8b1d7d7ad29a3cece904b20c8c2f5e24