From 649a4d8551fb996e4b9d17fd8e40b7192509e924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralph=20K=C3=BCpper?= Date: Thu, 14 May 2026 10:21:06 +0200 Subject: [PATCH] bench: refresh all benchmark suites at v0.5.908 (2026-05-14) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Full rerun of polyglot, JSON polyglot, honest_bench, and suite/ microbenchmarks on an otherwise-idle machine. Confirms that yesterday's v0.5.891 sweep (#745 follow-up) was dominated by parallel cargo-build contamination — σ on Perry compute cells dropped from 25-57 ms to 0.3-2.2 ms. Key results: - Compute polyglot matches v0.5.585 historical numbers within 1-4 ms across all 9 cells (default + --fast-math); fast-math cleanly reproduces 8× / 3.6× / 2.9× speedups on loop_overhead / math_intensive / accumulate. - honest_bench: Perry slightly faster on all 3 workloads vs v0.5.891 (image_conv 365 → 354 ms; json_full 1155 → 1098 ms); 300/300 output-matched rows. - #745 partial fix verification: JSON polyglot RSS dropped 254 → 227 MB roundtrip and 411 → 309 MB iterate after v0.5.900's GC trigger-ratchet fix. Residual ~150 MB gap vs v0.5.279 baseline flagged on the issue. - suite/: method_calls back to 9 ms (yesterday's 25 ms was noise); closure/factorial regressions vs v0.5.173 persist as known follow-ups. Docs refreshed: top-level README, benchmarks/README, polyglot RESULTS{,_AUTO,_OPT}.md, honest_bench REPORT.md (+ regenerated charts), json_polyglot RESULTS.md (auto), suite/results/RESULTS.md (new). All with 2026-05-14 / v0.5.908 datestamps and historical deltas vs v0.5.891 and v0.5.279. --- README.md | 42 +- benchmarks/README.md | 374 +- benchmarks/honest_bench/REPORT.md | 74 +- .../honest_bench/charts/image_convolution.png | Bin 54282 -> 54947 bytes .../charts/json_pipeline_full.png | Bin 57015 -> 55804 bytes .../charts/json_pipeline_small.png | Bin 50989 -> 50347 bytes benchmarks/honest_bench/results/metadata.json | 12 +- benchmarks/honest_bench/results/results.json | 3947 +++++++++++++++-- benchmarks/honest_bench/results/summary.txt | 24 + benchmarks/json_polyglot/RESULTS.md | 74 +- benchmarks/polyglot/RESULTS.md | 36 +- benchmarks/polyglot/RESULTS_AUTO.md | 205 +- benchmarks/polyglot/RESULTS_OPT.md | 10 +- benchmarks/suite/results/RESULTS.md | 79 + 14 files changed, 4064 insertions(+), 813 deletions(-) create mode 100644 benchmarks/honest_bench/results/summary.txt create mode 100644 benchmarks/suite/results/RESULTS.md diff --git a/README.md b/README.md index 3284b857c9..338417b41d 100644 --- a/README.md +++ b/README.md @@ -52,36 +52,38 @@ People are building real apps with Perry today. Here are some highlights: > **As of v0.5.585, fast-math is opt-in.** Perry's default mode emits no `reassoc + contract` per-instruction FMF flags, so f64 arithmetic is bit-exact with Node. `--fast-math` (CLI), `PERRY_FAST_MATH=1` (env), or `"perry": { "fastMath": true }` in `package.json` re-enables the flags. See [`docs/src/cli/fast-math.md`](docs/src/cli/fast-math.md) for the discussion of when it does and doesn't matter. The numbers below are Perry's default mode unless noted. -Numbers below for Perry are from a 2026-05-06 sweep on macOS ARM64 (M1 Max, RUNS=11 medians, `taskpolicy -t 0 -l 0`). Other languages are from the 2026-04-25 v0.5.249 sweep on the same hardware (compiler versions unchanged — these numbers don't shift with Perry-side work). Source + methodology in [`benchmarks/polyglot/`](benchmarks/polyglot/). +Numbers below are from a 2026-05-14 sweep on macOS ARM64 (M1 Max, RUNS=11 medians, `taskpolicy -t 0 -l 0`) at Perry v0.5.908 on an otherwise-idle machine. All languages re-measured together this run. Source + methodology in [`benchmarks/polyglot/`](benchmarks/polyglot/). | Benchmark | Perry | Rust | C++ | Go | Swift | Java | Node | Bun | What it tests | |---------------------|------:|------:|------:|------:|------:|------:|------:|------:|---------------| -| fibonacci | 304 | 330 | 315 | 451 | 406 | 282 | 1022 | 589 | Recursive function calls (i64 specialization) | -| loop_data_dependent | 221 | 229 | 129 | 128 | 233 | 229 | 322 | 232 | Multiplicative carry through `sum` (genuinely-non-foldable f64) | -| object_create | 2 | 0 | 0 | 0 | 0 | 5 | 11 | 6 | Object allocation (1M objects, scalar replacement) | -| nested_loops | 17 | 8 | 8 | 10 | 8 | 11 | 18 | 21 | Nested array access (cache-bound) | -| array_read | 11 | 9 | 9 | 11 | 9 | 12 | 13 | 16 | Sequential read (10M elements) | -| array_write | 4 | 7 | 3 | 9 | 2 | 7 | 9 | 6 | Sequential write (10M elements) | +| fibonacci | 309 | 316 | 309 | 446 | 401 | 278 | 987 | 518 | Recursive function calls (i64 specialization) | +| loop_data_dependent | 225 | 226 | 129 | 128 | 225 | 226 | 226 | 230 | Multiplicative carry through `sum` (genuinely-non-foldable f64) | +| object_create | 2 | 0 | 0 | 0 | 0 | 5 | 8 | 6 | Object allocation (1M objects, scalar replacement) | +| nested_loops | 18 | 8 | 8 | 10 | 8 | 10 | 17 | 20 | Nested array access (cache-bound) | +| array_read | 11 | 9 | 9 | 10 | 9 | 11 | 14 | 16 | Sequential read (10M elements) | +| array_write | 3 | 7 | 2 | 9 | 2 | 6 | 9 | 6 | Sequential write (10M elements) | -Default Perry runs in the same neighborhood as Rust default `-O`, C++ `-O3`, and Swift `-O` on every row — competitive on integer recursion (`fibonacci`), within a tick of native on object allocation thanks to scalar replacement (`object_create`), within a few ms on cache-bound work (`nested_loops`, `array_read`/`array_write`), and matching the no-contract compiled pack on genuinely-non-foldable f64 (`loop_data_dependent`). Go and `clang -O3` win the `loop_data_dependent` row by fusing `sum * a + b` into a single `FMADDD` instruction (FMA contraction is `-ffp-contract=fast` — a separate knob `--fast-math` deliberately doesn't toggle). Python column omitted to keep the table readable; full numbers in [`benchmarks/polyglot/RESULTS.md`](benchmarks/polyglot/RESULTS.md). +Default Perry runs in the same neighborhood as Rust default `-O`, C++ `-O3`, and Swift `-O` on every row — competitive on integer recursion (`fibonacci` 309 vs Rust 316 / C++ 309), within a tick of native on object allocation thanks to scalar replacement (`object_create`), within a few ms on cache-bound work (`nested_loops`, `array_read`/`array_write`), and matching the no-contract compiled pack on genuinely-non-foldable f64 (`loop_data_dependent` 225 vs Rust 226 / Bun 230 / Node 226). Apple Clang `-O3` and Go default win the `loop_data_dependent` row at 128-129 by fusing `sum * a + b` into a single `FMADDD` instruction (FMA contraction is `-ffp-contract=fast` — a separate knob `--fast-math` deliberately doesn't toggle). Python column omitted to keep the table readable; full numbers in [`benchmarks/polyglot/RESULTS.md`](benchmarks/polyglot/RESULTS.md). -We deliberately don't lead with the trivially-foldable accumulator microbenchmarks (`loop_overhead` / `math_intensive` / `accumulate`) that Perry posted big numbers on through v0.5.584. Those are flag-aggressiveness probes — they measure whether each compiler applied `reassoc + autovectorize` to a `sum += 1.0`-shaped loop, not how fast the resulting loop computes under load. Perry default sits in the no-flags pack (~95 ms) on all three; `--fast-math` recovers 12 / 14 / 33 ms. C++ `-O3 -ffast-math` matches Perry `--fast-math` to the millisecond on the same kernels — same LLVM pipeline, one flag. The full breakdown is in [`benchmarks/README.md`](benchmarks/README.md#optimization-probes-compiler-flag-aggressiveness-not-runtime-perf) and [`polyglot/RESULTS_OPT.md`](benchmarks/polyglot/RESULTS_OPT.md). +We deliberately don't lead with the trivially-foldable accumulator microbenchmarks (`loop_overhead` / `math_intensive` / `accumulate`) that Perry posted big numbers on through v0.5.584. Those are flag-aggressiveness probes — they measure whether each compiler applied `reassoc + autovectorize` to a `sum += 1.0`-shaped loop, not how fast the resulting loop computes under load. Perry default sits in the no-flags pack (97 / 51 / 97 ms in this sweep) on all three; `--fast-math` recovers 12 / 14 / 34 ms. C++ `-O3 -ffast-math` matches Perry `--fast-math` to the millisecond on the same kernels — same LLVM pipeline, one flag. The full breakdown is in [`benchmarks/README.md`](benchmarks/README.md#optimization-probes-compiler-flag-aggressiveness-not-runtime-perf) and [`polyglot/RESULTS_OPT.md`](benchmarks/polyglot/RESULTS_OPT.md). ### vs Node.js and Bun -Perry's broader benchmark suite covers workloads outside the polyglot set — closures, classes, JSON, prime sieve, etc. **The numbers below are from the 2026-04-23 v0.5.173 baseline run; a v0.5.585 rerun is on the followup list.** Most of these are not FP-foldable accumulator patterns (factorial is integer modulo, method_calls dispatches through closures, json_roundtrip is parse/stringify-bound), so the v0.5.585 default-mode numbers should be close to those shown. +Perry's broader benchmark suite covers workloads outside the polyglot set — closures, classes, JSON, prime sieve, etc. Numbers below from the 2026-05-14 v0.5.908 sweep via `benchmarks/suite/run_benchmarks.sh` (single-run-per-cell, not RUNS=11 medians — see [`benchmarks/polyglot/`](benchmarks/polyglot/) for the rigorous multi-run methodology). -| Benchmark | Perry (v0.5.173) | Node.js | Bun | What it tests | +| Benchmark | Perry (v0.5.908) | Node.js | Bun | What it tests | |-----------|-----------------:|--------:|----:|---------------| -| factorial | 31ms | 596ms | 98ms | Modular accumulation (integer fast path) | -| method_calls | 1ms | 11ms | 9ms | Class method dispatch (10M calls) | -| closure | 10ms | 309ms | 51ms | Closure creation + invocation (10M calls) | -| binary_trees | 3ms | 10ms | 7ms | Tree allocation + traversal (1M nodes, scalar replacement) | -| string_concat | 0ms | 3ms | 2ms | 100K string appends | -| prime_sieve | 5ms | 8ms | 7ms | Sieve of Eratosthenes | -| mandelbrot | 23ms | 25ms | 30ms | Complex f64 iteration (800x800) | -| matrix_multiply | 24ms | 34ms | 35ms | 256x256 matrix multiply | -| json_roundtrip | 314ms | 377ms | 250ms | 50× `JSON.parse` + `JSON.stringify` on a ~1MB, 10K-item blob | +| factorial | 107ms | 591ms | 97ms | Modular accumulation (integer fast path) | +| method_calls | 9ms | 11ms | 9ms | Class method dispatch (10M calls) | +| closure | 50ms | 304ms | 51ms | Closure creation + invocation (10M calls) | +| binary_trees | 2ms | 10ms | 7ms | Tree allocation + traversal (1M nodes, scalar replacement) | +| string_concat | 0ms | 3ms | 1ms | 100K string appends | +| prime_sieve | 3ms | 8ms | 7ms | Sieve of Eratosthenes | +| mandelbrot | 28ms | 25ms | 29ms | Complex f64 iteration (800x800) | +| matrix_multiply | 28ms | 34ms | 34ms | 256x256 matrix multiply | +| json_roundtrip (lazy tape, gen-gc) | 83ms | 377ms | 249ms | 50× `JSON.parse` + `JSON.stringify` on a ~1MB, 10K-item blob | + +`closure` and `factorial` are still slower than the older v0.5.173 baseline (10 → 50 ms, 31 → 107 ms). The v0.5.585 fast-math opt-in flip accounts for `factorial` (integer modulo plus an FP-tail reduction that the old default-on fast-math collapsed); `closure` regression is tracked as a follow-up. `method_calls` is back at baseline this sweep (9 ms) — yesterday's 25 ms reading was single-run noise from concurrent CPU load. The wins on `binary_trees` / `string_concat` / `prime_sieve` / `mandelbrot` / `matrix_multiply` against Node/Bun hold steady. Single-run cells are noisier than RUNS=11 medians; the lower-noise multi-run polyglot table above remains the canonical comparison. Perry compiles to native machine code via LLVM — no JIT warmup, no interpreter overhead. Key optimizations that apply in both modes: **scalar replacement** of non-escaping objects (escape analysis eliminates heap allocation entirely — object fields become registers), inline bump allocator for objects that do escape, i32 loop counters for bounded array access, integer-modulo fast path (`fptosi → srem → sitofp` instead of `fmod`), elimination of redundant `js_number_coerce` calls on numeric function returns, and i64 specialization for pure numeric recursive functions. diff --git a/benchmarks/README.md b/benchmarks/README.md index d4c51e70db..89daa5067f 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -18,11 +18,15 @@ flag, every methodology decision is in this page — no tables hidden behind blog posts, no cherry-picked subsets. > **Hardware:** Apple M1 Max (10 cores: 8P + 2E), 64 GB RAM, macOS -> 26.4. JSON benchmark numbers from 2026-04-25 (v0.5.249); Perry -> compute-microbench numbers refreshed 2026-05-06 (v0.5.585) following -> the fast-math opt-in flip — see "Compute microbenches" below for -> both `default` and `--fast-math` columns. Other languages' compute -> numbers retained from 2026-04-25 unless otherwise stated. +> 26.4. Numbers refreshed 2026-05-14 at v0.5.908 — full sweep across +> JSON polyglot, compute polyglot (default + `--fast-math` columns), +> honest_bench (Perry vs Rust/Zig/Node/Bun with output-correctness +> gating), and the suite/ microbenchmark set. Run on an otherwise-idle +> machine (vs the 2026-05-13 v0.5.891 sweep, which had a parallel +> cargo build contaminating tails — most of yesterday's apparent +> regressions disappeared this run). Earlier baselines: 2026-04-25 +> (v0.5.249), 2026-05-06 (v0.5.585), 2026-05-04 (v0.5.495 for +> honest_bench), 2026-05-13 (v0.5.891 contaminated). > > **CPU pinning:** macOS `taskpolicy -t 0 -l 0` — sets throughput-tier 0 > + latency-tier 0, a scheduler HINT toward P-cores on Apple Silicon. @@ -42,7 +46,7 @@ behind blog posts, no cherry-picked subsets. > RSS in MB (peak resident set size from `/usr/bin/time -l`, the worst > peak observed across runs). > -> **Pre-1.0 caveat:** Perry is pre-1.0 (v0.5.585); compared compilers +> **Pre-1.0 caveat:** Perry is pre-1.0 (v0.5.908); compared compilers > and runtimes are stable releases. Numbers reflect Perry's current > alpha state and may regress between releases. > @@ -132,24 +136,27 @@ and rebuilds the string from the parsed tree on every `dump()`. | Implementation | Profile | Median (ms) | p95 (ms) | σ | Min | Max | Peak RSS (MB) | |---|---|---:|---:|---:|---:|---:|---:| -| **c++ -O3 -flto (simdjson)** | optimized | **24** | 28 | 1.2 | 23 | 28 | 8 | -| c++ -O2 (simdjson) | idiomatic | 29 | 34 | 1.7 | 28 | 34 | 8 | -| perry (gen-gc + lazy tape) | optimized | 75 | 91 | 6.9 | 69 | 91 | 85 | -| rust serde_json (LTO+1cgu) | optimized | 185 | 190 | 1.7 | 183 | 190 | 11 | -| rust serde_json | idiomatic | 198 | 204 | 2.3 | 195 | 204 | 11 | -| bun | idiomatic | 259 | 342 | 26.1 | 253 | 342 | 82 | -| perry (mark-sweep, no lazy) | untuned floor | 363 | 378 | 6.3 | 356 | 378 | 102 | -| node | idiomatic | 394 | 602 | 60.1 | 382 | 602 | 127 | -| kotlin -server -Xmx512m | optimized | 453 | 484 | 12.6 | 447 | 484 | 423 | -| kotlin (kotlinx.serialization) | idiomatic | 473 | 533 | 21.4 | 453 | 533 | 606 | -| node --max-old=4096 | optimized | 526 | 605 | 38.3 | 478 | 605 | 128 | -| assemblyscript+json-as (wasmtime) | idiomatic | 598 | 621 | 10.5 | 582 | 621 | 58 | -| c++ -O3 -flto (nlohmann/json) | optimized | 772 | 774 | 1.1 | 771 | 774 | 25 | -| go -ldflags="-s -w" -trimpath | optimized | 805 | 824 | 9.1 | 796 | 824 | 23 | -| c++ -O2 (nlohmann/json) | idiomatic | 840 | 846 | 3.0 | 836 | 846 | 25 | -| go (encoding/json) | idiomatic | 848 | 1344 | 184.3 | 796 | 1344 | 23 | -| swift -O -wmo (Foundation) | optimized | 3709 | 3793 | 32.5 | 3686 | 3793 | 34 | -| swift -O (Foundation) | idiomatic | 3730 | 3844 | 54.3 | 3688 | 3844 | 34 | +| **c++ -O3 -flto (simdjson)** | optimized | **24** | 26 | 0.6 | 24 | 26 | 8 | +| c++ -O2 (simdjson) | idiomatic | 29 | 34 | 1.4 | 29 | 34 | 8 | +| perry (gen-gc + lazy tape) | optimized | 83 | 86 | 1.4 | 81 | 86 | 227 | +| rust serde_json (LTO+1cgu) | optimized | 186 | 190 | 1.4 | 185 | 190 | 11 | +| rust serde_json | idiomatic | 197 | 201 | 1.7 | 195 | 201 | 11 | +| bun | idiomatic | 249 | 252 | 1.3 | 247 | 252 | 81 | +| perry (mark-sweep, no lazy) | untuned floor | 335 | 339 | 1.7 | 333 | 339 | 283 | +| node | idiomatic | 377 | 386 | 4.5 | 370 | 386 | 127 | +| node --max-old=4096 | optimized | 380 | 386 | 4.0 | 373 | 386 | 127 | +| kotlin -server -Xmx512m | optimized | 457 | 470 | 5.3 | 451 | 470 | 424 | +| kotlin (kotlinx.serialization) | idiomatic | 476 | 495 | 8.0 | 467 | 495 | 606 | +| c++ -O3 -flto (nlohmann/json) | optimized | 783 | 785 | 1.8 | 780 | 785 | 25 | +| go -ldflags="-s -w" -trimpath | optimized | 796 | 802 | 3.8 | 788 | 802 | 23 | +| go (encoding/json) | idiomatic | 797 | 829 | 9.9 | 792 | 829 | 23 | +| c++ -O2 (nlohmann/json) | idiomatic | 849 | 851 | 1.1 | 848 | 851 | 25 | +| swift -O -wmo (Foundation) | optimized | 3771 | 3834 | 30.9 | 3698 | 3834 | 34 | +| swift -O (Foundation) | idiomatic | 3783 | 3819 | 18.4 | 3750 | 3819 | 34 | +| assemblyscript+json-as (wasmtime) | idiomatic | — | — | — | — | — | — | + +> _AssemblyScript row skipped this sweep — `as_workspace/` setup wasn't +> rebuilt; restored in next refresh._ #### B. JSON parse-and-iterate > Per iteration: `parse(blob)` → sum every record's `nested.x` @@ -162,57 +169,72 @@ tape pays its overhead without compensation. | Implementation | Profile | Median (ms) | p95 (ms) | σ | Min | Max | Peak RSS (MB) | |---|---|---:|---:|---:|---:|---:|---:| -| c++ -O2 (simdjson) | idiomatic | 24 | 27 | 0.9 | 24 | 27 | 8 | -| **c++ -O3 -flto (simdjson)** | optimized | **24** | 24 | 0.4 | 23 | 24 | 8 | -| rust serde_json (LTO+1cgu) | optimized | 183 | 185 | 1.2 | 182 | 185 | 11 | -| rust serde_json | idiomatic | 200 | 330 | 37.4 | 196 | 330 | 13 | -| bun | idiomatic | 254 | 255 | 1.9 | 249 | 255 | 87 | -| node --max-old=4096 | optimized | 355 | 389 | 11.4 | 346 | 389 | 87 | -| perry (mark-sweep, no lazy) | untuned floor | 375 | 402 | 10.2 | 370 | 402 | 102 | -| node | idiomatic | 380 | 652 | 87.2 | 356 | 652 | 101 | -| kotlin -server -Xmx512m | optimized | 455 | 465 | 6.1 | 444 | 465 | 426 | -| perry (gen-gc + lazy tape) | optimized | 466 | 475 | 7.0 | 457 | 475 | 100 | -| kotlin (kotlinx.serialization) | idiomatic | 469 | 481 | 5.9 | 459 | 481 | 608 | -| assemblyscript+json-as (wasmtime) | idiomatic | 605 | 632 | 11.4 | 587 | 632 | 58 | -| c++ -O3 -flto (nlohmann/json) | optimized | 786 | 793 | 2.7 | 782 | 793 | 25 | -| go -ldflags="-s -w" -trimpath | optimized | 805 | 833 | 9.2 | 798 | 833 | 22 | -| go (encoding/json) | idiomatic | 811 | 886 | 25.3 | 803 | 886 | 23 | -| c++ -O2 (nlohmann/json) | idiomatic | 866 | 929 | 18.7 | 857 | 929 | 26 | -| swift -O (Foundation) | idiomatic | 3686 | 4009 | 96.7 | 3634 | 4009 | 34 | -| swift -O -wmo (Foundation) | optimized | 3702 | 3769 | 36.2 | 3660 | 3769 | 34 | +| **c++ -O2 (simdjson)** | idiomatic | **24** | 25 | 0.5 | 24 | 25 | 8 | +| c++ -O3 -flto (simdjson) | optimized | 24 | 25 | 0.3 | 24 | 25 | 8 | +| rust serde_json (LTO+1cgu) | optimized | 182 | 184 | 0.9 | 181 | 184 | 11 | +| rust serde_json | idiomatic | 197 | 203 | 1.8 | 196 | 203 | 11 | +| bun | idiomatic | 251 | 254 | 1.2 | 250 | 254 | 86 | +| perry (mark-sweep, no lazy) | untuned floor | 338 | 366 | 8.3 | 336 | 366 | 283 | +| node | idiomatic | 351 | 357 | 2.9 | 346 | 357 | 87 | +| node --max-old=4096 | optimized | 352 | 360 | 5.4 | 343 | 360 | 87 | +| perry (gen-gc + lazy tape) | optimized | 425 | 428 | 2.1 | 421 | 428 | 309 | +| kotlin -server -Xmx512m | optimized | 462 | 527 | 20.4 | 449 | 527 | 424 | +| kotlin (kotlinx.serialization) | idiomatic | 476 | 485 | 3.7 | 473 | 485 | 606 | +| c++ -O3 -flto (nlohmann/json) | optimized | 797 | 828 | 9.2 | 795 | 828 | 25 | +| go -ldflags="-s -w" -trimpath | optimized | 798 | 842 | 13.0 | 794 | 842 | 23 | +| go (encoding/json) | idiomatic | 799 | 805 | 3.1 | 795 | 805 | 23 | +| c++ -O2 (nlohmann/json) | idiomatic | 877 | 882 | 2.6 | 873 | 882 | 25 | +| swift -O (Foundation) | idiomatic | 3742 | 3791 | 18.9 | 3721 | 3791 | 34 | +| swift -O -wmo (Foundation) | optimized | 3758 | 3793 | 23.9 | 3713 | 3793 | 34 | +| assemblyscript+json-as (wasmtime) | idiomatic | — | — | — | — | — | — | **Reading both tables together**: **simdjson leads both workloads -decisively** — 24 ms validate-and-roundtrip, 24 ms parse-and-iterate. -This is the honest C++ parse-throughput ceiling; cherry-picking -nlohmann would have hidden it. Perry's lazy tape (75 ms on -validate-and-roundtrip) is best-in-class **among dynamic-typing -runtimes** (beats Node 394 ms, Bun 259 ms, Kotlin 453 ms) but -loses cleanly to the SIMD-accelerated reference. +decisively** — 24 ms validate-and-roundtrip, 24 ms parse-and-iterate +(2026-05-14 sweep). This is the honest C++ parse-throughput ceiling; +cherry-picking nlohmann would have hidden it. Perry's lazy tape +(83 ms on validate-and-roundtrip, v0.5.908) is best-in-class +**among dynamic-typing runtimes** (beats Node 377 ms, Bun 249 ms, +Kotlin 457 ms) but loses cleanly to the SIMD-accelerated reference. On parse-and-iterate, where the lazy tape can't shortcut, Perry -default lands at 466 ms — slower than its own mark-sweep escape -hatch (375 ms) because the lazy tape pays overhead the iteration +default lands at **425 ms** — slower than its own mark-sweep escape +hatch (338 ms) because the lazy tape pays overhead the iteration forces it to amortize. Rust serde_json with typed structs is the -non-SIMD champion at 183 ms; Bun is the dynamic-typing champion at -254 ms with single-digit σ. The AssemblyScript+json-as row -(598-605 ms) shows what the closest TS-to-native peer ships today — -typed structs + wasmtime + a wasm-target compile pipeline. +non-SIMD champion at 182 ms; Bun is the dynamic-typing champion at +251 ms with single-digit σ. AssemblyScript+json-as is missing from +this sweep (the `as_workspace/` setup wasn't rebuilt; row preserved +as `—`). + +**RSS regression — partial fix landed in v0.5.900** (#745, GC trigger +ratchet on suppressed parses). Vs the 2026-04-25 v0.5.279 baseline: + +| Cell | v0.5.279 | v0.5.891 (peak) | v0.5.908 (this sweep) | +|---|---:|---:|---:| +| roundtrip, gen-gc + lazy tape | 85 MB | 254 MB | **227 MB** | +| parse-and-iterate, gen-gc + lazy tape | 100 MB | 411 MB | **309 MB** | +| parse-and-iterate, mark-sweep no lazy | 102 MB | 269 MB | **283 MB** | + +v0.5.900 closed roughly 30% of the gap on roundtrip and ~50% on +parse-and-iterate; ~2.5-3× the v0.5.279 floor remains. Wall-time +moved less and is roughly back to v0.5.279 levels (75 → 83 ms +roundtrip; 466 → 425 ms iterate). Residual RSS gap tracked on the +same [#745](https://github.com/PerryTS/perry/issues/745) followup. The honest framing: **Perry's JSON pipeline is competitive with -the dynamic-typing pack but loses to typed deserialization (Rust) -and to SIMD-accelerated parsing (simdjson)**. The -`PERRY_JSON_TAPE=0` escape hatch trades the lazy-tape fast path -for direct-parser performance on iterate-heavy workloads. Closing -the gap to simdjson's parse-throughput ceiling is tracked in +the dynamic-typing pack on wall-time but loses to typed +deserialization (Rust) and to SIMD-accelerated parsing (simdjson), +and still carries a ~2.5-3× RSS overhead vs its own pre-regression +baseline**. The `PERRY_JSON_TAPE=0` escape hatch trades the lazy- +tape fast path for direct-parser performance on iterate-heavy +workloads. Closing the gap to simdjson's parse-throughput ceiling +is tracked in [`docs/json-typed-parse-plan.md`](../docs/json-typed-parse-plan.md). ### Compute microbenches (idiomatic flags) -RUNS=11 per cell. Perry numbers refreshed 2026-05-06 at v0.5.585 -(both default and `--fast-math` columns); other languages from -2026-04-25 at v0.5.249 (their numbers haven't moved — same compiler -versions, same hardware, re-run on demand if needed). Headline = -median ms. Full per-cell stats (median + p95 + σ + min + max) in +RUNS=11 per cell. All cells refreshed 2026-05-14 at v0.5.908 on an +otherwise-idle machine. Headline = median ms. Full per-cell stats +(median + p95 + σ + min + max) in [`polyglot/RESULTS_AUTO.md`](polyglot/RESULTS_AUTO.md) and the hand-curated [`polyglot/RESULTS.md`](polyglot/RESULTS.md). Lower is better. **`loop_overhead` and the other flag-aggressiveness probes @@ -222,10 +244,10 @@ compiler-flag probes. | Benchmark | Perry default | Perry --fast | Rust | C++ | Go | Swift | Java | Node | Bun | Python | |---------------------|--------------:|-------------:|------:|------:|------:|------:|------:|------:|------:|--------:| -| fibonacci | 304 | 304 | 330 | 315 | 451 | 406 | 282 | 1022 | 589 | 16054 | -| loop_data_dependent | 221 | 221 | 229 | 129 | 128 | 233 | 229 | 322 | 232 | 10750 | -| object_create | 2 | 0 | 0 | 0 | 0 | 0 | 5 | 11 | 6 | 164 | -| nested_loops | 17 | 17 | 8 | 8 | 10 | 8 | 11 | 18 | 21 | 484 | +| fibonacci | 309 | 306 | 316 | 309 | 446 | 401 | 278 | 987 | 518 | 12382 | +| loop_data_dependent | 225 | 224 | 226 | 129 | 128 | 225 | 226 | 226 | 230 | 6068 | +| object_create | 2 | 0 | 0 | 0 | 0 | 0 | 5 | 8 | 6 | 133 | +| nested_loops | 18 | 17 | 8 | 8 | 10 | 8 | 10 | 17 | 20 | 353 | **Reading the two Perry columns:** identical numbers (`fibonacci`, `loop_data_dependent`, `nested_loops`) mean the workload doesn't @@ -238,27 +260,29 @@ noise on a sub-3-ms cell. **The benchmarks where the gap is large sit in the "Optimization probes" table further down — that's the section the fast-math flag actually moves.** -`fibonacci` (median 304 ms, both modes): Perry matches the compiled -pack within 11-22 ms; Java's HotSpot JIT is ~7% faster from inlining -the recursive call. Identical default vs `--fast-math` because this -kernel is integer recursion, not FP arithmetic. - -`loop_data_dependent` (median 221 ms in both modes): the genuinely- -non-foldable f64 microbench (multiplicative carry through `sum` -plus array reads, 100M iters; LLVM cannot reorder under reassoc -and cannot vectorize past the sequential dependency — verified at -the asm level, see [`bench.rs`](polyglot/bench.rs#L122)). The -sequential dependency on `sum` is preserved across every language -on the row; the kernel is genuinely non-foldable. **Crucially, -this is the bench where `--fast-math` does NOTHING for Perry** -(221 ms either way) — sequential `sum * x[i] + x[j]` carries can't -be reordered no matter how permissive the FMF flags are. +`fibonacci` (median 309 ms in this sweep): Perry sits within a few +ms of Rust 316 / C++ 309 and well ahead of Bun 518 / Node 987; Java +HotSpot JIT hits 278. Default and `--fast-math` are within noise +(309 vs 306) because this kernel is integer recursion, not FP +arithmetic. + +`loop_data_dependent` (median 225 ms default / 224 `--fast-math`): +the genuinely-non-foldable f64 microbench (multiplicative carry +through `sum` plus array reads, 100M iters; LLVM cannot reorder +under reassoc and cannot vectorize past the sequential dependency +— verified at the asm level, see [`bench.rs`](polyglot/bench.rs#L122)). +The sequential dependency on `sum` is preserved across every +language on the row; the kernel is genuinely non-foldable. +**Crucially, this is the bench where `--fast-math` does NOTHING +for Perry** (225 ≈ 224 ms either way) — sequential `sum * x[i] + x[j]` +carries can't be reordered no matter how permissive the FMF flags are. **The kernel splits the field into two FP-contract clusters:** an -*FMA-contract pack* at ~128 ms (Go default, C++ `g++ -O3` on Apple -Clang — both fuse `sum * a + b` into a single `FMADDD` instruction -with one IEEE-754 rounding instead of two) and a *no-contract pack* -at 221-235 ms (Perry default AND `--fast-math`, Rust default `-O`, +*FMA-contract pack* at ~127-129 ms (Go default and C++ `clang -O3` +on Apple Clang — both fuse `sum * a + b` into a single `FMADDD` +instruction with one IEEE-754 rounding instead of two) and a +*no-contract pack* at 225-230 ms (Perry default + `--fast-math`, +Rust default `-O`, Swift `-O`, Java without `-XX:+UseFMA`, Bun) running scalar `FMUL` + `FADD`, two roundings, ~6-8 cycle dependency chain vs FMADDD's ~4. Why doesn't `--fast-math`'s `contract` flag put Perry in the @@ -271,12 +295,11 @@ clang's `on` default which permits intra-statement contraction `contract` adds) doesn't help here because every `sum * x[i] + x[j]` is one expression statement. Reaching the FMA pack would require `-ffp-contract=fast` at the linker step, which is a separate knob -not covered by `--fast-math`. Node's 322 ms is a JIT-warm-up -outlier (σ=63, p95=447); on quieter runs it lands in the -no-contract pack alongside Bun. **Net answer to "what does Perry -do on real FP work?":** competitive with the no-contract compiled -pack regardless of `--fast-math` mode; reaching the FMA-contract -pack needs a different lever entirely. +not covered by `--fast-math`. Node lands at 226 ms this sweep, +right with the no-contract pack alongside Bun (230). **Net answer +to "what does Perry do on real FP work?":** competitive with the +no-contract compiled pack regardless of `--fast-math` mode; +reaching the FMA-contract pack needs a different lever entirely. `object_create` (1M iters): median 2 ms default / 0 ms `--fast-math` — sub-3-ms cells where 1-tick differences swing the headline number; @@ -310,27 +333,29 @@ per-language flag-tuning sweep. | Benchmark | Perry default | Perry --fast | Rust | C++ | Go | Swift | Java | Node | Bun | Python | |---------------------|--------------:|-------------:|------:|------:|------:|------:|------:|------:|------:|--------:| -| loop_overhead | 95 | 12 | 98 | 98 | 98 | 143 | 100 | 54 | 46 | 3019 | -| math_intensive | 50 | 14 | 48 | 51 | 49 | 50 | 74 | 51 | 51 | 2238 | -| accumulate | 95 | 33 | 98 | 98 | 98 | 98 | 100 | 617 | 100 | 5048 | -| array_read | 11 | 11 | 9 | 9 | 11 | 9 | 12 | 13 | 16 | 342 | -| array_write | 4 | 3 | 7 | 3 | 9 | 2 | 7 | 9 | 6 | 401 | - -Perry default-column reading: `loop_overhead`, `math_intensive`, and -`accumulate` are all ~95-50 ms — dead-on the unflagged compiled pack -(Rust/Swift/Bun at 46-100 ms). That's the honest "Perry on TypeScript -arithmetic with bit-exact-Node semantics" number. `array_read` and -`array_write` are essentially mode-independent (memory-bound). +| loop_overhead | 97 | 12 | 97 | 96 | 96 | 96 | 97 | 53 | 41 | 1967 | +| math_intensive | 51 | 14 | 48 | 50 | 48 | 48 | 50 | 49 | 50 | 1579 | +| accumulate | 97 | 34 | 97 | 96 | 96 | 96 | 98 | 597 | 98 | 4382 | +| array_read | 11 | 11 | 9 | 9 | 10 | 9 | 11 | 14 | 16 | 236 | +| array_write | 3 | 4 | 7 | 2 | 9 | 2 | 6 | 9 | 6 | 331 | + +Perry default-column reading: `loop_overhead` 97 ms, `math_intensive` +51 ms, `accumulate` 97 ms — sitting with the unflagged compiled +pack (Rust 97 / 48 / 97, Bun 41 / 50 / 98). That's the honest +"Perry on TypeScript arithmetic with bit-exact-Node semantics" number. +`array_read` and `array_write` are essentially mode-independent +(memory-bound). Perry --fast-column reading: same kernels with reassoc + contract -permitted reach 12 / 14 / 33 ms. On `loop_overhead` and `accumulate`, -LLVM's IndVarSimplify rewrites `sum + 1.0 × N` as an integer -induction variable and the autovectorizer generates `<2 x double>` -parallel-accumulator reductions with interleave count 4. On -`math_intensive`, the harmonic-sum carry is associative under +permitted reach **12 / 14 / 34 ms** (v0.5.908 sweep) — within 1 ms +of the v0.5.585 historical fast-math numbers. On `loop_overhead` +and `accumulate`, LLVM's IndVarSimplify rewrites `sum + 1.0 × N` as +an integer induction variable and the autovectorizer generates +`<2 x double>` parallel-accumulator reductions with interleave count +4. On `math_intensive`, the harmonic-sum carry is associative under `reassoc`, allowing the same vectorize-and-reduce pattern. -The 7-8× speedup on `loop_overhead` is real, repeatable, and +The 8× speedup on `loop_overhead` is real, repeatable, and TypeScript-spec-conformant only because TypeScript's `number` semantics can't observe `reassoc contract` differences — no signalling NaNs, no fenv, no strict `-0` rules at the operator @@ -339,15 +364,16 @@ in [`docs/src/cli/fast-math.md`](../docs/src/cli/fast-math.md). The companion `loop_data_dependent` (in the headline table above) shows what Perry looks like on the same kind of kernel WHEN THE -COMPILER CAN'T FOLD even with permission: 221 ms, dead-on the -no-contract pack (Rust/Swift/Java/Bun 229-233 ms), regardless of -mode. The Go/C++-O3 FMA-contract pack at ~128 ms beats us on this -kernel because they fuse FMUL + FADD into FMADDD via clang's -`-ffp-contract=fast` (a separate knob `--fast-math` does NOT -toggle). A reader who treats the 12 ms `loop_overhead` number as -"Perry is 7× faster than C++" without reading this paragraph has -been misled by the headline; the honest comparison is the default -column, where Perry sits *with* the compiled pack, not above it. +COMPILER CAN'T FOLD even with permission: 225 ms default / 224 ms +`--fast-math`, dead-on the no-contract pack (Rust 226 / Bun 230 / +Node 226), regardless of mode. The Go / C++-O3 FMA-contract pack +at ~127-129 ms beats us on this kernel because they fuse FMUL + +FADD into FMADDD via clang's `-ffp-contract=fast` (a separate knob +`--fast-math` does NOT toggle). A reader who treats the 12 ms +`loop_overhead` number as "Perry is 8× faster than C++" without +reading this paragraph has been misled by the headline; the honest +comparison is the default column, where Perry sits *with* the +compiled pack, not above it. **Honest regressions / changes vs the v0.5.164 baseline:** @@ -382,6 +408,23 @@ column, where Perry sits *with* the compiled pack, not above it. identical between modes within noise — fast-math changed nothing observable on those workloads. +`v0.5.908` sweep delta vs v0.5.585 default (re-run on an idle machine): + +- `fibonacci` 304 → 309 ms (+5; within run-to-run noise σ=1.3). +- `loop_overhead` 95 → 97 ms (+2; within noise σ=0.9). +- `math_intensive` 50 → 51 ms (+1; within noise σ=2.0). +- `accumulate` 95 → 97 ms (+2; within noise σ=0.7). +- `loop_data_dependent` 221 → 225 ms (+4; within noise σ=1.7). +- `array_read` / `array_write` / `object_create` / `nested_loops` + within 1 ms of v0.5.585. + +**Yesterday's apparent regressions (332 / 67 / 111 / 21 ms on those +same cells at v0.5.891) were almost entirely parallel-cargo-build +contamination, not Perry-side regressions** — confirmed by this +clean re-run. The lone real recent change is the JSON polyglot +RSS regression filed as [#745](https://github.com/PerryTS/perry/issues/745) +and partially fixed in v0.5.900; see the JSON table above. + The trade-off was deliberate: gen-GC's wins on long-running and allocation-heavy workloads (`test_memory_json_churn` 115 → 91 MB in v0.5.237) outweigh the small compute-bench regressions, and @@ -634,18 +677,17 @@ the comparison is honest in both directions. ## 2. Compute microbenches — full data [`benchmarks/polyglot/`](polyglot/) — 10 implementations across 9 -benchmarks. **Perry cells in TL;DR's "Compute microbenches" and +benchmarks. **All cells in TL;DR's "Compute microbenches" and "Optimization probes" tables are RUNS=11 medians refreshed -2026-05-06 at v0.5.585**, run in BOTH `default` and `--fast-math` -modes following the v0.5.585 fast-math opt-in flip. Other languages' -cells are RUNS=11 medians from the 2026-04-25 polyglot run at -v0.5.249 — same compiler versions, same hardware; their numbers -shouldn't have moved, and a full polyglot rerun is on the -follow-up list but not blocking. See +2026-05-14 at v0.5.908** — both Perry columns (`default` and +`--fast-math`) and all peer languages re-measured together this +sweep, on an otherwise-idle machine. See [`RESULTS_AUTO.md`](polyglot/RESULTS_AUTO.md) for per-cell -distributions (median + p95 + σ + min + max) of the 2026-04-25 run. -The JSON polyglot tables in TL;DR §A and §B were rerun separately -and are fresh as of 2026-04-25 at v0.5.279. +distributions (median + p95 + σ + min + max) of the default run +plus the `--fast-math` addendum at the bottom. The JSON +polyglot tables in TL;DR §A and §B were rerun together at v0.5.908 +via `benchmarks/json_polyglot/run.sh`; full per-cell stats in +[`json_polyglot/RESULTS.md`](json_polyglot/RESULTS.md). ### Idiomatic flags table (current) @@ -762,34 +804,36 @@ stringify, peak RSS via `/usr/bin/time -l`). | v0.5.236 (C4b-δ-tune, ceiling) | 107 | 358 | trigger ceiling stops step doubling past 64 MB | | v0.5.237 (gen-gc default ON) | 102 | 372 | minor GC fires by default | | v0.5.241 (best-of-5 min) | 102 | 375 | unchanged from v0.5.237; last best-of-5 row | -| **v0.5.279 (current, RUNS=11 median)** | **102** | **382** | RUNS=11 median (p95=389, σ=3.9, [377..389]) | +| v0.5.279 (RUNS=11 median) | 102 | 382 | RUNS=11 median (p95=389, σ=3.9, [377..389]) | +| v0.5.891 (peak regression) | 269 | 306 | #745 trigger-ratchet bug — RSS +167 MB vs v0.5.279 | +| **v0.5.908 (current, RUNS=11 median)** | **283** | **338** | post-#745 partial fix (v0.5.900); RSS still ~2.8× v0.5.279 floor | Default (lazy + gen-gc), the case `bench_json_roundtrip` measures with -no env vars: **70 ms median / 85 MB peak RSS** (RUNS=11; p95=73, σ=1.1, -[69..73]). On this specific workload (parse + stringify, no -intermediate iteration), faster than every other TypeScript-input -runtime measured here (Node, Bun); slower than simdjson (C++ + SIMD, -the parse-throughput ceiling). See TL;DR §A for the full table and -the workload caveats — the lazy tape's win is workload-specific, and -this is the workload it was designed for. - -The 70 ms here matches TL;DR §A's `perry (gen-gc + lazy tape)` row -within run-to-run noise (75 ms median in §A's 11-run sample, σ=6.9). -Both numbers come from the same workload on the same v0.5.279 binary; -the 5 ms gap is the difference between two independent RUNS=11 -samples, and is well inside the σ envelope. +no env vars on this sweep: **83 ms median / 227 MB peak RSS** (RUNS=11; +p95=86, σ=1.4, [81..86]). Wall-time is back to v0.5.279 levels (was 75 ms) +and still faster than every other TypeScript-input runtime measured here +(Node 377 ms, Bun 249 ms); slower than simdjson (24 ms, C++ + SIMD +parse-throughput ceiling). See TL;DR §A for the full table and the +workload caveats — the lazy tape's win is workload-specific, and this +is the workload it was designed for. **The 85 MB → 227 MB RSS gap** +vs v0.5.279 narrowed from yesterday's 254 MB but remains real; the +v0.5.900 fix closed ~30% of the regression on roundtrip and ~50% on +parse-and-iterate. Residual gap tracked on +[#745](https://github.com/PerryTS/perry/issues/745). ### Other Perry benches (RUNS=11, M1 Max, taskpolicy -t 0 -l 0) Median + p95 + σ + min + max wall-clock ms, worst-observed peak RSS — -the same methodology used by TL;DR §A and §B. Refreshed 2026-04-25 -at v0.5.279 using the same `compute_stats` awk routine as -[`json_polyglot/run.sh`](json_polyglot/run.sh) over each suite binary -in [`benchmarks/suite/`](suite/). All rows here measure JSON, GC, or -integer/cache work — none are FP-arithmetic-sensitive, so the -v0.5.585 fast-math opt-in flip doesn't move them; rerunning is on -the followup list but the gap is below the noise floor for the -workloads listed. +the same methodology used by TL;DR §A and §B. Last full RUNS=11 +refresh was 2026-04-25 at v0.5.279 (rows below); a v0.5.908 single-run +refresh via `benchmarks/suite/run_benchmarks.sh` (factorial 107 ms, +method_calls 9 ms, closure 50 ms, binary_trees 2 ms, prime_sieve 3 ms, +mandelbrot 28 ms, matrix_multiply 28 ms — see top-level +[`README.md`](../README.md) "vs Node.js and Bun" section) is the +freshest signal. The RUNS=11 cells below are due for a re-sweep; in +the meantime, the `bench_json_roundtrip` (default) row is superseded +by TL;DR §A's `perry (gen-gc + lazy tape)` cell at 83 ms / 227 MB +peak RSS on the 2026-05-14 sweep. | Benchmark | Median (ms) | p95 (ms) | σ | Min | Max | Peak RSS (MB) | |---|---:|---:|---:|---:|---:|---:| @@ -820,19 +864,19 @@ Where Perry actually wins, and a one-line "why" per item. - **JSON validate-and-roundtrip — best in dynamic-typing pack** (parse → stringify, no intermediate iteration). Perry lands at - **75 ms** median (TL;DR §A) — faster than every other - dynamic-typing runtime in the table: Bun 259 ms, Node 394 ms, - Kotlin server JIT 453 ms. simdjson leads - the absolute time at 24 ms — that's the SIMD-accelerated C++ - reference, listed alongside nlohmann/json so the comparison is - honest in both directions. Perry's win in the dynamic-typing - cohort comes from the lazy JSON tape (v0.5.204+): parse builds - a 12-byte-per-value tape instead of materializing a tree; - stringify on an unmutated parse memcpy's the original blob — - same fast-path trick simdjson uses with `raw_json()`. See + **83 ms** median (TL;DR §A, 2026-05-14 / v0.5.908) — faster than + every other dynamic-typing runtime in the table: Bun 249 ms, + Node 377 ms, Kotlin server JIT 457 ms. simdjson leads the absolute + time at 24 ms — that's the SIMD-accelerated C++ reference, listed + alongside nlohmann/json so the comparison is honest in both + directions. Perry's win in the dynamic-typing cohort comes from + the lazy JSON tape (v0.5.204+): parse builds a 12-byte-per-value + tape instead of materializing a tree; stringify on an unmutated + parse memcpy's the original blob — same fast-path trick simdjson + uses with `raw_json()`. See [`json-typed-parse-plan.md`](../docs/json-typed-parse-plan.md). On parse-and-iterate (TL;DR §B), Perry doesn't lead — simdjson - at 24 ms and Rust serde_json at 183 ms both beat Perry's 466 ms, + at 24 ms and Rust serde_json at 182 ms both beat Perry's 425 ms, and Perry's lazy tape pays overhead it can't amortize when every element is touched. - **Release-mode defaults expose LLVM optimizations that strict-IEEE @@ -848,9 +892,9 @@ Where Perry actually wins, and a one-line "why" per item. pipeline. On [`loop_data_dependent`](polyglot/bench.rs#L122) — the genuinely-non-foldable f64 kernel where the compiler *can't* fold - the loop body away — Perry lands at **235 ms median**, dead in - the no-contract compiled-pack cluster (Rust 229, Swift 233, - Java 229, Bun 232; the FMA-contract pack of Go 128 / C++ `-O3` + the loop body away — Perry lands at **225 ms median**, dead in + the no-contract compiled-pack cluster (Rust 226, Bun 230, Node 226, + Swift 225, Java 226; the FMA-contract pack of Go 128 / C++ `-O3` Apple Clang 129 wins this kernel by fusing FMUL+FADD into FMADDD, which LLVM matches under `-ffp-contract=fast`). The larger gaps Perry shows on `loop_overhead` / `math_intensive` / `accumulate` diff --git a/benchmarks/honest_bench/REPORT.md b/benchmarks/honest_bench/REPORT.md index 0f36b0a873..887d0ab125 100644 --- a/benchmarks/honest_bench/REPORT.md +++ b/benchmarks/honest_bench/REPORT.md @@ -1,21 +1,23 @@ # Perry vs Rust vs Zig — honest benchmark results -Numbers are measured against Perry v0.5.495 on five implementations: Rust, Zig, Perry, Node.js, Bun. All three workloads complete on all five implementations — every correctness and scaling bug the bench originally surfaced (`#38`–`#53`, `#62`–`#65`) has landed in Perry mainline. Data tables below are auto-regenerated from `results/results.json`; the bottom-line summary is hand-written and tracks the most recent sweep. +Numbers are measured against Perry v0.5.908 on five implementations: Rust, Zig, Perry, Node.js, Bun. All three workloads complete on all five implementations and every measured run's output matches the Bun reference byte-for-byte (300/300 rows; correctness gate from `#441`). The auto-generated tables below come straight from `results/results.json`; the bottom-line summary tracks the most recent sweep. ## Bottom line -- **Compute (image convolution, tight loop, minimal heap):** Zig 247 ms. - **Perry 377 ms (1.52× Zig) — still ahead of Rust's 414 ms**, 2.5× faster - than Bun, 3.4× faster than Node. The v0.5.495 static-trip-count for-loop - unroll + i32 init/shadow path landings closed most of the previous gap - (~470 ms → 377 ms post-unroll). -- **Allocation-heavy (JSON pipeline, 100 records):** Rust 42 ms, Zig 43 ms, - **Perry 47 ms (1.10× the fastest) — ahead of Bun's 65 ms and Node's 174 ms**, - at 3 MB RSS vs Bun's 11 MB and Node's 36 MB. -- **JSON at scale (500k records, 108 MB):** Rust 738 ms, Bun 739 ms, Zig - 982 ms, Node 1191 ms, **Perry 1188 ms**. Perry matches Node and trails - Rust/Bun by ~1.6× — but completes; as recently as v0.5.68 this workload - hung >13 min CPU without finishing (`#65`, now closed). +- **Compute (image convolution, tight loop, minimal heap):** Zig 245 ms. + **Perry 354 ms (1.44× Zig) — ahead of Rust's 392 ms**, 2.6× faster + than Bun (915 ms), 3.4× faster than Node (1207 ms). Slight improvement + vs yesterday's v0.5.891 (365 → 354 ms); the bulk of the original arc + (2261 ms → ~377 ms, ~6×) landed during the v0.5.30–v0.5.495 perf sprint. +- **Allocation-heavy (JSON pipeline, 100 records):** Zig 35 ms, Rust 34 ms, + **Perry 39 ms (1.15× the fastest) — ahead of Bun's 51 ms and Node's 144 ms**, + at ~3 MB RSS vs Bun's 11 MB and Node's 36 MB. Stable vs v0.5.891. +- **JSON at scale (500k records, 108 MB):** Rust 608 ms, Bun 650 ms, Zig + 867 ms, Node 966 ms, **Perry 1098 ms**. Perry trails Rust/Bun by ~1.7×, + beats Node by 9%, and uses 731 MB peak RSS. The workload completes + reliably — as recently as v0.5.68 this hung >13 min CPU without + finishing (`#65`, now closed). Improved from v0.5.891's 1155 ms (-57 ms) + thanks in part to the v0.5.900 GC fix for #745. - **Binary size:** Zig smallest (~230 KB), Rust next (~300–380 KB), Perry (~550–700 KB, including GC + Node-compat shims). Node/Bun don't have standalone binaries — they require their runtime installed separately. @@ -37,10 +39,10 @@ Charts: [image convolution](charts/image_convolution.png), | OS | macOS 26.4 (Darwin) | | Rust | `rustc 1.94.1 (e408947bf 2026-03-25)` | | Zig | `0.15.2` | -| Perry | `perry 0.5.495` | -| Python | `Python 3.14.3` | -| Runs | 2 warmup + 5 measured, median reported | -| Generated | 2026-05-04T08:54:24.219226+00:00 | +| Perry | `perry 0.5.908` | +| Python | `Python 3.14.4` | +| Runs | 5 warmup + 20 measured, median reported | +| Generated | 2026-05-14T07:44:59.755910+00:00 | ## 3. Image convolution (5×5 Gaussian, 3840×2160 RGB) @@ -48,13 +50,13 @@ _In-memory input + output checksum (no PPM I/O) — see the workload README for | Language | Wall median (ms) | Wall σ | Peak RSS | Binary size | Source LoC | Runs OK | |---|---:|---:|---:|---:|---:|---:| -| rust | 414.2 | 34.8 | 48.5 MB | 295.5 KB | 112 | 5/5 | -| zig | 247.4 | 1.3 | 48.5 MB | 226.9 KB | 113 | 5/5 | -| perry | 376.6 | 4.9 | 49.9 MB | 717.6 KB | 92 | 5/5 | -| node | 1,287.8 | 41.8 | 86.0 MB | — | 86 | 5/5 | -| bun | 948.9 | 27.3 | 59.9 MB | — | 86 | 5/5 | +| rust | 392.1 | 3.8 | 48.5 MB | 295.5 KB | 112 | 20/20 | +| zig | 245.4 | 6.2 | 48.5 MB | 227.0 KB | 113 | 20/20 | +| perry | 354.0 | 2.3 | 49.9 MB | 966.6 KB | 92 | 20/20 | +| node | 1,206.6 | 22.0 | 86.5 MB | — | 86 | 20/20 | +| bun | 915.4 | 35.2 | 60.0 MB | — | 86 | 20/20 | -_Ratios vs fastest: rust = 1.67×, zig = 1.00×, perry = 1.52×, node = 5.20×, bun = 3.84×_ +_Ratios vs fastest: rust = 1.60×, zig = 1.00×, perry = 1.44×, node = 4.92×, bun = 3.73×_ ## 1a. JSON pipeline — small fixture (100 records, 21 KB) @@ -62,27 +64,27 @@ _All three languages produce byte-identical output at this scale (hash `7fc66fa8 | Language | Wall median (ms) | Wall σ | Peak RSS | Binary size | Source LoC | Runs OK | |---|---:|---:|---:|---:|---:|---:| -| rust | 42.3 | 5.3 | 1.2 MB | 376.3 KB | 99 | 5/5 | -| zig | 42.5 | 6.6 | 1.5 MB | 309.0 KB | 112 | 5/5 | -| perry | 46.6 | 5.0 | 3.1 MB | 816.4 KB | 52 | 5/5 | -| node | 174.0 | 18.9 | 36.1 MB | — | 40 | 5/5 | -| bun | 65.4 | 5.7 | 10.7 MB | — | 40 | 5/5 | +| rust | 34.1 | 1.1 | 1.2 MB | 376.3 KB | 99 | 20/20 | +| zig | 34.5 | 1.1 | 1.5 MB | 309.1 KB | 112 | 20/20 | +| perry | 39.2 | 1.2 | 3.5 MB | 1.0 MB | 52 | 20/20 | +| node | 143.6 | 1.8 | 36.1 MB | — | 40 | 20/20 | +| bun | 51.1 | 1.4 | 10.6 MB | — | 40 | 20/20 | -_Ratios vs fastest: rust = 1.00×, zig = 1.01×, perry = 1.10×, node = 4.11×, bun = 1.55×_ +_Ratios vs fastest: rust = 1.00×, zig = 1.01×, perry = 1.15×, node = 4.21×, bun = 1.50×_ ## 1b. JSON pipeline — full fixture (500k records, 108 MB) -_All five implementations complete this workload against the same 108 MB fixture and produce the same hash `b7e8a588`. Perry completes in ~1.6 s, ~2.7× the leader (Rust / Bun); as recently as v0.5.68 this workload hung >13 minutes without finishing (`#65`, now closed)._ +_All five implementations complete this workload against the same 108 MB fixture and produce the same hash `b7e8a588`. Perry completes in ~1.1 s, ~1.8× the leader (Rust); as recently as v0.5.68 this workload hung >13 minutes without finishing (`#65`, now closed)._ | Language | Wall median (ms) | Wall σ | Peak RSS | Binary size | Source LoC | Runs OK | |---|---:|---:|---:|---:|---:|---:| -| rust | 738.5 | 73.8 | 432.0 MB | 376.3 KB | 99 | 5/5 | -| zig | 981.9 | 19.8 | 576.7 MB | 309.0 KB | 112 | 5/5 | -| perry | 1,188.1 | 36.9 | 720.3 MB | 816.4 KB | 52 | 5/5 | -| node | 1,191.3 | 125.7 | 880.2 MB | — | 40 | 5/5 | -| bun | 739.1 | 19.5 | 593.0 MB | — | 40 | 5/5 | +| rust | 608.3 | 13.0 | 430.6 MB | 376.3 KB | 99 | 20/20 | +| zig | 867.4 | 19.4 | 576.8 MB | 309.1 KB | 112 | 20/20 | +| perry | 1,098.4 | 9.4 | 731.0 MB | 1.0 MB | 52 | 20/20 | +| node | 966.3 | 9.8 | 880.0 MB | — | 40 | 20/20 | +| bun | 649.9 | 14.7 | 593.7 MB | — | 40 | 20/20 | -_Ratios vs fastest: rust = 1.00×, zig = 1.33×, perry = 1.61×, node = 1.61×, bun = 1.00×_ +_Ratios vs fastest: rust = 1.00×, zig = 1.43×, perry = 1.81×, node = 1.59×, bun = 1.07×_ ## Honest findings — Perry gaps surfaced by this benchmark diff --git a/benchmarks/honest_bench/charts/image_convolution.png b/benchmarks/honest_bench/charts/image_convolution.png index 4a65d24ee0919c1701e6dece72f2b03903f67cf0..06ed57bf2337f15a7a354148fc301d2d7252e9fb 100644 GIT binary patch literal 54947 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 T6?IMI4=5i#btv(`xtsq1IYCuR diff --git a/benchmarks/honest_bench/charts/json_pipeline_full.png b/benchmarks/honest_bench/charts/json_pipeline_full.png index 9d0e998a91dcb4510dac1cfd42ab9ad03dc7eeb7..7d24ec203913d869c411a4b140cff2ace69b89d1 100644 GIT binary patch literal 55804 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≠~c=>42;Hs^t7*ECoKoipWYzR+Nu^je3;-< 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 J@^;gU{{=pASV8~* literal 57015 zcmeFZcT`hd_%#?nKu{17M4Dhh=?K!KBTeZ&)PQ1;-XydT`fI0%6aneI29OR3U;(9w z)JR8=8X)ulq0Gtq{$^&a`ES;mZ~pr3T4==N=H7G9d7l03y`S^SP+yCIo`W6&fiOIL zpl%F-P``vgC{@nVfZyEy5itY)lJnKD@HO#t^!0z_1Bd86^7V4_^mTK7%ClaK8(Y4)U-aO+^y&Ea@v-f8=G~`1vAy@U8>T(xKDbt-G&+Xbq4B#R7>R>mrA!L& z?d0RS{zA>ve=i{rl`&qG^Z)aYi?1Q#|MOCvpYrSfykyEg%S83xYn7<$|KGnk%y;gm zJfTK6MPf8JR>|d0mgOf$4`hKs=2iGXh9YvpCq1r8*tTg1Q!(F_sDs!0@oR@2w_Vm3 z?2;nx@VvRN%AvDh4E1?+XL-;Z8yqNPloQ1*@AtOw3?xiaCF~0LlV0#Seels%x7glH zkVI~0_GUxeU}W&>QDc?;IT>;wVhz}&rk>y zw!;RS7aQ~8M?V#cSXSSJsj{d0rhj_c*Kr_wHS}onj6x9a0?|gd5J|wuj1;=}=V*)+ z=y3|cS{mkiQU*n_`;R$gy|TDvy?B2XlG6RBs!Gw=F?u#pw??1&YC*G--y46v(3xs{ znCpxkuYB~S%%bYC-{~*}@qV_^;{Ey`H;$7QLxb zBA!z%=2{SB8FwHZ5K6es|-={Ll1p_b-aX2?yoVqh~o+ z(TrXJnPRBqPK{RDs&c~d)iasZ@NP#wourzPa_ezxPYhfsQ)~>eD=!nY<3yT^Ro+*m zfbd2?(JPe)tHB7h(M~H`iJbjPSMOk3Vk%H-(^#FZ5I7KWxO|&*LL%5cPouP_H$F4o z8rq6j{oQX~X7T5z(4F8Pe96BXpDnsA{!Ev4ACvTV!BwR9e!Mqmdo>L_uZ9_o){x`R z3;D*CHsSAbG~QUrni#5&zuGtPf~po7vTQ`ZqV&C?72|u_y7Bp3xmB%8o%^_SnyhyY z=6G*hw83u_p8QYCx~>1@JY!P;#V2q}V@V>`t3PgM)_`IAjk60~^SH!5{i#pMwe|F* z`P{5v7-yM3VXDq~ut0sXuKF>8>GAR5u4rW$v8dV+T5dJ3&x6`|hapZOlcZdCY(E+0 zY98E8t+ka4^IjPe7_W6r#%y&7t;-)z`cKz#dbad4yB=)K*CB}>{)XZO-Mh%R4}F_p z$mcvr+kMLZw^0>Sp{Jpk1F)hxUZPd^btz7qyW}t|P+o!TXi&zbo6R zlM)dM&I32uSj>5?Mq%^{onOZTq4u-Wp{KQ8n?oiBqp`{-SDtD*TbX#-jTc{!=wx1FS81oR)T3XoPk`wCvzz`_0Z zSZ?UJwN^i!vGmrT`eWiSr_HU~aS^|!n&^(X@S7{dP9#@QnMt8O!$I0$uGR&j<*+9! z1oFW4%u5Q$St_tZ{o4Or*LdAvpD6KyO28}oyd-svN7HhF6ApSnM}1yW4>k(3ZT3Ti zi^WECb#)!Ce(Ia>p%%ItFcW^IezByq!pAZ#HRts6IkB7DxzzD5*tka8S-B-QT$J$7 zvUD}LnT!@3yf$R*uK0w(td_o1`#Hb zKz;6V12JJrOs=iK_`+uPTVGp)on!6~y;FG)FC{k$&vit90+Um|3z6t7Bxk?5GicDv z%pd+qAmJLiZKXd~YZ56Xp3qoIJWTV%vR5BPGV1?Km&c)!JR0Yd)F)qLlwQ1{X#t|f zWZ*I5w>lAe-cCQrB?#oEGC7(@QNTsCzrAM7Jwq|8X6ZP^SRcVql_>4>yE0q(&e0(r zJ&tZY;c$3$23@xRW-Oulok>prN6PD6jAnir+E1P2TC4LC6}fQ;2Uq$+VJYgNbF6}Y zSMJya&L@gOm^t0wRPVEVH8jtx)9Ra_X^)&U>z1xtd$laie>P_8z4{9OLhCej8AsuiZb)M5x ziGwert8)m=1SROK$~?XA0MdZHsAP^ymqJaE22;Niyds_`YC8ruclA@_A2Ubmm%HGx zI|DlA^&YmwlmQ<_^H^-CDW`3_KIU{+F^dp6qvBjd=vG1PR+_-*=-qhu(ZF^FJlR6PZyT-P6F8YGsbC7?9{V96SwN+P3X&b5IyGDh)p9iIhG(&zB&vXC|jYuyoH{xsEi|S5ftZD}eOcxqh65v+KRdYBQvIarjrXz*!Lc z%}CRyCyN|u%XPa~p`(<;H=)mZW`td-BRreeq={3;Oy((NUHoR6W!l0^pDtf=Pn(LR zqB&m~Nqa%Fl)J*1?(k!2a5$sN@-~`4f#Mk|h4!J8qjDs8n=%-^Ksxah-6#pGuY>Y2 z?6Aiyw?X;o&4bY1_q#N|Ci{!*Q`Q^(w`3fGFgx;y)lXfJ-+`TBKv`)!HVm#H_m>Me;j^H~Xz^k-^IP*0^V@ z;us<`aDm<5ve-C3m?wBcHKAJxfDpUQ*>7qd2C~~z&&1Q^e3xcmFYJS&F*v?kcA>|$ zr+zyVK~4UI^(68->cIa5AfY^$7)^wM+?muc5AROe6&sva4BFXfl?JzjipYqZAriA-`%`;Z69g8lb%06*@Sqrhm{4X*>mgf5A1XZsh7=8 z$h^#}K3T>SHVuH#EDEz9a+)Y$(os(Qddc8xgFYIDnUK>OrvQ$F2ixw%ZtM?>`idoe-CE(;gOm$irv>HJmyt{F#=OHRr4C`{BhpH(h zU1vsy9!W_VzZZd530jM?pt&L?4ClJ7p}j4Sa|Qar<#<{8!7#YLId3HrQD=K@nfy2d z|K%ds%poqIBb_Z-YdhE@)oUkNZaerJ(=#^X<^*?J33M7Ph}KJy_y)g#OhA>vyDUuW zrj8D_MH>0vSjS3jAWX~`-y0|`pPcq<@n~4uu_ty(kL=cP%S;70By^k6*nX@hOxOC2klKv}fqI_GPC- z4D1}-N>B|NI|uN8{a51xQrtDQqv-1zqs_|4JMS@vE2X0HmVBlhQZ6j>L0#Apl3JgM z*X63}$X!{}QcJ?Sna=X_2W^^RLArt>Hx4IgN1V(%>QXgUkgArWunvf%$s{GJ!wKZhM6s@hF5jh=j@U!&jw39<)J20&Z6`zfK{2y{Wpy6Ojjukc z1sCzDVE3qq>otrMJ}ua6UK_T{ogaT)Ff+Gj^Us$Tx1Bi?zm@5FC)S)5elwdW{qVtF zC3XI?JVy#C5)M+(e)~Q2> ziyk1nSQUn9kb1W-?10JC&`QtsExEoTmGhfMyXM+b=`~}YBum3Ux?y!jR$fDlPQT<~ z6o;gfVOclp2l}#2Jhl4$;T%@#m6owQJJfC>Uoyy1jmw+jdR69?-_MD@a`ABqYK<5c zPc$`jrqPpu-Z3)i8>AYJH?xH35ulNGsK1#~SrFvW(q$RM86Wuyn5qzjFZeJL}ocw*U0^b`j9!lojUkN*1#D%T2=9T09q&B~g^n)uMN-Xon9 z8cg*ni0jbf*Y;p*=xH22fKR}bC_A*B+m=PV$GCv1FcZCDdIvgxrRBL}drLg0;IoSs z(l@J2M{ZR>JdAJt#avzqH2rann``K)9WA}7vHCRUA#8wH#WBrSqZy=2dy6vibCAc= zo)3T4we$?OCaG9-^aYo9bxvon(gYgSM8>nTzpvA)@Fo$<))Le)n44P-sYv2 zdprwg6?!k(=mAxgqPAeE>|ZN6DWPPN_gnQ!7J4I9&|?j+>$p89cTKeMZ+u)groaTY zF@4UaSQA}@b@AGB;zjqT)JZ9&B)Ir3O1bHX(yPP#ClL>^+;AyDBy2Yz5y4?Gh;v=I zV)8}k9%3co^fa8IF5bsBw)!<9OpRgC)D>FWMitrhiq!;VPT0jgyEup^z%B8L6>T{Y z2$+Z`Y9#Rw7mr*UZ)!W!$9()|bsnNkJM-G`ZN|LRFR;s@x|VHK!#Tr?zt6eR(iR|i z^)k)irGoYqk%G~jGJc4+mpI$>VsN4?7~GEHrA(sL21%E;dgrQ1v?KhYkhQhtmnmWx zN08uMD1HgCC#rLv+jn5QQ0}|j%L1x%aw^4r-uES{YeT$DGzeK?)e|omI2SUu#T`1L zT0&;@5Jt+GddM0G} z&;5-N5!)u;mXXleSGV2TBdA49d`7F`Cp55!7q6U+UX~D(mjjQ2;;vNawg*)2k3x2Y zQTyYrn|g0QQ1XNiPEd6V1`PHkZZ5$UZ*|s{P?#4z4|w>8dgy&*H4`g~*)PGkR0(Z2 zJ#MPIm6+X2LAG$i=k)P{0rQFeMqZMQlyAi`Vl6m3;_{?tFf0_Upb4&E4#O~oF!j4u z*O$VmxunRk@{GgUzRy~@uFpl6SUzyMiyta*SxUm>&cL|`g8b!FigJ}qcCfjYHlnuA z08)=)cE1HjIi0)p{YGrVOeKd*35z~2H37pcCD?ff6ooQhZVH%c->=X15db659UrN^ zU$oPQB2GT-QzDhQCUIE&yuIJ}i)gP6M^Hh+miWafAS!ZM_OGCJ<|YW%q3wXtDEh0V zA+9zFA}jEPj-*!{4@^=CO?Xja=R0-9G$~Vtc6DZM{MR zp{cr(7&n{o;`c7%oi8X=HybfgA6u4Jezd2h^4PpLhx51Sc70eG7Hr0K&+cenIs=ob zixiwf>`q-sq$`~%Sh*o|r!4D<4{j-Dc^CTYjuKiGFeej-FfaKH`v*2H_^;+oDw%f) z5Y79_g;R%{2aIPmXp6`=gZP0(*nGw)ADVD5(fI5svFU3vTV9MvSQ-mmAUY5qWGbkh zz{mZXvJ2M8&aM8iWPP%^nd&-yLut)B%9{4tpYMYzJG(#ZNz6LXGYNTRGD~HHL2)`- zp@hWg7u}4w?bTFG`5g8<8~RB~x=Ydo^^h9#xa1;7SCLV!jrj}!bno*m$3dk#+afG( z(&5lF35v~w!uQDfQfDHp*TPdUq+zRI=LN~{mJDH&2Di8CB8C4{=`vgrhcl~d=6`wl zirbcp9ddBVq1mHIZZrdrZk^KGggQf{lyzNbo@%$8z?Nx;S*Ds0t}PXpt^~&xt7g`7 zA6|X(Ub7}e`MCdat1{90SC*I-b4uVdf4^nr3~iliOA2A0~&HNXU_ zT-lJYcDQuK{%o0DX_>It7hQ^ynd1F$Q#)hCTa2ScYQe`iU3sbQZI_-Py-H>s)pv&B ziqyATodo9G!+M)l0K88_R+9wx$F zCS6);M4M<8?cjZO!1A?T#>%+fY+OR@M!EcA-{)9DQ9~fc7bqS>AfLlrBub_>5(G?g zhLg=M@k=c=fl}jmG)~HO`YT!R1;lB?ScT`1Ew<(Jo0<*}VUw{bIy zL%rA|ufPWl&`p_*hC2pCQvP86fp(tD2s5 zf-x_i-Q{y0dQ~EtYWYxbIlIkH`%K)d&hC4yw^#n0pcfy6^AW^@b`D(|*}h-! z4^pB%e}zdz$h`01^FQZo4J}lW+~1c53k_=UrOwGq#}ysXupd;47fRGht?KD-5?4p> zcI`?=hk)8-{S-ip;DomUa26r{GB+)1uHBSZZ=hQ$`Ru+~*`cQ=Mk`vkp)^&DD@#(X zfUTU|z7)(uX5)~VrH%m`#5WQ}QeRa1>Y;tIcbL#?drk#yR2LLxLSv|Oq?eEy1U2rw zU+zJKA5p(ZP|ME4k9Y+Ad1hCdFztjT(zSxH(v@sl+;4N~2I%ubkIAN2^cF~3>iGAm zYk{=vJBQScnx#=u$%u+RH!p_AXwx^?LElCfc4We2`Jxd4fnhup)ng3uET+rSZ;z&Z ze?MhU@Y{7j4tw<)L@s}-i2M+arURuLpAty;C4h`5DT*P)$ggjRA!ovACnN~I{Tgfs zD1&+~ahAb1v5n|GUcJ($4;F0|FCHMSCb{UbfVoAn+ayDne|k zljU^)9NG%Zz^BLz=B#=s#rvz{uS0Eym6;l=luV$w&L&kw#6A{N$Zh_-gCa~quv1)1BiPhtBl z`oX*FC+~^2`Gk?Sc|bJA_}QYSS2mrGds6N;FT%#x73*=f{^1k&|`QmX$I?kC)zMWnf$0OVDoYEkNoAiSBO4E zq6HwaMT!$d3MDS34wUuC>ZL&)uETqaGm5HvnAOu2$Y^SKDtNZj8&{93%i0{vRAwey9q<=PS53>UhT%vdYeNDpW_ouFY0`5_Y&~rx2D=R|Cej^^KFw_GdnsX@m|eVe z5wP)SQmC6{T#&(1qcKfowaadxQO72bO>E4|tG6!QPbux%8zNZ{q%a_=L*M5<%B&7E zD^bbxmO>7a%x}Xd$i!gp{a+;64@yugwC6OoB0L?-27bFPF^I6-cuNVl>`S@Zsi-U{ z<8`#}P5fBI60vT5_w0_Pj_~lwFv)ycN8>e%H^Bi;jVGxP2s3V0u@ZlG1BafPqeq(% zcpI8(3FF~1QE_zI)QjFU8UN8autew@W9sw}&oJ+kF+42_rXu!Wwj2a){kUzbSv9rT zwKr0B5w0l2sbJbsvm)=h_fp%t#(jK*{<84WR4!mlpG~(1g*y91V&8u$wu$E`2)d2w zIP5j)^-7fOe>xzPeo^fP%zdY@@afN!&Omr`1S+%BpCn2L94;4%4DescR|%s; zP9@Cc8S~=KS>3Inh%=;jly({V&h2EV=bR^+xM#F|pBj&djd|L zGR0!^a*jSlz#tE&nJYe#qA;zzQmjLJUh3TaQNo!Q6p#lf%fT5X3dqX`sqqR=zB9=% zz~=d!K2t&d%z;Yu+581Y9;J^XY0O4LvSxY@Z|kN0)$WD>%|nY!YqAt@ye%Ou4}aNp zVJuz01>sdF^7Hmd#HfCDagF7=7hiZDXn5+cK=3vG4LESy8`p+A%G0i~4T zPZlRtQga`2|Bqs+&MyH3fPW9(`{a_~-y`g-2KcuBj_WMsjQsEM(vYkc{CoWGH$(pS zXh8m-b0hB@a&NT?$kUdf>X@xnCh$dmTfMMlwfe-q4(W1G&lpZ+e*kHWevf@I`-$uOS)i-Gls(@A=3dwk z0_57}gM~DAps)G0Q?prs#J2|EMJ1qe3s(FT4wrI8zZbSH+iC_0Lk7%8B(b58vpRPj zdny6j`CEg{Hen;t1YKqW$kS&%*+iI3k&nlxbnhV~6U^Ihksu18UR3BnAH+xMk~lyZxLtMme4 zQi)jaHd=j=o$E67bE$=!bbP1*Yy_-zC&_d+vEyZ)kLZJj??>h|arRI9GHLD3(D) zM)20d=D+be6Nf?T0Kj;VjRX;Rt`k5yuGayu=#sCKT*r0K#{#$m%FRm6>%9Jaj;m+2 zNLyX%&-I%|5gT#FfXYSnd=M8nylU`z7mpivub*7FS~?XOo*CPAskV`V_jnsSh*HYb z%TO3~87le{()@;1XraSh-hch=X44^Rb-J}xh#_m*>R8h?xYoWsA`TB2<+11I*&hQS z;Wx*1d~2n?3aH9;fZ#skNpeMF9D&yYp~?Zz>ENq;`VElMt03DV=IEmPYuo^yKbdw^ zlsEOJURqyP7HmS{yp8X$!BVpBvhJH|-hC0GOYhpHr-L5E+m zX6Ql~r~4of4%S3l|2*e>9J~rpE7rOYQ2v`iCsG;oS0ibO7mcE4$r{}J*kwhTs_15Q zhx^fJ(bgj$;t?KEWL;lzOb9*w1cWwqOK5#5LL-!_QzjhF!MuI&5`T{YcDn$70xou4 zaoH9+SFIXJGYTq@w4zRC{m<@pD`YWW2;DM(sS85af)pJ6!hzX@VfO3lG);)u@@5Q= z@{}SB<)@Rt|EKO4=;@VSHKC^=^|85xD~kT&Yj>mYBqs3<3Ka$0(BoYtlsj;)NOo=c zt&KI#%jsn*DR#lto}c&bwnMH-omK;#a!f=Bu)%0xLcorDH230K0-xD|DL1*r>Cw>c z58NF5^`FR=0!u(o&DAR00v~BYg9)@Q$ETgJG3njOeKJU9`|S+I^ASnHmdx{qQ(NGs z4yvF0m?gVH&<>q3SbA2$eV##{(4#-(7=r@Of0ul7IIuA6fW>8kET)`ov?XgM%?engKM^+NW+q? z34j~L9e^k|AKEe{u>TAon9vr&4r#r)FWR{Rd*~u_Yr8`dgqN*j5J#?siUDnBaikF} zf0WFm?|V+3z`2G;U!H3;|0IiX-KkQgXw7Jj_4)=7P_a6qjbF>r(3 zE8U3W{gV^w7`ELsE|<3>&HkR#AZnpNh9H`iS@a(>jue}8+7>J>0&~!7zvkAH!%`$; zi+EN?SCd|}d`%fxsMymJlGxw56&yMfxf-PJYsZ0eY6RiD&K*l4v`$BJN_x0YV=Mlwx3{*?NyBaz#KWLqA(w$2s*Ku2meT0llipl^))sK59vZdU8 zx_1nM)wN7$bhIz$_F`Y`?t!xJQXFz3yJLn!K8Wn%sr$l-Ts|&ZH0*0lV&ImO9CPPU z2>7M!C~8$x#7SIMELiMEGU#V0EZf-;3m0vYmpx~&ZNL?koY$vi)8{-Rci0ovRMCNL zDg(jEL%5ijKnxt*=H|!7@_mdN#14TfXI&JBoEX17{M0Tpo9r0r-m!Vku}CXsuyW!K z99h92MERlXVg8t81Tg&AF32NROye{CJ)0w24KB@rWlapNUuqoQTR9k6lncmw1cKN@ zta9E};D4B11IfnUZYNhWdP@w%%#WOHPKKrScA#R;wOM>ERN;jit#Wt~Itnt>B(MCw z)>d0MmB*d@U69DquT#warg03PrDt;Gy(qgeaG{8ZRAGhZaUXft<5OY;=#jZjXTmOvpCKt!?l8nOQM(s)J=1`)}%QoiE~?U zpyZkpf>wNN)+J~uUPY}_K$g>p*75^VDSc;{I008#(IOezN); zq0KSAEI~a<8M?@lutOOgUW0+c0`pHHf%Z&Vw2c`1BFeGstI7IgBG3m36w~e4l!#7K z4rQcj?#z?uSC?)-KYzwGO)_RHA}PD$i`;O9?Krh}Bm`o|lBoZ?tA-RX~%qi6p~FsvGTM7qJ*D7YsV(7WPM`KKA+19VYyN%WS$gJX;hIqTxZ0F!xKuEhrYu~kJ zNTYtobB5)kI}fMlM&>V*U=-kPJW!a+;quUo`l+DqR;mk-?^jx;U(@mg-x-5<#_|wP zl>p5((Q1RIxqa@8@vUP2Fi9+jwA)fe?)1rrkhEIGDP8I4H4vyu7qIb&ifsw?mo+%A}hta6^75+{sfo&&@Zs zBL>XAS~^7KM6)t=GS!9Ow{NO^jO)`1&KPW<{5p2~cQst62ER*~R{ran38VVzj1kM% zeIjDA;C*Ke8F2UV94D`S*Gaj)+{??W&zC# z&F#8PH1soa$22abWNSf#`7K#`qavC79SYQ!4VVkpU0j^Rl;;Nn2ShHBK6 zNUL{=&{$|KE~0qE4De?*<>JFDgU5jOUKw#dw)SY`8$*;p(d+tY((c;790rgkwKWLk zl0S>XO4}}Z-*#Zbb7tvH_J?jx%~aF0n+L08@X?NK{EyTWj6pTYQGLVwK65? zAxIIELHP0!;L0OycJhF567mc&1A(xs;VNu%MFy{+L8h!ghjqA?xC$LACd6>dcgQ+k zjJAv@PAcfQOSV2bXrgZwcBoDfidQ^oOfFDFmjb})01|g{DQ)Sd+T*WMnkFdIVNr&> zAS_3#Q(2C8817>iQdDwbljd?7q?3I2o;t4V1{NMx#w{K65HN<_&TKO`dC7PN%Ab<{7JwDZC{hSBXbuAZAoFt(34F2Y+3>7yahYw@6E? zXfyZblcOs?2ZHRhGynMjvs=?ylGm?|ymY;aR3Fq*^6euRI`Bt4pW6D})!$WLP<}h? zXLl8rgEq7K-eH?}t%|gC@2qtfkL=HWd*cq?cP-N{N{pP-dR;$espf?2Th)84VUJkL z26?}qV{%Oi`LzR$p!#}v5z5UxTHPf0`<}k6{kz*w`QA2msp&ns&ZYn zpD5+GktZT|?2Fo6e2gMlrQkX-i+n?HZ$&W|{cMxq3^r;}4F-Y7D{srwUqqdGDHXRe zRBTd4_36V@=~#?m3&d?^F8Ym<80^`56_>bdNENKmP+oI$UaIZvgg8SU@e@t(Si2c- z25=@k;SxU%3Fu}GJAZ;Qzgrpg))E$S0LSI6gA>x7D5Czp)3Q;yPb)P1QB+`-BlnxM zxlx$xkcCEX0OB?N;4C9kr?lg1{8roAMu#%Ja0iPl8u)P%5LAJ*iw-^n46&)|6oB{H z3ru~$7D?SLCH=5MJiOkWe(CwF)URRW1N1)}@4g|p2~|QWTq{+#iHkR|ea>$2&yKEe zVnQw`Y=rS8gY2&*zt8lOWIRQ>R)Lej##e`yc9s^T{n$(e=Ae5|sJui5L!x1YGc?E_ zjeRqy1s2+~9}*N#5X9ei2HYY;v1uVpApEoOHOt0@eAt;Q z#tU3hu}oiqmEu>vmqc`*%6t+E{>Bpa7GG`O6}CaMn;nxtYy4ueVQFat_&l9|Xrw>A z#LTO|zNnENIt*8ke#joxscE^@)zGi){Y?m0qn zL_8SC4EcX;-nmj$vxn~bJr){s6CWaiGG^FKe_%u&{=qPc_wSpsmvi9oDpl1vtiqS0 zqvJLfCAnZk;9|dxSBi{($;`~lh(i^B)$TeGA)P&kyeja(VQ< zDaefGmY0U%Hm9D-S(Ojm%BHaf1RgslX$>VCkIUGfgfH}E5-4v_(K6P6l&jp{S_s_bKJ(Np zS4L_GAa2P&5hxy7IKC>_HdzWqOO7)Vb`O9(`#7I1BCwV4s&{V<)ZOv|cgnmABrZzn zVF2t;vT1RD<1C!x{jw{V+yju<@}>_FKUa18@AkV4el_WdOFqUvcG`d;<_toqVV={C zK7E;YJl?R!PATS)dF}Y2^0FS}b42w$GZXhO&lx=0cs^b$J3R&X^`sioKKeyaEqf+C z;zzr3M$Y;8goWXxHzL*&wft)4krRM?h;f#sFvY4Th~yDAJ`8T)ML^7`^4G0mQl`P5+?bL%3psDXoHP5Vd?s-U@68{W`E*+$6grQ7` zYoA0GfSw#Enn{FrBzPO~ZUJcJ?a%tIQs&I=lyFd-Y};2hU^d z8%GkKCP3GdzirtI!L;!2mV6^vA#hCh2h%qNl0%$>^030?VZ&WVB>`)b@vJ6vHf2!B z-O?@Q)Z=`rlUJi`556zn5Q!QL(F+<&-h$N|qR~n^bO$yszMQzb6q}VMmAY2+r9nII z#W}JsLE=#>DmylX=E}mj9TUW;)Utm9Qv)%%Wz-O zPXu|qi^~<>c7ZT*N(*c2$xWvNEmtWDPx=+Y?`JkCiis6pzNZ1e38x%^|~q= zX6bPj(3Jjc#!A7LIh*d<+Y+CoPUyHYmxwm4cn*Jjz0x&42<5UAbWUja1i*k2*V%lW z=sf{>8wcNLdCl0X-0+@)ViIiY2k>y`Ca@3UvxtVkMVi~vDyhHI@ec=;;I?dlojoW! ze;gh>I7b&K%x?6Un4fSFJ^K9c>fkCgcF+3-BX??6>hPb+P);`Z3I1;4P)dOu?;li! zq|nWcd&B-&j9klibDpOxOEoLS8$G5}i4a&S<*}4{Ww@t4V;X|EI}FiHUVa(kCBo0G zXZq>gi>pE3^?nRy>6k6-{seLA8&bc_{PJjmi}fOd z^u7fy=O^1#Vt}ExqMsfh%L@HWOf|9H9xFM5C5{B60J#dQr z_I{vaiAWVaYtW}lj4Sr*VjlTff3k95{5*!T2W=ym#nKq*i zV0~iRrl$J4P1xv|(Um4TBJfbpFslL7P>QjoUY=FCBkay2Z$G>e7sEUYAQYD?Ja5W=rTVRmtyg z?aDFCPwzcr;EMRq3@ z{ivJj?z%ZlGM@8@zJ$N63uSS!NE!DYS{(9&TtmvQ02i(C{&b#&s z<>pA1E_a2Rl&lGpxpHdPnO_N^ddJYVJy1@7TFH2h)-;lTt;MOW_y&f<*JUR8GR5Qm z*dmS`=eSZxp2XAbzdz<^1m!48Z_I9%?E9lsw2-ab}gn{$J=Mn!9e%M zJAjUA2hpmVcl#9PE0=M$!3&7<+kp;vM znyfXDVOBHfTN?~|#uVm#2gsFIqQg-S?xL}WB?e*?w=<}ws9IB=L0nGYfy*HpEW(iCxYk=F2mKZq#W__|xV-EzH-yqMF zgFb^jaP8LMBHciB0qVwB{(2O?ynYNMMteo%UJVTc$8UgB-GSm#=g`TRri2R0xym_b z53Xi|o$3;}N|+@b!*8kIK<-uPif$Z80~E|5?H)PgaVv)?bRcLMxtvBnJ*@}Kax-rg z|BQ9MHY=yZlb0w!u$>@4E0Oa!23e2V|MOx5q=))4GOML<2pmWjfOjT0T6!FShMd`m zFZ4HKIc0u|;3u2wS%ocr0e=fMey}iB%I)`^_SoouAMgI#aA#v$FbATt_Z?CE@BM+D zU$hcW{X*juS4}o%lgoFz3b#LR#IV14xBziq{X2|;%EqrM;&V8@3m}M`i9-JnQ1Lzt zhytfMOZ%@%9pg@cJ2Wv*xVXE`sJ!;O2lV6Tby+((0Hy9 zpm@S~z1YvSGzs|YX!g6eGGfX4d2#f=t-*0I>9XFRk9*(U(5mV70k#%+dQ=(ySb3;v z>M$JNp}re!UF*VH9Y|Im2d@6BvGZ~RwXvQ=0xLwLc@@-oMk5cuH%*5>FYZk5_L*U5(h;j|&EBI$({6ilK^^L4Ce&2t-7UZDpF~BAtru}+#f+mwQ^`N`tFd2BVM*Y?&oXNePp`+jpZnIxsnOEAYHlG~gbIXJP zj*a!noH_s;UBQwA=!;hA$|W~$LYSUA{`}|+R>&LDDbQ8P?Z|ukbFt0aVA0l+mn1G7 zNSb6dbELuBf%A@im~}xI0rcGfy35y8jhlwd4Vw~8yKI5G=cF?Ur;C;PJaehWOSp;okhU-E1BY_{PzBqUNyK$ zYcQ_vK#1}KYfy8Xaq>Ck;3vmkA5~ZC1Rmt7xIYTqa$e|vlk!epnCE@|W`EGtvuOoY zg;68tZUDwxRAm(|21bb2A^YDE0-u2V|JYYf{yND2l8*KNwP)rvBWw0!b?&a@mh6_m zZ7aY}xq%*-h3$i!GIA%-Z=mp(gDjsU1QjJy`Mb-5oqL37o;B%E(1Yy?x@|y+>jUN? zC(u}3gFzBI8p+}}*~8E{7)5s}$2J7G4ahdW=A$HQ54u1_f+;ZEmD;spG21`oUxj#t z4PD-&m?fhERF;rw(TtMQ;q|k8LoX!ucSfu|zquZFi#7}YMU?@08FUo=!8!pw$rG^U zbwJuJ`0YRrd=SWYr;vkrwr0>_vj&8jdQj?&f|%n;rYk}C8U-nU2R;c_#yCLGlkm*o ztyc`3(mmy&K$;r`#pn?pw9L0nc7Q$@vQJDJC_O;%C~eLJv$NB+nS}t_|21pofw{^% zd;#R#sFo=JZ`=SuyeRpg#!KhX7jd$#{S2a$Tx1*QEqpx(GVTl|Tj3(tvC;QJ$>LIT?kG{LPFL348r zs4&S1Z&HFf7@W}sJe)eRF%vYyuO%r1DrXP;YmDr>eft2Au^wa}A_i<-u=h*t!na1- zF2)RL_f+@M>Te}xr3-c^3u&HBq)A|H|Be?(F|zz}m5&7k!w&dG+Rl$*UMzbQk5T(A zV&~v{9lk?aTHYXNUUqMcnOZuh!LtQ=>@}Nh>@H_lu({2&g(m?Mr8PFV@f@=bNWx`g zE%iY^=wN>LQtQ9R$z-XYskCWYK8PLOPcb3Y&s))%7 z3+nU(hXhdlh_j&F_L&8485@;-vaO(-<%RLB%7`8yg1pAffkyZ@Z%n8iWvTuMuj=Rq zwEy`UG#4#1VaILx`Ufx;u7X)14#R>}Po&N^W`lWI?1YMtfJ8ZIN=``N_^Ln8W?EVg zY{eB5QOqQkgku0Jj#ED8s4IW7?TFOH*|vsYKpN{vd|zZz7-Mblsl$J5jJ5hn zQ4(<4+?x{nL2kk9QvWFL|1&*P#xp}mD+mzUodMj`C1eY!KJA68HRNjOTYQu6@@H#` z<@>*BU%tO@#|4O%3Za`*V4s0F{96DAd=`JM#jNrl+i67t2-M1t=a&^`;E;Ujhtj+D ztG^6^AIblf``?9sm(@-dUF$-Ws7Haer=db-(!US_G{`0(h7GiLp92Pd#pO(CUKGbT zS%wky5&~v|CCy?j5q+MCsD_xzPRZBqFrJp74tW(Ac&Y64Czz-9^{>CO5!^_+rQ$LL?E+B7tVC(03 zze{&#b#zd)W#higxDB}KZy#EG*m5ABf?SFlGal<@OQeN+#Xr)~b(?G&CTlTD35Qu7 zIN)xXoCXi-cdITR|ILP-C}^v!SNeygbE<>4DGd(e|Jz#S)$jocl8evoS+22lefgmoffnMzzGQQBUyr~W< z0UNGmP?+m)Ai{@|9^HMJSj7o_)@11Wf&NB=3i{0tS+5HR9{q|EPq^eyai%e&>ww76q~TcjLT8U>Q`WcF9#Fz{8VIDBBO<@+>nYx!E6DckNC_HLFz=b&w(Old>~&3Xnw&0hwc2J2=OX`7Bl>KJzD-X>x25jT>Y*)BM;$xHM;CyK?lWyk@&yv#1AC&xdqBIGOn{3ibI31~e( z2L;vJgQ4BewZ28E6YgU*0_8GP>^2}4Q$YUw0jZ**EXL8|FCe7LWytADg~QNmzpb4r zNj|jV{O%EteBjXM-d7H{2ZJs#T>}iUid-eIU?BHKpSpwkyv}=0Qyx_9WU~)>Bbjd> zdga01H@GELsS(7GC3l3GdFS2WeJ}sUl@|P-B$Zn4HQ;Y>17^2ZKFF2JWdjOU1{9B_ zkXJx8>DorVZr*Bs*Czz zUVgMlwxOkp7u~I7y7_NXTJ7IX}`bQJ(9V`7g=`j__8A!d>t+ zvjx?Ro7s?cPz*l?s>xest{5}`6HTqa0kbV8k2V`4zA274ks0Wv}j8L5F8vI>%p z?gqKm0!KgabBCS(3v@B>P}V3j%a_1Z*)Zb@Ds*?yE^-b1Y;V;P7v=#_V1-AOw#87n zH7+y|Wb!ot@un|dF7PIX_o|475Aa1+aiWE&1kw_^j*_-T9L^9G)HYI7;BqN3UdAP36 z{r%qexnA~OZB&Xu4A}t+d@_Sea&yDu+)4$A1wN6lFgP_q zp?vR+Mf=(|(Bz6KA49dj*Iz9By~*d3;VexBK2l$^;w%VFl5P!yamZ_RFta(r`tAm< z)&}deZJ_mMK)wy2bWQKhXaMxEb-4bBlz%+a@ywJM_4w;Wlc#N7g3vTavAx)|F$ak} zCdX202P+OEB+f)<=_hxg9_?Fi*LBXaUj^jXUf z*ixjD)@>_85Dmm_fMMVM2dzR67MCXkDLuP!8?vrOmD_7NUPJNRM0Buzr&93mGf(BS z_Get+I6ZU|F*5=-kPI0#yudn|-6X|Q>~cQv#1*6jkE`C)p%qo94ju0H^pV(R{pjqF z7PRbDK@T+xS_@~IbKc~rRQC>fu~@;eOg3b{xaExz3Ic;(xMf_-z5wwXc|Dm;+TAcP z;LCdjo_8ik4#J&!AThBQ%JOP;&XwZ$Ypp92Lx|8|-ws^i}jRa)N z`sv-Rf!YZM>$^S{nmVuPz%8`o@6YZ~GxTY@FAeE?BJ^;qz`le)-lXk2Gy z8_oC$&1z5P-iCsMIo^Tx=%I}ujZ6gamvp8SiC(6#fWQCu<=IDmi)tRuQyk(aBng)Q zur?a((p6gpCz&ObY3UTmMcP32L~=RBZ(0MDslDtaLDi2)^8%pu8mrfL_Daj?`UoAH z>}i1{P3pQqRqw7yQGtlFSXu}*6Cb;yyV=m|2d1gKLPtb@bSLHYrs4KS{urOS9{l1{ zC3wz*WA>soKYSC_li5o!4XM2CA%N1kyZ$iYsA!pAbh+^=TxskjDWFcur5OwMY}yWc ziOatYs5pfkM0g>(p&skw&7?4Q*@#;$c`kWAZNDO12ihpwEB)iYOV4vYpi#;kynIXK z?cb)gOWn2&n>_V>a`M@g8{^M5bQI>yn_NK9A-<+cj7)f|eMeqq#J%s6Ssg>&-S1j% z%TDgr>wMj}rl5YrEhGKow5e}?uJ`{KruQ$_m`U9JDZGv8&vkh6#eDh%YC#*0w6tzRLe6+qj7}zu>_TtAG5$v4jWqTKIw7!EITU8Of zZb{b|=%6%=1kgAY9D5(7_N4gA>_KWtnd98vST!uj-vG%MSsHpMtPJ(i5G`(>GpG*>`B|a8+w#y&bbJBJ@j^r-^G>k>k)){kO?gax(T6Wu4e=8)DBSwemC6ArU z{FrWWi^AQ2^)?yQRfcWNBTHoOulgf?Io4m0EU?0IIbFTc#$Z!LJe?< zf`u_1KVms)rLc@g3?0KC85SbUTF0Ec-rUL>VR{Ic?Za&(W$%0`p(@z^BCL2rp}CiY z&=x53TZAL_hA4AupWJ(W{@P|YN;AZZ-h_g-^J6dSlPzQmd4M=y;o7mF#!dx}8CCrl zZ;c{4CMe^rae9zM-dOo*KAld7=a^MKx{%DHY^}Hd?cW*LH2xp958#D8?|YcL_4A87 zQm1lJ+JIoD%eY41fYYz9aw_W0{=#=})2S${{5hX)P&B5Zn;d|fydUA$O*Y!1SLhDd zFO>@8{$9h?cyq)LMjHqfeL6Gfi?O4WsqY~N$?>q$rJqh{R7Jp@U<(=g z$x4C#MD56HvxKBesB@hhB8Y#1@&uZ^@vX{kL!B&qPztxGYazTkKiErg2HyRQ)Tku! zctxFVndynJk)(U2%AmE4b>UeK@R${`o zp?C4IOw4OwBC{|!2ZfHd-_kI#7s4sc5oOvoq(x3nRxGP!%KKY}S=^1vW@A(*t2UhM z*l+so20doeXGrw$^TC{Z96r}{XyR*8r;n4^ma5OkGlObS)P+)Bq3zb>*f43&3uF|H zQV;E{wF6uT1q;riM-J{h=<+ul)UAR9|_BfGwO= z5Bkz1QHQH@S898R9GEehRw?y_(i4L`buQ!pBQ!)m&<)eE{ga76-8GNKF1JHKGd@J5 zfrHl7S+d1=&lI_4P1VesmViY!f_Bm8Hel7Dm1$=$L1fq!D>FH`jqS?NbmXCo>>O{gHVjt3~z?N zw)E`f;K2Ym%9o+i^IN4 z{s>g(ae+^KoRv{zIRgM${gZJq&RZ1GW7mM>S-%`p^>PiY2N@2#T?&%($jUc z|1lS`gy^JC#@wTaH_fbWfE-7&fRrt!nb^89gk*lWaUIfhSK84iA{N<>Z3QaKPK^J4E3kM=`R%=C(50$|O22kH7w ztjysWpspKhhP}>9U^#Ppegae5(`7{Kc7zM8(y6FNFI{uklTZI_-#5^+5G`-jo%O|p z?wqgHH+2fK(jKAoLfi$@Cki(4s(1b=Vr@l+WWDd_-E4=p-f;L*x;w|TC5-*0rK23u z)q=I)ak19lroLg?AbQv~zgaj`2lIl#tWAN7=iI`~^d~xVWhvQeI%9QXG>g>S0kfO< zbbW*Z*fvx%8pV6J@gX%iT4wM8E{j9f!Mf%Ss~L?MOYIJE^hqXVKS%Zb8shh>x237Z z5Z6$#Jyz@SWsiy9-MT@)?83hH8rys3${*lLI`r)9 zgj3BcTgcjNRkxa#Oc#N0sB+CgV6^UAysim|np^(JAc94VUu%| z8R|3}sFw7aK(_EA#|PUyx(T7z=|%(9`ENyEqq0$xIeK+ht|gr%GK(y_Ykw&!`W;)B2?7(Vb|cTHIzVkn%a@9%%BdWfEve zxM|WfnZBQZ=Ed8G9IG=eoSm^!6OJ(8CdFVTgnXcuC@KG^$^!421^1%T#WyH<9ahr? z*Q^|FcPMh@TovD+2ga6VhS-C+&3tyunA!IiQ{vxBYUegPv|YTH^u5Mzo`-|gAND#7 zn2PP1r=@$!KH));T6l)=n^)#l|LBNsU?~2qPMB5IK5GksoKl62U?u(QDBcObnW>hr zL+P&dUI~Wtwlx?zHR#@!zBBi&d3?hJaHyP@{Q&KnGx$j! zQ|6QWwA2&%?4LhgKp~4;oeoUYcJaczmsv5GI(68S68k0gO=e) zzKPDQc^gFd82S~onun9>A-b)*{J&1^xaG+ zliupc>oqV~_U3#SZF=gFHz^(D12}GPS(8@j6RFuI`a2T)SbMpXmR#!;>55s26P4y- zCA`>pUA5>kl&&jvvv?TGs?gguCwxZP-XqQ}DtSMC;jQ=W{cwX;lCuNqU*{*qUC>xLOU z5=W|EH6(WJs>-IA=zx%V@k)7dTg)DE zm7^HMoz4XbCN!2@+g-BjnP6OeLUquek-jYaczIQ|p4uP4E-NhD8O*111#@(Z92d_S zjCp+{YR5(4h4ISnM%;S}s^^CM{2U7tYtzOWF23e%p>=cic%*VC{lScslUr28)&^uF zXGu7C;i!ruSV9#WwK$I1Io}VMCcvx}7w{DcD&S%$3&oAZKa4xJk(-1Dcw64otQ>Az z@Ns4<;fj6sK_?e(KbwD@ZOh;O;)$XBpGp<%wYjOBcR0jnOrg|~D}SBibQ6^HUaM%5 zXe4{CT-^e1{B^A@qpcT`9Jv@5Z9EM)Olw5vd&Kgg84um@PAi4FPVJDV*}8UR@jTrP zDTgmqL4+T7AhzvB#c8BOce9s_t=Fux@O$mf`E6_5_y+q{MVA#Cvc3hmdq{1uSz;3= ze}Qvna7&ckg$FH#pOj`>Dn_Rsu@6=D^%LY5Gs(6Ov02U7#m?gXUJ+Eu$+{4`B%rf! zfy4o^Miv>YsgTJ&sdH0to1wdUG_%R})StJpj z82t0u+AuKZJQH3hso9L2>v$OC%e+#fPW-4`pDJToV%6*LvBp+ISso&DB2I{`;G`q zI}83T0hFCoc0%=B-ZiAfDs7dgw|744=IOgfD^?|;*Gpej1szAUP^C&^F8sPXkB!DT zUI<>l$ROFEp+MqOYtYpLI@zsbFGS>QNwfZGs#3n(AYlBqN8I@x9*t?+lPDH|;Bep| zJWr(<5tg0?rt(g6IqeW9VnvfdG)+&l{^PyMKZ?HCfR^G7YDINojmTc?KuDLPk#Cd%mev~WZ*v6 zz5LPLs)0z=!$Il&mi+OCVdp;q642-$XIC^|nd5E(wVP?Ct*VUa&d|+!eT9Q!nr2(G z&lTbH7Hn6W9`sn#v%XUK#`PQQmpgqRLGmm^GLPuF(26@M4^MCS%wUx7Zzznbxp!wx zi~U@KkJ|ezc=et^@F2Bx7DIdgw}_9PA&w<_BFE9SPV7O#4nr|Q-nIWB0`$Qua4@7J zV54sYcxnmmaeKm}W6l*HeB;aWD=aOy21WW@*AL#7^3LR+8o62p;0ku>U7TSbUiAX0 zUMfG6InLtm+P`LF-0xemRsmBTwel&H9Y5(}8-)Ks(RSlRmxWtO=OJ9<4MAD_^b*|J zwcFNj@#bUX`<%>IINMof8snAP$!66^AcX(N*iV<_Hmj@M6~v1lh@6Pr2|4W;x3IXkm0C*Cq$u89{DJFnKLN1)na z#UlspjO>A#nB1aaVYlJlFGti4N&WZgU0lw21%vAe!;=f1__V)G9h`6bI#eDXi#dqf zTi0)|%s+Y$$pozj+}@w#h!Y>QEQfzu6PM$EnHNaE`oWD3aAuiYp3h*O6<8$YQ8zy< zNg%Ut$a2d|hW19q=5z}km$^>I5SW!rfXvk#ar`XP^k->txI&4gO7yDT2N^UME6;BG z)VqNTsL^tHj0&FK=@6>Y9Nhz{VFv1KJ-~~y_C{oGU47x;vgi1M$4f!w+r^mpLGS{%+z5D6GysF(>(tX&BYm82YlM_( zZo0^7`d}di#e`fde9#mw2D5#*>A^=kIGbQD|KHGtUM>p^Nr`JtMIs9{2(<;cc0-I* zuBVoTbG|G-`q~r8P0uoACTNp=wFdSevvqAR-Ee4X337iS| z@2on|O+YvI1_y3SySjTrCtN*;K?phe-uv^b<5ulGI#h(U=M)`!p$)(K-aJ*OtCXqQ zIW@iumD8>i!0+OzU8OxX7A(T-_=MsHNMnTnb5BhXrlyDBYf`7~e|TrJOVa*ud>rGs zX>GgM`cwe-d3aTAAQl7)YK>K2N;9Eo0L8CGk)E+KZwjYY$Nwqr;_{A!ermXgdkI3> zUUtI?eNxF>Hfi}k^zbP=;NFkOp`2S3(DSO;8FXiQ;P!K8(py?$w1-{#F(dbruDur+(@ve0@2V2E2b^s z6kz#Q60C*i(|764%k}gSQxNL=kX|m6sP5$L zWQk~s%KImvLHX}T5m7)dJ=G`=#%V|Q`2?@S zD++DV?YJfa;v?KV4erjtE95B*LM zyp;>dv>`Sf>4pX_6<2gujx`p$VIbB`cmn==_d??TOB;_M{xdH&{XZ7)UL*EFVqsv*>-8x30q@UA=-Zq5@@={y{OcJKb%JUaaI3Pkqo zQagdu65&jWTC@vSnjvw`5>*T zK1-O}5T5{KaalzgvQr3mK8|HNYsuNsrLit_@Qa}U(Cfj0{@6Z=;144TGXh3IT!QF9+XXOn>!#FekMSh<6WN zV=A<2S)^@N9$*ZBuRTKK^5kE%LCv17)e-xK@yHtiZ|nv_q5fZ?`-+~&Hlgb`CYD5i zj!F3!Px$0R;w00&10Tc`WG|t%9k=q&8(J3tnaI-PoB+VNHd1>H&WjLN_{4H2 zCo!mGqNFTf4j-)uEC=R)_pzt@&i9MX->LT~|V8^?%9&sxywIJMV}AL@!R@PFE$ z=r&4?6(SeE5+u3o0LX(LU%8LOpf#XcwYa8ZXqc!(#Ny(W#pH6BzSr=U8%Kp`tz#~z zwMO&~CVL#rJV)^xxTq=2-QV&6ZJRaJL?^5I%)>pC(}HxllfdjbBesP=29l!^zW)am zCEPkV8Y{jt5S`tXTs%=e{?t;7U-is%o=O?+;F*)v;%po^R>CVPDMXKS*;}?Y%7+1bw}evoO_{^Aw-D%wKis7i`5tKO zaWfCv%S%xPQnVSaxRV#EJhX(SYTR4SP2^*W?SZ+QT8=at(%IxeEZREgqt4n)7Rl08vU;{FvF$2i(AMm&0fN5 z&RubT(-T>{kImR5z>auf+)vsWq)XU`()MfC5Ha!WM%uJvv)%Jq63KJ!LATn7CntOj z?M)Q$cNC}SuOQ=m;N(RWm7`T5HKBgjYY*kSI>cFHy9*FMoo^RD}_!B-*GwkTGEaXm@H#1$yCs98MB?{b z#2t|frw1?IF!#wX(vb8lVAeY2Gg9^M$^U<)d19lB>hs@JGKmKGGJc27-x=`Oye?X! znakKqNOF8ma1q~@CF&p4a&f(q?xkn0J7D2`Cx$OoW&fgWXCU@d`gW&6*|oAQcXmq> zbrAIBZ_80aLj0jK^3$#$!t5~SnNvlFYZj74GpY`m;mwTG~J zRr=$pc9z~sj{$utFTT5$gU0L1MX&G4CC}iaG_F!7Bqh$Zp?y4vwC$Zl!5CVXY>*mG zFW9%&pjopf}&@(Cs%GEBf|{7NkCUg zACrYYprS}tbb!kmNxYqc_ufbvV?0_^T< z^LKQhH)2vUW{Yie_5qLoE`(=#Ix3-D{I(C}T@8W@vvjsUK?TU$b`S#abO1XNwM}Gp zUWo=C9@un<9sGX>*{57dAu{B;g72*WvCVrl|Cg#gB zXtN2#ZvQvheqBqOiA+30jMh25l!Nt}=_t*on=RzVUKTrG1>LMfOw%Dw#mGEO5H}-|MC*?~Xdqg9O}bX{rtz{o07GJn7Yh$Qq+Z zJ1&`QNy2TM%2o9gqSdNhJuweD}G|YVwFU%=m!jABH=k*K!6r!1bTEU zNI$dCW9GJNb4G*vuoE%_YbzM&>qmuEPUDPtr9t$?6KJ5^zx?-5{6mrgG6k*QCU|SL zhBM3P+~{X+3L-X+YPE+Pr03BU(UV)Bofr2^VD>ALE}AXc)#JJq8>4}Ns0Gi4oe;jzAp1WCCAYVQWutI?%~ zznX3ZL0Z~%sob(9i{@7~+W}6@Ta)rB_(wi_u|%KILq)G?pJ= zSCeZI=xZvUoJ_lnrTvJIX#jf(x`ij`V{0O>Q5Se~2dk2Na5UB+v=HxnNGBrvSg0~V z7c?1UA@e!;8%&hx>8oZ3g|4-ZJx2@b!ZJlRRA5X`EQ~>t%j4IW`%NUjGEe?xt?KX^ zut2Wp(Z;B~qNht(a}beRbNk&&am9q`ZZ!CYn&GI-0FyHVF90HYO({q`Wgc~ZB&db_ zIQq{$>}%Y}n)4<^ zw(|9Z?RHqjQ^6YLu~Nm6BZ%@*RrAkNe3K1k$YBVB@^W8HT?V)3aPbLS{i0aYGH;9x z$59vE0z-wT296hk`t{hh#*CUBS&TrwzIfulNne(IU-9_Zsp>>yIa0QfMBF|y_v!C% zB3UMpOWHxgIy+sUQ3|yA{_0GcDmf$YvhSxZUee)Ry2X2gUp#Jw{Av zPsRA4d`gb|5nyt`;6(^FZo9L^m~KzRyoy!g7_Y2eNkf@4wbKHha=&;+Om`EqyUpu0$`nG2sP^x>#~U6yErFfJT5VM@dMaJF6XP&F!GUv-eMCQ?}EnJ8Y5urFK^Fw zJI^riqW;m~3x3y;-_NJ3Bf{-&SbZ&&rgr&R-@y`lJO9R;Vj_K8s_yva%$JYeoB()Z z%ACficDo!T?JfJU-vokA+rKHS%K37(+O0$ACY+VbbFd1ue1fwiFX3oVf@X?AG}f8X zd#^eK4k2#M4 zABlUPbmO(QC_tnA+oj@v29tZ=Vmku8*p55(>)n2XF_CPNw#U_n7&YU0_*wCZY|p@c z(k<%hn+m4!Md9X^>Lr;7^|)1>(RsMTw0G;H+IvuRP6Z-jc6(vv?wGQt=z8mrpemMu z{rCNfQJhZ7i<)-La%>QisNn*f%p$DSrw`)j&0EckD$Lv=}WASR5@E4@Qb_!9+(=FGWUw* zn(PikmGJa2$8qONr4K$H$aFTt{Cj?39qo>3HTSW2An)Ak>`!&$4mcRTjr;xmG$<|8 zg2LI`|Gw>cd-ePqh&Al5F0Du?2gxn5MS*!*++D4~X1$i#GI{w&m-i#lEgdldVk&Pp ze(0GAP@0uw>fVzv&?qXahOmjOW+kC2mFdedi5Er3XYb|1jW(+83U89jj23*nX3{gS;yw|M>|X z>Sf5d$dAh+w)QJm5lhkOa!q)7$Ek6!YcCfv`J&$Bhe&n|&Su0u+8->Hq-PHpp@l6D zZD=0Hs|sGyqyFs@zo1{$EpvUJZ)@Q0za%0UVz&~k1Mb-95mR*k#PDSm-4z#Y4{=wu zSz+DpRcJg|^}2eagoqJ${f69x@}Zps?CgpI$@7MFN32UzC^vSWmyy<>Am=IUsiZ^M zdX<4fvX+6BQp3(}yMzjh0x!idKLC$w{^iDc6(e&=IRBziU0%WHG;h3RRzRe$r*&gm zRBp#Ei|X9_0u$q_`QqLuwq6W=H~-o;4Jeiz`^M{Q=Pf?LBc(KNfyZ&N_v%8$2R#i| zt`>0A`W<{n%=6J*j)PZuI9ZNi9CAQ&vF5cDB|=%yFo8riIlgLZF4?>9mA)w|^bcXX z+3dbUi{GLu-fNNH&Gy9}nE9y@{i`W)cOF*LOm)&v{4qokG%9%?p!|ie^8-7gnE}qr z(oa3gE#MuUiSUmXE)oag-*oXOJxn>T+9|rtwpqT;e|N*h3bzCQ)5PSvz2GsFlLBX* zN{X_v0k-npzJBZ*>H|BXT2t7cp=ENKCAw3qL(pTDK$*AiQ;q}9>$iEeYdT3&NVc@U zuEGwsw(MhFTy<;o)-gRknoD9E-*O9>MSBGn1l=A*C7SEBM4@&5rwg{0s}|_*+%(Sh zqtIwaa`3yA`#lY|UyQpOvE((4r=?Dvf2Z~Zlq*DL<-C*jQ|O#NAb7_H56gq$iZ_Bc ziB%|Uf((8}ZIq*Deb*NAHX)K}=kmpm(wBJT7PlBtpcxuB&{iVmugi+(lK27W=f=~{GkC|0IS!@H+= zB4gjjIm8y)qa83E@5>gJh}{$=ysrXOWwX=J>G$7h} zCLKG;u0fOQvUje`rM(%qaDzO3b~IeH+?4@zlF}g4TLS`CV9{zJYY)um zFBP$KR9emwa+kfT%eVYa=AnG2xoNg05PpAASCp?7IKgU;v$Yp%%+h^aO7;#G^QG=t ztp_hlxQ+|*>&;I+|BCl-Cqu(JaKI#5eevXJY_=-sLAkxs^M3KN^WOu0lr5z3Stat+ z+~TfCe%osc*4YBFNV5;x6f5^oz*_C)X|kqly;&$@Blxv$cI=G^>fMCOq5ABpP-w>+ zdX%|G)~i5!mUt}6{Q6%0*wP0J+O_}L997N#QQEHd(2iQp>digHr2?wDPxdSpyBfbK z)Y4MIAH3BSd5-e+S_SqV$74RGrcKOK@l!G^3#k!#t+a&kS?SZfv8Vrh%IV*-QqRaP zYu%Xm)-&r?Z@S=$YD8Fu{^SpUAxr%%$>FnoApdt&ob?BSFNT$?_J0*aq#Z` zF2n5oC%IB@*h{S4x+=u&Tg`4NsnXRSexa{^;rg4l!bP{PHqfJ)c(`VX-l+tbLjMH! zLB~cK3QA%&slF_?*px@q>uwdzJvj%>=BKeALv8Y@KCq`??<)2CKZMUvNU!)ry=VIe z7_aqjxkJ;|JNWzAwMF4*d|nDEtE*Gu8H9xkYn7N)tEPu7#hHTIaJqP4?|zPR_qTNB z#~oXYd#&*wXtw*yC*YWdX!H{xZIY5d0~n+UPoK$=AoQL_fKs(t#)0b%(objwd&r+` zS6&c7FmL<=w;Emj-*s01xB0yB*jgQ?ysO^Bxk~@~&Mogpb{}Q!k}SMkzsf|>sM_5y zdbHYWL1^1apk2E=Ud%g$wdi`?(D}NneM6XnGZ?8iGA-kb0PnQO$jp)sTKlLd?Z&~l z2~fSo|D!0%A?p@^E?9|&m6JuWh5JN zT%BVuviW{Y>{kecs@(v?b*xle)9IYBWOmI#c)9Q0>kWU!lRTg3CI5FZffp_Buq&U2 z8hwjvp-Q_(LBihy4$^($WF_+!V)xt>8OL%b;*m?wUHV_ERngk{ntT zda@-cwE*feO>qTp19Oq}y$#1n-A_=u@E^-Pp#ducl@dJrVLvb(%!T=-W~B=Lkum3e zL@%0XTeI$2{@AtX2*@NSoi6-?r_U~@E3)prP|(555LrvpCN|L?B+7yCo{$~iIWNij zsz91jX-cM!q$2%{BhzHu+b{@DWCa>Qp5POz!-1{HQlc^jFLLQ!9{*Vrm3~ zgUOSrk6iAKUFS@~OMp;Y0}a#zpK)$-7MvEigo$#5WP9rz+aC@tjshsUNmUYhzb4hN zp=64xQ=7UGc$*Gql9hylwMVl6&JM$~WB>(HB5s^BGEIyjhr^>tZFk@-e(KvZUHT4E zu7_@{_6sDit+fIGTe(b+>r&da4)RHO`bc0nwVmH`#Bb{{GUO9+B%z;VjXh?aj~u1T zQ7jir&U)IwJoG3A^t71?d0IHL3}+yW$oESi7>7I0#6<$otgGL1$60;-hUXPu=MdH%N78?xt<5C&*IIdtplu<y*;zP?vbRDdL?bqBGEF;r6;r646!SiT>D3WeEAPCGg*>wSNd}&* ze;|-fv^o)~_sHrV~z3<`;hMES;jsNm_4gXY9`<8^Y3ynhe@??B`;;yp+} zekavxu7NcOcRZWnK%$9b)tKd2z@SfE_(Fr{w^!vM z_p#I3Wf>R}3B0tywUHW?1V`keX7&<@Z`xcI(0Gb-X~L{Dg*#UYEUHzir_i*iX)sez zv9>#m9BByA39Rs&SvHDcFbJ$YzE&6pJkF+fnV1~X$%`mB#{7@697soZ=VD(ogRc^N z)ltgQsd}(|dxe`(FXxpOKi6-sYU6YzU69)B<#^ERGt3XhUhJH0<8IAR%1T+C#zH4` z-7shaeGU$gF#7{V`9)E^^A@N)E&^MeFL;R5Wj`Za*MkS3`e?>Kt zR=7uo#`&WH91Q*ogbG0x1asmON}_$(2~>+kdvY0T3{8NJJb`!KTf5kReZzeC?Y^e{khEL1<4O>1WoP=g$!a%fO8;dXjgqjDD7z-Ff{SOC8a z?Y$hqv7sWO&g(wzEc_WY%_lvEw~hT+t}kNpK+A3uPStRHnn zF=-W@iZy+rdo_b$_D_!k0CJa4peJt>wCjUH|I43(^WBqzYCXmuMQ<+Uv zAPBt-96B&ORgyDPRd%kpe2fcQHdmiJ=$rN7hx#~Iert-@iM16g=GUl60qUZhlA!SV zC&y>6lao#-0QpTNhC-s9$>8czJ?YfC0^qtWAznoJ=uRis$r14E4TJjshiH4RAhWPxu^GVs=dR5LlwB{{gS(3p2Kg*88=GI44 zKBZ>t+MM5LQKz2I-cIV#>MtCOT^q+UV|HDXzB=9z_5KDM~m zxH3F`e+_ll75oZ##?_1!q4$u!(_CFS_4kf|M6Dssb8ax;wUlg%1!|>b`vJ^BnR?x&?3ZN2%)XGNxF@{*5>9$- z_Va1)Sw>T8g|}?xEM7@P;d!P}P66gv%O;94qPk-DyQzXK{1KIJ388Qa$WMio_?eeO zhF!z{{}aMg4b^!kBz`0&e8ozh`!y~$0W*C$YTl{J11^SsYMY;hEK7K`hQXM-qsVNW zFSh(%+NB_;_)n`B2Y%?&H``fHfb!yLHFkcT{P9Bf*(=HEb*=zQ)D{Y-w3gZYQZh40Z&gdf%*Pj- zT_1O!t@3=It@Ggc)C(1SM{}M?joM$l#E(s*lt|}7X*c_F{YH-+6kC|M*oxD+pf%;k zq)}8yq9vnUD>J2Hmuu1Cbzk;5%?mP3cxd06D-GU3Y@{Rf0b1a>qDvV}ZE^4TPnATx zf^q(#A}8MZ2dOlBjP+-AlXiI|FU~3bX~>5cj!b7b3VUS^KcD7uaLCK)DT->ZS^R`s zm+NZIsCoOSID(O5L@r6UgNONeU@q?z%EkX3E}+m~XZ5ejnnq0{)e3Xx zasGI&MMT&qSzpXmwTjl=TtqQxO-pBI zB)PaB9KQX3C#B77Z-LZ`=aEk_39w!d1@`l z@AsN58eY;&ZLw5EZYP;|)s;0e8>;r(p7`{1D@zw=#xKNX?j&(2&pGkl!RW)6a|!W!yRP1iasgt{Bnf_@HXJs+ji#(|DIL zQpFevTrw5QaNqrnqk22wcmn=VF`+hB)eG!QCgm@z|?7 z)3yjR6tmyUoRn2iv&;Wv$=Y06n*WU!TI7WjUVP6#eo{Tpu_?q=2%GJ>&xV)EQl|F%hVkcWm#nKZTIbZ*F}M zrtRE92Uz6DrYrT>6{|}oD!4mb-=qVXaB9N)LtBc{2G{1mu3iPVDW_%!xoQm2HLoK4BNssn;k`XRf+QAOcd1AdotH_ z3B&W(GOOVPDD9p*?;*VfgEM?Dq8ogptcg4K6_6E5Cdm zp|A}8;8zYwbd%_-%>Q4{H2!xg;B8k7h+_ljtjKJ3n^GqpyQ3#glCpS63wupN5{PgR zUX|2`dW`)_B`u<%#;j#s*v{0_{d?KXV)&8!YKdZ$*e*SF493wI;Sxqb9U1ljH)WWj zw@6Ytg7%i&i7BWnImdjlh&?=KD(hvEe&QwpJQTl7w43RzGGYfw>OtGWbdBTh;N07s zhefuf2Tx6vDQ$m|iLTH9-OuSMg$Z8AnQZ1vcJYO0aO3VltVsRjTB~>Amyi+o4)62l z+5A?aM2H~2?=V1J=Sl&C*Vue$2o^K!4&+WDh{oISjbbAp@^pf2riAKD2M~)o;||!( z@wOXG)wCQxd$dRlRaCL$_8kKl%CK+H*2q3CMfUsKJQ~N*;-3rrTJd))L@QIGER*u9 znqB)^b05(Luj4~$K1ZZI#vExYTKod9I0KyiU}?=HCvD4>v>-sr)+9o~#cqN*alzLy zGy%W*F2?6ysyJo>PDZLp2)^p@PgxYK6=Wfdbk238`&qU@u^B8xJWRVYK2ED!!|A`# z76u;#(D_sHM$kRYsD8+)Ex?!OY}cuu(GS1CyPgl7W_}eK35TA2WX&KgC?!AkWD<{# zQ6deqV@{K{;s_WM?>grW_Z>o2pwwL^m&n=P&zlvLgSqg^T9}PEy#OA!XEvRJr>qG} ziVdY9NM0Er#Ds7MFzw7lq;!^4mAvcwfK8lTm*R~1@2*@W!_?F4KvhbEa@ykvxA~E2lLPn8bFiO@)KANl#r+|f&ddDS%+(U-sp%ZbvNcutv>2QE4JQg$P*Rsvm)^=1X!iD>+joWZOwW3e zJKBvtf6Amnf+;fPL(2H7X1-p(9D2?PC&8n7Ulf8;G*4fF2JUs$GR=+Mddd0GD_peyPnFoD{{Xrn@0!&5645!Okf-N((DBb)R! z_1Qi_rI*J{m-hM+o?GlCFkMgF$E-qIPiThUvDIQH5@-IPE{lLr73~;-J!T9Mz#+eI zhZ_Kv_TW)U1+tbSguPR-RPIj|*vy&{KmUXoKewVQTB!?_X+!6WMLEv~jd#i3{^0iU zXX`68TZ4@V(?3%1fH=;%^Tk`%sIz^B_Jhm;otYkQA1YCrOkSxX#%sC7zw+CzNp@p= z1U(y-!;1TQDAU@IQX1oj&XunWu7?P^_||MfUzRZS_)9C-`~v>}f-{iz^f<4HcSjZY ztMVR+5wL&T>w#)LUPHQ|KgMwf#3$V-{bRSG9Z2Y;uxv}AmwQ-DSoJ${v!ds>)Iqap zP7#9cJ~)$T=%QX$=`|okk?2C&gG}!69@)Q6nvRe;Nd1#ANqchlUi8^p)H| zl>wK*J;;tXyC(iL_4>0bWGG_f>iL(vyjELkk)$g3O@^o>$L*cFTEve;|ky+8coRivKg`)m>Ey0{!pIl=nuGqqQ^mhKQUL1lr8I z&B&oldYWR%Az8U^^9J5;oe$N`E-3Vjip3iYc?fRNE0z!P)y%9U#PkhQFZ58=d`$}> zRzZxR37}b%S%-tdMkTa1>cgKy00jKDSF*@vLZ zn0PveK#uX1jwzwlVnB7mRzT=vz?*O+Zl?JxTY*LMXUPOwurc##)gZ$2p627+dL%#> zt0mWn2U1a7yqxvcb;$Pur|5~FVuSJmL0QxD`!FD_ys?)JB@xg0_P>#LO78KTf^-#A zNf%I|^U>Qlw9MoYd$rNEztx|u?GCMLK|%dLHtrznog~MjxgG;N{9Vk8=Zh5jlfM{#Qw;o?E6PwMD4mdm(aH07rmU`L+66FXf1BPL%Ef-cVebi z(a|7bowvE@cn5M35aXY^0vyI=E(NzFwo+6&(|-)!$83Rg;)atwJM*x>qHV7Io&h8A`J*a{^!-7jfyW#y z?q6bzq?8l9e7LqN1oYJWa04gWwrD1s@t_!$}u;z8O;85 zOUdNvq@6_p4{RL~)|He=``~JU}wWaA6HqE1I1g0 zVkmec0g7;*+;g~y6oHZOxT>=~KEx<)cf#XZFA!bFFkbEZmlCs3*O?ULpFrSZ_!=Ee zDf_!Io2<_4=VYFVopvG3ZE72H&p2tP-N`wY!=3qjeA9ZlV^?M92V=#r?M(wilVkm9 z%KhsR^h4*6H#yWVe{u*)o*uO#l!%L<+ixcYf9T$7t!FPm7cwXpdkZI!>yb&@g;eq4 z!rok2&StI=vx=8@Vf;Y}&oX|U(w;}>CXx>nhwVJRGwD`X+9Ni`O&hdBxP;0qTH67Y z8iE>V7JrMqj!d8X2*1GDtSxPd0ed5<^Qeh;CO`4?QdR~YrrV(BSWvGvlQRrMzz;qG z*cR|SeLCDEfmGmQmjS?)-LhtD!$r?~kD0Ie=8#$3bxx-A*Vi}8Uq8@arE6q|0ao#O z%)#W4mz)%{)eU==Q^Sjj318o&WS^fTu@8V@C`S_`t;eNfNWC`FWNV)ACmk^Qf zPlJJrD9QwgQIkqau-tc4>;X$rj9qctW*5eFq_F2mXgsPGE-5oxYCjVaQ>ur&qa97R?<@aZaRT3%n>)vv{~7DCU^`KRt&o@v5v|AX_p>o)Y3( zkpFlCKPvvB7c|MyR>lCWles_Ro~*-R{BMfCjecksV|eNjKl4U{+Xu`NPSM$7qavS1 zG{q!VKhm*A+r6M?TidCvXirb0I_WLHgzjh6n_B!hs?Fr|&(x~lM9u|mwJ*nYPggi<r+Qld5L^JJAwf}0E3e57KzE5-|M1QZH zJ{6$%qv1AbLvmC#4R%6mAb3r6)(7e946f(AF3Y9IL7O}03BSM|8DIf-@pE2zcEZuZ zVB5O7vx7QiUst~gmAiCf!#%^KHDhvd_Gh-N-#Q;xsEDJav(x?MVwY@~+$tZ5nVlJ4 zv-cK`;J^MT;tyqiRimfz7^djtTf!bBJEyIw<=*po@0aIt!=iC?-$_rhL_$$=*^sDL z0Po1%deq)PlOc1l7z}u{2PIU+wiLvP(<=)Kr*KEG6w~=7H}5cY-H!T$;%EHR8odU? zpO5CM`D+Z!Fi<}s($x0~lnC7+_4JF+nZukw4Qu(JaK0FS^cEmhkkV(Gq=_%Uv*7Tx z_JkfVOHc0^{K#uBJ_|&py#YE<2GfTIeW`!)ox1cSwIjT{UOXyw1WjXTWJmw(zmctN zb(rgO7C-Xki&#_gYoQv_Wx_~tlC=VSTi3C7l$+cuFs}l<^Azk(f^awi(@;*0p%YF3 zpLiSLBw}4;Yk~Ye;6om<#nsK|MSCEq%tYV+GB@na_fub55wK%uNf{QEmZ&aSG`B&` z7%3J^{3C734b?}b$>Ohg)f(=sKSG$wJKHWyVH?d$rt4e%h7^Uk%O*r~S&%T$KMA5}312G2!m{iak#;o~*$=*Q!m#3Q#G{H**!CVmsJN z0K{gYp;$S30~^1Sk!FAY5YE%n{^8u2v?m9-TmC4-wZsoR5iX6Ck&O`9>XshA-6Y8* z$G_{}G|UiH?!nu{tM>NcVg4%o^OBJqk~8(75t+`oV1ggPP{; z(p~>KM5h^E0$aBbF5mT=uqQi?^@c1_TpxtfqgKe4Yp&X<8jXwi!m0(!@3ux8$qPG# zgka}&781Y$?I7DCqejn;(1X&a&?RJ&Kr5k<;@7cuwz8M<=1UmF6@EX@Im2X7j`I=% z_KpC!NC%J+H9AaTQCQ*3fU(?g2qkSWM}ATMn!|RX^|eE_BehqnfB=~2FqASIh-Rb1H zUZFaT^m2ht=Eil#pNv;;gvL1yqORSBQHlymkW+X%3NvrRZJhlcV=ko<+A_zGaGJNq z_#MN*u(ZPb2PiF)o@?*KXx<`zM{e{(tIVDA&Fj^Q2Igh_Z}}F@(Wp+C}DV&{b$Ty02++NCuh?rV>EY%iWWoPa0=uPT4PvU zH99Z(Z!s427HOL|l(P0UP4T02a>OpUE+|c5X0=iF-#WD(PqN&oe@G#Dy^F3)2n!AlKpQ)pS3x7rll^42_kO6b6m)2zE4ZzeKj(jxZ6&~rTd$V%iiB+Mc1t_0RthxiMPZLiamR7g9 zoqT_&YrBO8C3M_gToc4dpWJ|A_qP(t^S%H{?c9rt@Nw1HSkoj{{Bqje8V3bUV33I# z54I)kyBzgq9EIBUVH3PkwARz6w}_!~+@w?t@b%u*dEY zJTU@PWUtgHD%2x2ruoniFHip8*yym6k!=Sw3_Ui|1`)*FNv?b}v%T=HXUKZGzxvO2 zWJOD#B&i8yF(&OhWD?nkkK&)8{CA~KkYUO2%r@Xp=v zvbLbXcy%W5;~KJqwNdqB1nf}@MF5Mo1;Kaw9W}+TlFkl$RLo(S`r6g_8y1-bndyBKB5NOcLYWjk>Y8(1cuT?57)3$*ZS#DQ4RMSm-%F6^dHIj_epY zhHsBp#TtoIw->9JHUX}@&1rMU=@B%wIizZl4x1^$M6PrKC6sY`;Cbfn>pK0u{XWiE2@01bL_`2G>QgnVULM5iYrpw)3djSR~Kk|aZ*P6Aka_7Y~Xk*UlTWX-} z_MnAKGCpNL+z(n|N~uFX#x$+C|E_X>O#054?l$DQT(({zhyBKbof5t|i8>wEd%`E1 zIwRtkXxvuBebxz_Mt{Qe_zh1&Hxi4S)t-H*d|AV+yDx<+;YFc|)0D_5bc^g3S)%-9SINW4i- z+G0p5Xvu_*#3iFryAt?AZ;15=7{zE0sT09gc^}e~u)HTtOxdM&=FwVd8pX8;ZOPB% z_VeoP9xG((+1eMlbjCp>4SJ6qsdE=W!m#agNZ9qZ_O1VFxTw*x<;aqi?*ipQtU#!Yk%6FshB< zZiz;iRbW-9Z?5{JcMK#b3lfD8e0!GteeQ&&UO3TiZq!_zFmkDRCvnatW~L4_HrPLM zW57;L#KAH?eMXExJ4MmxXIRE$AJf%@)Cu~Tk0t>Jw}YcA(UEEGVhX~fGKsTZXWULHe_7&m`(A>$x;Isr^nA!`%rCvma!u17RmSASHH>5 zEMb`xcz(f^WRXtPHR)wR*Dw@kV;AWd)r6g6?CHJ2;U6ZHI&K+*?N``N2)27SnDyVh_ZI z(@&uaDWrR@;X(_errH$mID3NzvfSvEWkG*ROxq#!Ro9<69@Bbe>TgEy>m5h!o4#+7 zzi!A$3>A3FmU{=io-0SoOSsbgF|{J=&No{+MhDeyMN;iETFAJQ!)4D!4E;W)WKMb zK56QKS#smbXVJ72M%#GFqQN&=09G|N9Lw>7qjhos6*r4=OIV}hg+(xUD zw7eWh2SRjrS~6)1KN4(po)SLgV6985Mv3#d`*|wh#nu9gvqn?QEiZhPz_5E90mP&* z>F(wtWwgXUvzcR*Q3&zc*x1&x5KKnw$a-;($%PS{cwaZ5S{EG8x3{=-ua{@5Tl@eD z{Hk4KUlE6v#6ZrU&t60($lM9LQiKC3^~Y`I`ZpBZo~kO@vNl5~LS<>r>#v?|Ne?Se z%+NI#uRNEPLs|ta`avb9g!&0gWPH_Mm6f^q!qK$&H&(m$Ccm`~Vp&PpYWd@P@$ZnO zP2dJ7BRZk@Glhr!H?|0IdG+mq2&;QK><*DN69-v0{OR++)r((F1_;%`9<(Ef3j=(} z(frZ^VjN+KWSqASGFcxVU%2+Qd%4qDqv_f4qbqN2lj9c-d$%m^naBFSygiau zFuW@JLy_IA@vhogp7nofY7|WFW;a}Bw=q3-ji4BPytlW2{2BjuakoU51|ya(4}>ag z_frpg#dk01ZF09NPW;&kt#sjxHPV0z$Bn@bEqRHsreyDC#H`K2s?OenPnU4 zrAx?AMy#$*l&?G4#xU5VI!G*6EYSB=O@g;jw$CP!BS;WGb3DGVz6dHLQG*JWgXmyH zrb=Ecp@ZY6(v5l2Wgxo9>B=!1<8`zy0sfA?W9lTKYbm#aF9xWSYgVpY znITyYBdQrQmyIKcFTsY^n!_OsqkBkb_lQ}+zTL@mLAKWK3;LwZ+ut{x6rWevcehAR zP7b@O7{l&Un?E*Lgd?`iy&rBG9Ytq71bB%SGaWg4OC`*7JnzihE-pkS z)c6uZ)ZjQVFu$7Eg%kNqv^yv-KJTl<6_&+z_z_eEW($fhwN zKE4XYi_Xj4#Mc~oxxV#cad2&;WS#bI8dS{=4kS139b(Z>NqG_)%gO$p)86_y=n#zz zDcWA}ly8`R?ZK>(^Qjz3>sK+2c;20pOWIlQ!X1t{UUocC(4h7wGQ1#Ezlu=QCI3}V zunM-cS^9xEQ$GSLWa_{E!*$Oh?ZQ&#;TAF16EjNGBj#QWFszEXtVg4^rNJos%kJY`87X2-?6qjHOZ1ZB0`OUYftMVYr`A#hvfulG>)u zv~f>CvDw{rl>hV zDl9Qc#l`AY3r~wjR#aHx=Pi>;%UMUwV>CR=Id8u3pVey?x7A{7AMGWsw+~3iY;Zvv z#&9))Edx?>Qoxx@Vjf3tf>%^j z4Pci(>sw-gp@lJ_Hb9ocbe5<)yA4s1tqD>f>)D^jg)oZEK zWCq$v<58tO#XE2+X3e>3uOi)16wt;r^IPe=VOlN*3z)^KFaT43Btcb;q>(es2af^TkkCLTV+6L!{+VtJ3lT4Ap3ofM zynhMAwh2^mt}egm#P?X)$GY;*JbLs<(37F`5=dDsKB`K4%PT56wjL*T$aYYcm~=sP zwF7)M^~c&h+qK;dQAuskolXcn0B@a)WT53pK%7A9F3JIoET3dKwS!NI)^Xvc>G(L6Hx7mEw%@o~`(Z zMeA?9vK-PbV#TB`>>c4OM@Y$(%z_+8CH$9V3qwS3xg_w*^4G6<+Z^B~nshGNjdkcX zd4QEB?1b+E6K->A3qUP4eyz;7NQaFVp#L~Ce@dQLy7u&vU$t^}U4|sA95Zvg8U2l0 zsgKdx=@rD~1QEf-VMb{KMH)*z%vS53ZN{{4_@B#yur7$MUJ!CeqsdW%j4ZOUyE+=< zE@d^}_l?$zrDX>TiUu=#EzK@C=5IgojLo&cW}#>P_@1;VslP(yEVwuT^-46LM*a*! zcQ6KQR*}9z`zs_1xd}ytO8ax>6S7}31GL0`m|r+PhD-bA2`s6T!xlaqL6O~YMlFPB zt&_%T{rK_Yc+~zy)A-aCQFJzjhK3y@D{pA4(KiP!h1_(R$Opkd z5?vK9z~@j882vV4k6uy43Dp*)jok#nkBO(%)r3lGc5mCRzylUtAR?g?b4-7 ziJeO1GVr3H4YO1E;l&)UAP4i&*0gA$+YO_&=#iZ4K2O#gc`F? z1H__PpN0}LP%$1iL=6PJ>~@{s@1>(uFne#`w$0)+Xk|$_1@urrmu7boB^h~9dJiPR z(ov@L68^#zIW#o1`Q9)VPQl13{J`(hF99IWCIX?aUAHdq(=?FDH$EKu8ttRWudke@ z%V?2NwPdSvqZzkfthpU$v$=@_~VKfbT$xUe1b|-!NEth z3!ttL>aajy3GD@7Bx+)O*c~!`O6a>LMrfXZPyTMG7!d@%z;Ik@>irpVR(B5n4KU)Q zmkEjh4@#^_5HW%YSiQJ7^RforXkHj}2cV%|4OrPCimWy!$;zOI-|FV1p|*L{36q;W zOF!zb#oY*T_+H@>X*rCXoJdfZv%b(9a+v0K?%B&N%R|d zS|-*h)+m=d0!=NnyRTrC>{{fieC5@vR~9&ZCJ{o0pLmK3(ZB?$;Fv;i=YK7o41& zZjF#n?G2$LL!UmWzfZex;iu64{ptW@?=jK5ST`Hj%AyBr+?sPba`75+iV5UZN+8Tg zubW33T^`+~l=jF@U}HiA<$D_@uH-T^`c>;N8vjHho(+cSSUtfnuAAV!qQ-AGwSyfQ zU;tT5aOynaCeMnKqs%khye^jGxulFVUxnnsR+e5OsuUF$>jkeyJ1P7p`T=uHjy<5L zl6o%=Jfg;z*REBA4oFN86ctQU^v4FOXXh2%-c5hwQe>x!POn7-sGsGIjL z^LCa|jWLu`#nWNS9FHD7Ds2F!wt-eD%ntprRuy%1BZ2~mb4VPHAeou)?I%`iVLH$< zPsH1=FR(v_Pzd`YvKW_;@rIP+u9%1{WOEVcNbtiL`aYDW3P|&ekol>BUQG2PQBz_! z1;sD_^)JK}kvHD%$P%1#<4i4pHXDMGO?Da`dJNf23@S(RtUul;<{8ZzKs?xiLNF(* z#md;7MAW$4t#r$71cDvl`f;)2Jraj0aH5k)>W9v`eMjZH zVh;RJ6@h3A?TiSx1ceAqwj>n<0p*fD#7K?c6Zm`}%!rbg^nE~c-ykINZrgSwOw3H* zS7L5vY!Bl2b22Nc5j~jqGUR5kpR&7Gh*ltufk(^!&JmeF{=Q@P?l;dhk~JGR+ev`G z2TR;&89kiKydokZYd3GE()Xc!(ViK=(k+m^`LhJ0WGxuMH*X#CH?(Q*1e-+nSVA6@J>U@r)gp5NQ>11GV~jXROD z3j=KN1NL(0cf9&`*&`1G42&P-thX0BAOc?HFh9`$Orqk~)v0@j2a=?eL z0x!f<7!GUt>dwCF1c-c0=v zT$;4k60Of#8}z&bQOZj-%*()-5}=k2hGhz`a-mupS*m^A!h+{R83>lnaXbZ+f1NJ7 zfFIFIKP&kHwWB4_sY-Ms*UQt(CFOJqa>Iw8rZH5#3jG;ef_BHRm4}r`*w^IXRaW+C zmOBrj2Ap#hh(gpr{GuKft-y5=eWC#PG4;y!z9kucjKO?N9%n zOAxuRh*;Li_n2<|Rjo#4DAXMuVBeU$f}+NWnoi(cEd8Zi^p+G+)d=kxNx{S<+?zk0 zkuELFCgX$s%oxfgW8X^}hAG74v~oN3(vuiCGMQCwPTa`oRKJ0hUxm3*B)cM2n9d9- z$jb(ZWMJSG4$SKGg+nkO)x&amFANGF|9?`AO-WOCgAP%yF3i~z^RO=LPIcEd9RydQ znzlm^NxsMBVdV75Dj?{>ml<F_nw0BO0FrgC^5H|O#8kdaiit_r5?{y=bl#PT@nF8)Z~*ZGaOfb#QSUL% zV^gZZRi+3bfmrW~Ks-|TBf}3}Ofll?YjQ3`I#W?l`9zG4h|P6Mq}-Wp(56uP8G&DB zFQM-vGvZE>p~zP->X$eu9y@ld>hRK!ldD)XFdfr!n!uJTD4fTduTY7LsoowSV6|TT zt)nVzr%#_I!Ck-^*(FP~CFl`ZHRXy&^IG$j6o(>Y5N&SXYaVp%D_`k)kAKaE4aTIl z;Ns*VrUIn>XC6+NL7ZBqP2`@I43kp?-aP4H#oFhO4D04mt~0a*K1O9e%*oZFw%Xs{ zUlfmo$#w#1uFmtU;3)5tO0V*1yOR)Av>z9f%}Hr1d|!_EFp^(Ti5!r}wkE9OkZD(5 zhRUWMU`k1)({K0HYer_^)QzkCl_k;-fpnBZXN^$x8SdACq^G>0wzt_{TU)j=Zu!@l z*wT;Ssi^~>GQrcbi_T`bWqb%Shnc7;a-w@=wy452D8Xa_36Z7!EtA@?&$fp_a>^cX zM7cfnJqy=CNvPt%$dmg>rUZiRV{*KZLdGFSeol(zH_B2IRokORt8o)N)|oQq0ekM0 zk^o>6H3gnl2)DFL6-08T20ypRMWc zqo4=S>~poXD8k39CCTigw`fIU;KrKh;Cng%5n+F$NCFcf;arF&FoWpnzyd!%c7l5e zxtMpNUil2)rZgiFL8!Sl{9e-m0HCXple^t0vmzk6WQpW~=>wMQQ&0&Re&+3K(k>mP zvw@WM6ZU8@lvP#OR=mQ(b&3jCVP^u!DfqvWBVMGOioesNjGMo*iKAgm-rbQt#6Od& z`J@JP)z3)S99-Z!-`x0xRH_~x)`&iQg?d>w;;yYdT`M{G<3mffqBne}!d&PxHb4i- z{7n??Jv6g!it|8QWGo;M%PKI6@oLV{EF>2lBjY0UNwOz#yJc(3S{BK%=D8OiK>Me5 zirpoF+xn_U9!Wqj!DiJ88U`@?XSW~1&v__j&N<*Y~qvJDx!Uhq{-IG z9uI$wG`Qg(?1#V8i57}c)ksFd6j)VN^-t;0oSCplnts1tp=fRFga~ygYb%pVHYNaWw+@EC5zC^#zE3N+?T&?h?zk#w3kB(Vf|*4M!9o z?D8L37;Vow0Z#5VRK5X7kDOXU1hv$Fmu|;D6NvNw$H#xfr5Ft(vHNQd;89>Gxya8t zKI4Pe6?X%k_>5qy@ZqwZU3Q+X@G!uf`Z*B)3H4z zD>AfxGEw>Lv$NHljb_sQMA0_~%ljRiTn;8{3M+SPzoPm4S8Lh@jDvW-ql$YG$VVI=wOQWG@86~Kli}J(*-J#3mT<$0XVm8y1_0Jxl zTe3OJ+6P>{8iUGrNJ;5}TDt>f<5YX9Rw+`7V6tKZe z@~N>cL|9Qm?=vOJ25I0Y08$~q-QFN`B()XJ&=C51f&`G4TIFf_K0Jbs&qT;kbnGhU z+h$PvuSL6j;cqW;&MJbEV8i+r$yc0bxiK3Q%Wz+*rMRmmZ5`z2N<@R*k7Li0qvo~| zKPhAIqQuyq^>6~~@p+d#x)wq@v&IPTDr86iiTLCtL7$lR`%iT2asSHA{k9RF|F4(q z9YPHK^!L(|KFSG{tw@caTS!51*8iC9p;|c*jRx4d`O=jfQdXmMkx1m9Nq`_ zVl!r~;d!x=9Lw~K%vI>z3J~A}$2X~9;$if(--g7dh+DtkY*atArAiREfr0Etpx4z< z)kx7`SHurT0e>(j6aWH=+HJ+>dt{e$AugBvsNzwL9U3yV$=7W}H!*rjufWb9&{hoy z)eAOc(47ZM*}w0^8dt<}jR)gjhL*Fz21$g4>lMs06a$9aR5^gVudnZuVb?il zr?UIQ6HcWgZ=0!CTy-NXU=eV*a{R4*ep2|@{7SR2PtGA-QMK19$2?h$$>(Vd z^LAGDalI$^(%UDTarrB$hX<|aF0CG6d3!zb`oZ*ldzU-h3Jk>$j@%(<={aN`$8y14 zs)*n78Qi$Qq6Hig7A&jM=*Q?kFcvL$V*AG3D_!Es)k)Z!gXS>S5uO)a=b!}+6Px)e-P)kZMo;YFWzBw^26ml zoHG4&B{p`<_a5)F=8C-DKNNj%FMZ$oM#(a;rcc^+B5##42*5%zR=SD|_vElJlQ`>Y zJP+U)jEUvHe$&=k5Wne7iDDEOC`~Lg>Ee*M_wR=`ZBY55_7p6$>W{fxTpeLE>vIS{`S<%=GsKb>KHQz#uS+;F-Y6k>Aym&U zC<{ABV6evk!z+sznC@C)*_ft)^UDC~1u zwLvhwbq@7))sP-NU7W~3DP`alm&C%}<*TKbyg%+DD#EQ_e#Rng^|<&-3fr>l*+}kH zB_7Jo3Nqq;DKLj~6B2imb{kyox2*%E*S(zgBGKdV+{Dp`NOa}nt7YdGc>MO6sFDQZ z_!#rgA)s1{SANwTNSulm(fh&gm3lg-XNfFl?%l!U?QfN11S0oNK!U+wb14C-LTcF6 z0%eOxb*EFv9SQg>PeL4JJCE$)D1jz^3?5!G>$JB(SA;qFHj&tJf9DU!CJaKN=1z3 zMOF5`P^EO77)O0Z&m%k9(8j8r3cA<@ZuV!Q zM~IG`v(16EeI_2vm(J#5p5S54hIxMDAsC5XN)5eK0)>Cy>lQ$#u`Q>*RlF_mSMm71#~y z)AO=Yx_!u5j+8VG@qgMY%a{)dZ|fqDJ3yc~Y&=nTQLWlWjY&ek$)ONA;M_3BM<`Df zzHLK&UU7qylS}yx+#3z6{QlZd(%AdJIFK6i5@Sb-o|+N=9bkga!{Ei~K`r(|3c86a zXs4WvQMe!Kejd%D?T9(qF=J@h8G)Nid>X1zpy5VDs;{pL`m4Dpx*pMlMjn4T$8|Kn(jK=c+Oj}KR8+LOv%I{#Z3@1P zol|)Ff3;VF)8OH|Sw#OB=iyax<=8HIz}Fq{oNMgI`{Z;qFh5A+*s+@?${;!lh>5*F zhpAijn~1qeJ^+V7+b$bgS9I*RZ`Sia^M;q~^^ni$VK7Cy!6~TAG|<)61)wvYe;*SD z1xm-?86?uqqlw0JKQY>iQ>V=0tU)IhiCFX$;K%1vFzpfcI<%~k3{*@7(ZRK4 zD?BKJ00OigUL0pDTm)gJ0IRs~8HkVddDz_rMA#BtN%)UGK+j`MB8l5?N^50PbfOg^ zh2x*Xx@|-}%oIHj6m{ITwLZEz{6}Qs;NPa^%EF6IWTK6^9@ux!n!G^Cm)HYQ>26V*F! z8z152&9DqRmu$pBMh0b_Pow5Y5HFHRGR2d@%rf-x-V6vS`GdbDs4P0V^<4HWv z^m>b$m51>y`LPv|9)*quNr-sMXZ9DB`34nz;o5{OGHn;5zRT$U~9D7 zYD1k|KTTNhs`p!X0+??HUcub&LgnQ0s@mW!rM_mvL9+x&DSR*aN;^T$toEYN_{U;Y z_aB~{(Y1$LeHUKmA5dSw{1ir^7E|6i7Jtu=i+`IUpIx>0@3jI8G4#`IZJN>bA&Wjf z^~I_e9LJPqY*a_2`x5Lea?WQkPxik&Y1i;|yl1C;XZ^F6ANJ8TF2|1EC8`=KDn}r``)St=;(QzvF6&n|Tx~hb6u?olL2_=%&`Lc5S}1 zNAO|XUDYbF?|VUC<)jXqWqo+ku+439xaow<&u>Sa(V!<4aq&kd=`DI@6~N3{-JTCi z#tGH3x9m|bGTYm;pi;D7>I^Y|I&QNVXLJlrSw3XQr0uA!(FftB-=05z`srnWlSkba z^4@0V1%~Tw4dkLF@a~u#Oxl0&`^@|f&F-Nr7lD`i=$Wt@LbrbJEqTo)k+*kwUC~3F zsEW!wWhZkn81OOZe5F~cG$HdDhsy=su0HcRWG#`8YQi@Gt zj;GoYYPh-dFez|_^mCzu?Pl{MWY=_4bcNHf!`m zkjj^6%t#GP20Ej|ew6W+6=_T@T<^*>QiAj)fEXRTFl*e(ryZCFzI7DOE#m^S>Xo(L z#E#hLxOvOA#^4sumbaF*e>5kk<8Yg9Pffdq__?l2^}c^FhZFP+@!&f+{1k5!frM!O z=rGPz-gQ!}Xh&CN+U3ZGHc|j6dJ%m>RFmFDA#FpIzHH{~;Op<|{oFT*XPsrdfpjte zX<1zLqA5lDaL=53!ydcE@%z`}su%i}nha*4imRR-?~g}^Pkm92@#owRY_kZrmHjeu zC#h`k;BHc!8mjMwr-ve;-nZiOzL*&gCLF#@#8HJkgs>8$MFV;9+5Vy?d!YARe;jsK zKQnh|9c7?IO5!`V*(?^tMy%_Nw!L(H3_mTUt}T9R;f6i z3&E=x$w|diqawLmSuuvuuFWspTs6R_&_!fTMWZJV#obp#_y+>}_qXg*y>Fxz%`ZK` z|0CzoOd>IYe(=VGLn>hYU|5?-D1-q?BtQ|HJYtZh0bf5|_;bixcLF%e2cp#fgF_d3 zpH|eFdfSitq*oq7sI8wRqwS|aT=!lM4u=QWZ!$@oj7!c*PbPC zKA(l>s|cF|ACBX@{~pIX?=A*5$ePog0#@^UL{56k`F(*lwCopY#@i~&%j2}BFKai9 zw19>X_?L=P z!CTnp5`yf#am)AK-d9|kD8{mw>Qm6fXWCJ&>iH@oBV#Qm=WYPuAz09gxLXq2R%gS^ zLclpzWyLMFt*W*V60ko&*u_es6J2Hgi#dZ2r1(8z{=Wg^SsSsqwfWLF?GX7o(z&Hm NkW)RDdgS7b{{=3m(0Kp= diff --git a/benchmarks/honest_bench/charts/json_pipeline_small.png b/benchmarks/honest_bench/charts/json_pipeline_small.png index a2f3e1993fce2915918d4806a1fa0d7d8622d767..ef623d6b92b37cbc1cc89da5925e96859ffa8438 100644 GIT binary patch literal 50347 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 literal 50989 zcmeFZc{r4P{6DIqqEtwVEXk1lQHsbGDr7gvnx(SKp3zWJSt?}>AxoCA46-wnNRoXS zyKGqolVwas_`UDv`JQvG>-=}lb)ECqZ?4PJT%H;CeShxHdwDJIJ4{dKIx`a|6CE8L zv&IcI13Ef}P&&H3$_MwuZ-iQcf5Ja<-s+~_hVFO0{cJq%&}rLv-*<8Mc5$@j^S$Hg z<>>BqK|<;u30W~d2XF8DUUHI>uK(vJB-}mkNq#o>X@|eUc>l&NFFHE59pq=vftbr7 zbaY=6G}Kg#9=ux|Wvq=^+uB{p!}eK;EFCH^%hcvF3q5CaHBUTUOhY~3Y8-z^Y4pKc z23;Z_V$#(NhRWQBsB1yBO5@`SyO+IwEp8$-MB;vF}k+g!|LqSVZ;SKeF`cL;J2w zHVM>>_s-$#cS>HIx-g_IGa55evzLx;@-e*>9bN8=cq5~d3!NKF!%GSGQi?e*I++$) zREc^0`eB@TgC){5ug$NN4MLY#%im!hH>@9RbI2@ z&UiwztK+-V~1#`J7+(4f6#g|=Ju3{ zeX(w9`6Ib*tNm_A3OBwPZg!OJSNmFbI=a`7>Szn1RP~+ST*KwoZFUojiMrZUMeNWe zw-EmflZQ4~{hmI75{&H7y^KzGjEz7V8QG9JTx^sK2L+O&oq?%vV_QtU5 zLT|1c*65P^mp;=xuP;v7^<-&(Y>MD8j}<`&TTwqB;Pn==%rwe1FfOsz*qVw| za%l`@ajOsfyK>zx>4w63h3Dcx@v={6p=Hf|(z@U8g*^PmcHykC(D-`ATD*0jN4(!S zmWa|q?*C7GU!{Sq8KWzzqO3#ij6tr!hl9iOnJGF^54_Lovybow{VlGk{WBTSU*SIf zp3w&@cx8LNr!Yzui*b5QM|Z>Z&-#8kKIVZcuWZT7BPDmVwqOB9&!fYHh3`)`GMZQ3 zPa6%|-7a(z@7&qmvh+!a`l5L(=ljyn&rdc;`1^KH`t5QpCQ+7x1#48w*(vlW zGuNdbIw@Big`cvX=49O-u#3EbV zsJbhfB6+M2mPe}GHWM#8=lhYz-YiEx({+AZCqlFe+NRJ4mVVmJ?ia#^8m;cO%ags) zlTtIN=RTh5Ld>-x@5c_{HhLLZ&xCiISfQf>-o_Y&G`BxRm;GvQ#+nj&rPEHxR(-!gyIWJ2ICdy;hbGS+h>|dJQbNEv# zvTLNkJ?fK@c+j~&|CU5rij2Dz@p+X_vfL&A)#-Cot*vyPOrnL?OOgg|yQ}!<HwQ_5&!!7&mRFM>tzhY7uuBqIIMzGbq1 z({R;H$gP*@nvh3Kr?I3(atx#K=LM)eFSMrTFBUfE4jbE=qu=8)j~G+%3wnf#Qb|m~ zJfW+|MiuTam4E5tGT|8oV^wVXR4e?1gvG$ie|`rYU7!u!LrGDnTKFk*cS7H`Yj`-% zRE~Z|K5W5dh3tBH&OK?vU2BsH^->>pNSdsqjlbsN57sLwRKD|?tjqRjWlk+=^zk%* z5veSCV+hvK)sW07Tw~>0T`}bpB%Hi6=s1KU?*L+6jqTapHkFwr&_2Iu3W?jbc z8^1u@GVVyG&ES|HiEPC78u`>?J}>M%(T>R`+83CWjcl22$HtoWZ-)jFNoRl4f0<1U zTDJOvai3Sn+UgrWRCY#>zx>w6yM-^c?eG40J0Wrltz95uK`a2Y-eGu>H`Uu zftxdh-_cv?&A(^jt@jhO(H<2JT@A^Py4EtbR|IE`CN098(VorEWEitq8$Ht0Dt06^ zjl!lIv+Rq;rf6cFVZ4M20=>J1t}-T7bfN9^3#$yX?0Tu{AgD&wuc7_mW7aE6K6fUw z@ln+E1<})NV~gv!Ktq&`x3rj9i|HQI?#gJigd9=p$@1GS3#=N?ZoWaZF-xFV!|Ku6ys(vdYuo?|X zqI#s)G2?aELe4%d9#lxh7^Zcp2TJb}Pkod#tsWOf`E%gN>5~(3_}bNQtw(vDri9Eg zvgSEl!!6ax*xS7x%r3dFPvq9)a@_M-r$3*Y7tzez5*i_pM7mC$B3Ek`svFyI#X=z( zL|s8M;Lt>XR&aU}Yp;?79v2eL8eZiRa zE|IF`0AM^4+53d{HIb(>#N{1mf(MovrJNL8`| zD$ghBF*~tK|4!xHpQfi#gHDvGpkTh-`IAoRvgoUMw&u;kg)L6o++7~)m}AcLVNt7Z zR&+||D9|JtaQsgWy!N1gH|C}Rsz_u-Gv?ex-H7OX2L0WCtmL2NL|HzrbwyX5WJjNH zG7v;L5d!gy>Mh1)*xz^u!;%~9rJCNN`dK1_0|o{f1^m6wd$qhpS4imo{l==ID%n%_ zTg59X)k<*B6>xWZ&!cEYvALQ*LefRt6pVLgwb={C8cj40GZJ)1f!^OeO-7PDHZ?UKQT{}{hl&LeO8E9E4(f)BAuHwmwDA* z{9bSM)q=Z5^WbXconq59_H55LhOs7$g?)Ux zs$)A(zTqOQfsfWo4|gc5x^aXSfM?sI`71AYXt#`o+p^jDPvjC2>reF1d-u>?ybqoz|H3 zm>gDz9Y$^ZdFeXhOJVf8fNhs;;fXvZTS6fZW-jeL5j}i}pcM0NgLj#n{Exom#M_Mw z%9tu2m(eGR#8xa?&o)}QcW-~3K+*FkzzhtE|Z)2$N%eRjmV*5jVWwe(M$CD1b z^$DtIuVeQmluPW5rQr&^mXRPmN|JvH&E9+`J?ER73EM>Of_{t2XknBv?osb+U;N(l zCEv}N<0Cbid|VuCOKuxoUQYc>jk4r?CaGzg%j;ra%cQcDXTkzOa38}~j*6L031~-4 z2nymkWpI}SaEM*?*6 zII9}GvfR9Dx|i-z@4q<9@wEsSw*0ewAn51HD2*!3*a4Fo$;QB6;%dSS9t(PTAkDwvI zHn~YjxsF<14}8_OHdj{tn=EyjeYgLlKKgWk>p%Pf_39g@wM!Y84t3vp&F657g{Tf-{9-zM#W9$8go2Lny%GhNe_6Do-fN?U16}Sw(JN!r*3f0r1kKFBifI3Y0uBPq8o(!=y%$#T3-AbZx zvF$r>#2f7k4UAXt&Hk(qJ#UhTasJ!e6*YHSPmFgul70JZRoMr2zEBNC+`IE*>QXhD zNPYR#hH!S#V7Dm>8I8^fx>HU}S84HZk81u_$kpR}q!`N+Tcq&d_wD>blJ>8S9$lp- zS(Qcf0lam+;@l;g`ETfMzRqv|O3jSSZ_>7>l62WWI(el<>s`3} zbLtCU+lE9ktpXIuBWXUt=)I1zzC}A_xWhdm_tF)kt;pTCV@wTr?fic}K43xad~1MC z5Nut;{J=$BRx~cOI3-=2-I&07mK7b@|1D?rAKZ*)>6XwiL11&PD`RT=Eo)Cf#n?jB zEzQYuHpdrw4TrSs8Ip`{wwSmZR6u+G+?<%Bf7Y7xjG|AL^I1i!LaZx{ zT;dcg2yEcw&$sDb$emYOw9;Teskv3p3z~T3lIk~xoQubFDJ8u{zX66+r^KzKWj+^t zzM2}UqdFQ}gl^E#xG#C;1lJ)BiPAHw&nl;Wp%evmQ(VZkYp*1$mUP80NRL=EK44xl z{!pxBX)UgRPz?@jx?vjI(WyZ@{?s7u4B#~W@MK)?sE-Q>`&+8B?W~UX(;k_lxb%DI z9W|kRLtiyUYS$?_hfY4~u8B4FqJ?^`NO-7{32Mjqk*gBej;WBgnTrbI* z&CqGD%5L-oa0GgP0Lb`Ymcqe}J*jiFHN8r-g!d*UvE)+UI&N4P7)A zdZBifsg^`~fQhZQBHNFS_ZOHyu`+4#*d9H!7*rr~tE{inD|a|j8|~E^Cys6Dyxnr2 zEHLy|%I;yy#5dYX)^R7vG&XLhG?sXQ;+-*)PnL*d*KDZO?qegL0%D{{yK`^OoA;4G z^$0xv2Rdtp=TcVatoi=@l zmKvqRzh5hEPEMF1+wM&57v1!XF1@gmDyw65X`p?tlX7@$nHCNvYUoil$o*Cq<7 z9ZI_)2yZ#DV?4JhX;oV(f7c9Qfu7a0-%G`wh`a1{w?c<{3wWs_I2_GQb?YJEl#}&G zwh{6L5a``HSDz8@EesE(^4d#I_H{yMo{8kRC*itJvQr;!GiCSisq-P)3FlE_<=$e! z1e2NU)WFrzdudmnj%*2(v>uYIeGP=yx4AOb!SO>KMC+iXfFl&@CUAXqK4U&`7kHPY z;9{C8BC9QcVNprFH{X*TIeho$r^m%Zez0rK|BJ_B9XsDY-s0csR6V*Gm#m1DTihbo z`-Rz}!kA8o%|(gcDzRs*nG6?gaI4$=RYV;N=s?+}r_)dVNVxE2sKTAh`b;xM7>JbD ztkH)~h=s1wq%@8>^Zt#__0T>>syo7~xX7xmDI&b7UwMC`2uNYIMEXdLU{m;GNkxL% zi6JxX$-~_HP^p49-~N21Yp?T8b|UK5OU{d)Vd|)y7<-do!u3d=EY20oxR!C9B?6L32L62auOv#saroD-=7QF>{SDvZ7+ju)so(P=Np8@&$hDJ(Vq* zzIcv?ucP6#JW1|xJYU2sMp(;T21{;?AADbexmy9!njWS705qi+mOJy&Au@ zTqD^~tsZfrX|C+VgT0bxfS%Jn77#?N61eAy&W0`7X{0YP7*_ea=Al$S544`h`b818^Fx z@vErc-5Gwxqp%Q%u&Ap*;f&Pmr*n)NLh)hlw8m){87sl%Zg$#2_j+6h?E=B(N$}v3 zadSxxq~$8C{kYIVF#lKYkbb1G@IQJ7pPD{2HUGWN{Cm8A--nz-Q0~94W9c`J?fdVo zawyUP{rCFcAO7E~LHB>(8+=VeAZUTa)UFvT!k#g+(wC{h=2sKJA*s_jtiHO?{UIX2 zN=Q5Lc*YEDRe!~#H`T7A)qU_KXV7j+kQ_hal}|o~`9afp9HWKTP|&5xACI0<&f!xz z%qMWH2odkXrXXy6XOsPgptRhDB3gWeTh0_TfdY#vPYuks14nrlqaM-{hCX~~-pe=B z`gTMfqNpiG*l-cbfpNN8*z_2?z+(>Uhh4OdB~l%-(fO988^};Ke9rz|zksE6=Bejd z)|4YEP078El#!ZXS%;pimwg51M9=il81to z-AxPY5Q#C9zQ%XSQwcc#Q&BB8`nIOUs3yVO=sLE!O)b}^vsTV8^qgjc8(9*As`fN~ zdwPgN%%splV&JmhvPGqj-Pac$ylT~pBUKkhs)2W|oZ&S4bvf{FB>^gq@33pdt-+Ez z;vi2gm-}RGLr-#_8vB;94C?LJ_AcNS-4Oht7 zb!k3$!bT#x&|*-bPPDMHAqBfJc(A#B9Ds~-#fWDFsSl~wqEN-5DQbgcZ7ZDYcX;N> zQN<$A87qmJUFqseE6uzW(2`X8JU_}?o}v&?efu&{`Np6!o!fVk8;?+n3q-s-u=yUu zTu}d*PyX|X@QS~tJ(T6_;&)NJ_b_Qd>F@6^zEFWpsY)Yt*qWMxuP?dGi*1|4VA+h{ zEAMfJB-xgDQFP9AlPU&qEitp0~e|UiWp%4*tI{&>}U>IO6-=tuMP* z-QDPJDAd-E+Su4!@?A7Vq_C|Q5~fA(BRY0AXH#$B^Ey8BC}1l4>1a3m?iEkwNY?$~ zpW8q zkLpU5;#tWfz=<#QnOHM(j&C-f zfcxO(VY~Bp)AC2a)JvHm$@;&O!@iS^Vaso4zPQ8imrmpP_|=FRuu)7+Bq|FyH&E@dsy1JU+h}5wTI#Dd~R9m zP|R_q^-fi{stxsKLEInB<6FY7aAsvV`5g>TAz{NT093Liq=75%TXHh*(%qH)TCc5Y zF~-})-Sf$nzh)Ww+EM53n!-uEP|AY_5bjQ8H%CQfmXdEGC8aOduvwu3Qve|GdlTVJ zSpESIi@Ijou4VTWw*sa#pcX^60t(%2oJt;d7w&>hGU9h?`(;;g#A1z#CYGC@r-6=- z3HI^fp44zqL7$rg5m!+&Q++d0T6m-yI=mrqP#CG$Rzv`;$iF|)V1o!YHP9V=ajTqo zRs@Y>^$c?T1CVnXM%$s69<7c-X?=C@w}-vN(Vwn<$S)aI=1RWTYFfR39`E%-ilzc=n36m%|L5}ZJH~;ecjqIEUmiPm&V$u5AcRbBpyGznHrPo`K<`l3%+?`ptUH)~!%s zxF*V}OT)7fFAp6*_j6L7@YVY?VfH8Ra&=2SL2|#$vQu}Yc3~$?QFcO?-_qPOs5gs9 zB47KeulTQ4zSYMIlee>`mL#(xQ78?K@q}kbd6)Z17niZr-T-TI8c04hK5}uNCpSOM ztZefHbSO|m5R-<&IA#nak7@wCA<37$1jpe1l0VgFdlUyy-NwgHaGNjTUsa3|ACEKd zXXZRk-ctR3HTa}*j1`uGrtbL%Oe5nZP`9f;UHe=Zh2@s_J?xi^WPg&&SnXhi3zS=l zKS%!l9;xxeA1W!`ZsrYocMgcMy_bTzP@(L%{~WNVDVr$IqaAqdj{#-XyGW&&J)1VqWY-Rr&U|qe}+CAgi%T;bkY{J@U1xzo)o3X&J(kiu{ zGvA9Kt6ylS14ZyVgC>o2F-U3Wae@TRc5(O49T3DNZXDT=yU|X+0(O&;c+F8`aKkhZ z!1^(K!Wd^HT%m)%uE0Ye@1e_mLQTkQj9~TJ5kklQ=$318-q``Efn!|Qm+?hQOs~<% z2a>pH5#N8+TFt76ZGEWj>Qg3`$@)(nx3T*XqlDY7(Q2Pj#$Rt&C$C!WwJWBOh&7o} zwz36=-EF&TH#IaQyXJJa%(Hd4$HVUL3cS*}8_=SMDt)3LVL1k&bH4(t9n?+Rj86j^ z9wqV8Ok&?pUbuU+Q>|!2V5Jn96d(S%UujqH$AGj~H>+{FI8#7)M!pAFj#0&Prxtgqn&fRr@3fSNw}PQlYYP4H zXC`+?Re~fb3g=3K6Q*w-BZb6KY1E*XsaO2FQEO#|kja)6lB4Rg`P~3sgmy!$jT}$` z`$Yrldnsa*T7FU9ejZ~qntRk9efDcF6kxKO?mZzx&)`2}0pyqWlc8#MQz!7aBxM{E zV}6P8?_A0KaypM6zq)>}*M|UzQ$*~;Do;fn-F}0aNBz0g{J*tQcvS)fX8|Qz0{ikbnm1Hz_{dL+@d<{^1(YpHxs0y#Fq4ul^l1KFRk? z`Q?$})DL{+@o#CrlH5l&FcN?3z5Nk0#W+U*z{E*#(E!k5=}(sRXrNxMwQpe^_jKhl zJ^oWSHghbj^DWN0zOLq#;?&u#!~HuC&h{VQom*49^p{OazsWY7W3Omn>|&oBD%*Rq zcWtR+oHqIOQ|9aV_ePVqn!ADs)JpGQxlV*l${5gCDN~Yc-~9dM=vj;FTVxamdgi3q znW~4ItM8k&H6)WiNf>0_2vLiqnuTiHp2wM*Yy4ASsP0?D)^7D9!^u0+R;}qi#w|Gc zI2DW(cXrvw4m$6T{@Q+-=&>q;P=Dn8h^CCNk<-Nfby7-rq9Q*8d+Pg=o13n4QMNr@z% zy<_(oaZ3QXf^?NnNq(_rkr6x@n83}}*JqxPn!zh{#?L}JA?!!8JaM~s3awkNyzm%! zH*w;Vn+kuu>lcCw0)2;ez&R3rKN$$(AUc!g4vRu2S)0%K0yD4_8Cq3ozvfU;>rmz9zT@$^_<}hvT>wX1jxPM++Iw^3vnJypqxCdB zv(nXRk{_GRqPg$yw%8M%3g(PEM-~6PCmqO>JtL7G(bUU}CTMNvrs5}$Hwn;cse;+7 zub$c-a<5|u8Y+ZMvH=OZazNROuTlC^xEmoT|9#l_@mYuZi`L3~OS?$rrk%>0bw&cR zzy#j|$=mFo1#AG)pN(}d$SgMLFTBYc?pb?3D{yAcM{q%l+hwmj#SWc13RFauVt2JW z*1D5QPgvd?a4MkV9#EU3E4K)kGNfAyqwR#YNWFaZYpT=Y^yf*nFzt75qfk^oK>`PV zKp-VqC1|QwUiQ)?O~E+Qgz%Pa@-i^%_dCh^lVsd|$=rkk!Q4WYl7j1s-Q#Ww9Epbn zU)O!iCH?`AmkS^hl}Jeg8DKBcr?qq5|J3IVl^OMp-qO=6(fRx)p0EErwsSt4UNDq0 zQK%LZAH(!(px92BHmJwP{Y|TL{)x;02d6tB*fmlnAy_fw33mQBN1uT64x=hVF{3&g z-ocK zhpB%Mo${xr@s#EZqla++1sC3=-7n(S`21dK8le?pS;}lfrJutjP&4jD4E_@sxmO*(x zSrPo+=X|5%sUUyEvfP-RNwDmIo$eg<`prm3Bi8deFTzvm#|Q!DR}qDW|J}nIE#nEb zL{;w&_nS?#0r@<5!O@$cv$as}RD@`-zCm4U$7MfTT@94^J?2HLt^uZjQ;m4tcYPl)g^y==l zhaW87p!hP(Ic~(VSQYUu94VUY}&A!XF>ovP)!5p#oqQnDg7meyB-M z<()zOg(mdFy5`kUx?DzZYjv$g5tw)`KAc5J>pOB=xi-5_;%OhtIA0ZtFztr#Lybxs z>1qfv@993^bUXM$%mZub0mlkWb?(=o15&D^>M(-l~wE@ zU>frmR2B59<`L&}=0%!WrR!#tR~077EMk`z(d}x~nUg?%yN=h5qAu`nxvWPL!BCLu z1@-x5N$`(x#5l!zRv}=cR4Db~`To=-akJ9DFz2Lq{R}420-f zuJyfJDErrED!KPDdjoBE;>&Za>z=)N&- z%MTP)<{D;$!xYDFJ5+O+?sdtz3C(9pyMXlEz+U(5dd|$j`ee>~N zhi|dj^CR3*0unEDEMBSG>Rl{16Fav*K@p1yp@bJxE=zFsad1FS?JZR;q63WnQk-L{ zk+&+%?n^*27NSAL?h56~35p)&nryC_;nw>){AX6o!iBsIR?e9ZY+D{-n|5nEH;xF; zZ)rKv+NTxVKc`p|;%(RJbQs6&qBRi$!rF^4UaQ!?BmG@j=yiaWYj;#F&Q> zsAKskJ^YmRr(K*#l)nL^=F-TBiN0>kLlsXD+5WPy6Xc65RY`~ zYlTHRIt>!^KSyM8-{JI9{ePVz;y(fmpQxKAkqJ?JP8Tl*{(Uh1+bvQtpx3|_AS;Wa zO!m!$$!BF-ROLRkY^j%3(jnUb8N9wwFTP1|lf3L0Rf515MsM^f?nO0R)VXjwwj`5; z0@-GzBVDuQiuLT)qzej{#OeOdUnVx1ENsi$G|uqnhcjjV3Ne8o=z{PF#mSnx~6@#J6o4m#z^<`+hOzY^D^fY_TYa(>UKAC$zXJ*~DR`njkki_F%0Kr!~)9`j5CiIvd z8L{U*(tE6tqesyMcy1B<15wakMWo0R%6q4@@TasbCYAEa_nyQ)?%^=T>Vuz;K{nCS z#2ORh-S65Ik`e(X|7uM^tW>9K?s-I;^F$jkB_a-Y4V4SwBv$j{Q^DCHHdtYzF1I9l z`J7GuE{T$@Y=|X7;}bn3bIv1Y!2la5@;Of+gOx|Kfo2l6ux5PrPRx&<@jz6#s7c`> zW>LgHXF!ed39!EX#6aaRHErYCyKS7rxU19;(KyZT$HmQhwHJ@~bezZTpZ{p#k>zGm z5pA)=eSFrb9xQ-&P0)EvCQS^uIdrZ+6>pwGwc0rK~)Vu!T{& zLSM^tSF{c06^}=Ur|jOw#!jh*?dmFSHa3}ld4AL{Qe7(EN*8Bj)U7dopmZ!XT-Q6_ zXI0sw#Htx%Ij6R>GSzH(I3uO#v8$GJLb+8dPN0uuuu?XuVmV2Js4eyvb3|LzUC7-| z(@~pCH??Zk$*>99oZ%oAs)y;YD>SKT{^21hiJX<7e!#Bl{8GQpz>gc~571F)iQT7% zuHVTbc_}w5<<=cKGY>9=V`m?WqyB>EC{P@HvF#zZOYjAh4aEk>w1;_<*cpU!so&l( zm$`h+;9-$SWp_L$L%Q6){M$x*Y&-=*)p-jOk7<9#v%bc?YXhzM&~5L##`nJ44ek4< zKu@`FIE$3nMi)M$P@_Oo0uI$1*x5%j%=LRgWr6i&O!& zj*m*BMd9s3ZJC=+f%nW$LynTb+*|5s$Prl!UgSb@mY|?r1x_p*muBUHZ_K0qmfPqff<$}AaC6G3+{=tHokoAFA8vYz z0tsxMJvA33#(Lpa0o$ymaUQ=xM;NQ^&~t=qY`Q#@{YP*0hDRK0dzeqH&tB!HoWKpI zV}XKndt0y5Kni#&lJ*33CAO3z@}g`T$VZC?ovpn7lS3wW<|o(jXxD73p=u@A;3f+z z3}e?_#(6cwksJ`w>X-F+-+^j>4{84_E7fp!QeWQeWB~T)OUGc@4-X?_2?5lv^EHo| z6m1jvjQh&1ycRSHw-S|t>b4GdZm9%yP%LjY^Eet-7nODrP9yr;&j+!Q5BpSa=5XGM zEtO+@kNZ~oih6)fO%0JL;dS-34u8&&xvlvMGu;jOoPQ^s9!ZBVX{cRayO2{BV`i3% zeLU2d8((VX_ra%DiH?t7&Dp;NwZ^ndAp>Hkj#rJAHa zFuG8eM=t>>Eozwc0_fATY3@95dMo!=r!|IQTw@eNDli5Y!mB%CEF|zPW)e)}={@!u zdV;x}S7$B>>}JY)F<`1+Onc5V`SvSou>|~PD8fhMn9x7yBLTW0QejOyuxfWek}8FK2@LZWeivY7 zb_c;s;AUds@$^nxVjsxkF5uiQD=I2d!$`x@DmPsAS%{I;30y30=FcCm^vEc48yy19 z*!i;ObP=$!Lk&+4`6GjgKcl-0Dq)()yzb#dXAFYG7`%qz`#`zB5!Td54nd`~lIdahGnUw#Btpt7<8+S)6~7jA4a+A@^m!jGZ%rpkKo zce^%6^14F@UkauwQ*bzB)Q$q={)9kpC@)!B$6A3$pJQ!3d+kLL3@w?pM4{OJbip5@ zV?lYh(I%YYImo ze7eAUz8lFC$N#Gz9fF~2e89ZK1c|t*g7RPMu}7BAhRM_CFGfOG@r3NW0wH;+OM`X?dr6Y z2B!;YVI=UzID;GOW75)~*8T$-I9vCmoDqbpjf(ulGzpx)>>eH#ILI-5NMn{<<=H71 zk?t>S=vvat_Yo3fsD9Wd2bmoK%)yMKwYu8R7eFQX`7%y|npHzzj5!+dY?J}E_ww@k%R+rR&~M|lq|~V*Dy9Ai@mqPra_AH8bA)Y z8gNWES*}mUMTeaYq=}D!25ZJ)fgJ&4t-H$GHXclZYC7uGp|AnA=$c!}pz1H-#N>Py z?16`;x^BV63^j(ajsBz1_Sd4=R=uJisufIawKY(0=w2J-%>D-EiruEl_LeX#btMI9 z41n?flqlow2AyFhq7#AQID2hGSWzcl!ZK8KrY#Rg%=G$VAdZM)R$4=gR?)9+mkGE3&8P_8P zFy8PNl_$@E`v^4CAD}EbOA^+jL`(IO%0R%l_O|yFd>~B}QuswNiAzSCTV2tlE@Jde z!lLq+&GrG_hd*n?cmE96r1-Uf`7Mg|~ra4q?OI&6o~uIv&PvJS6tbd^AUmU~QHBLP>3_$ywWzHAF3ns1mLoFZS< zX*ut2ICS1!fQ)`E!_f2%A@hIw8P^IAUVX~u2@DaEPT}^po*#oU(D>krdF*g?^7Aaah~~h1GAx z58MGYEJ(#$M}<;qBzD03EV%`QP`+-eVjMV<9mt~BU!7jwh&jBWdyI4`PQua&B(9H) zY=UZ)R)GBqV6t(-)))1Z7rU-+5~2@bmExOu>fJJ|MM6_K?Ka&04TNWdq(8ftcpJf` zH4j$O`|?aWmg5f7S)H5qZuqoqSzP{<7)(Tf(hxlLKHFqB@k zaF_X1Ex0ll%ZJ^(V)@|`l>Z68%r1{hRy8uxJEOU9jf3bEGX_av323}hi0cuF`oEsz zOOSq>zQ+jLfq^4*g)K_dM1r~oeuyh!Hw=-UnU7t+n+mhEejI3N`n*eHz--l=`?dr5 z%R)Z9sOTRK7w3b?L%J5#-YuxC*y)!yq5dpAKEP81JEfbU6W6U5JuN4T@ni4Y_KQi$h=ZILozEVJRmOXDZZi@=Jc%IzEVO@&o6gZ$ z7>d^y`dT^O%eV}5B7K8N)n91xwuX#z+MWuY+=K;LYKNg@wx5pMFzPqY+RRhd0Ow8j z*Ky}1!v62(72V!g9F*9@b*kxIxDQMe&I!Ialm)7Tn_80XDAGl;%jDcng9=dSS0r|; zq!AQ#H}K7SDnvffw^6%&@#8PbA24ChDZP+>{_o=s8e!MEz(WHHC6ff(LSKjo)=mRG z6iA{K`fFG*XY>egOQmTn|IL%|wnQav2XKP9`}4L@!!2+}kjqIh&_v41w{ji31ZVlE z9zqB9HB?AE_V?!l5<7oE%FEY?7F0PJGkLqI5_DF-{G*vspAq_9^sb(gZCTtoNE?}q zwoSupvmI14YhIDWX31uxFbn6JPl$VoM=MIP}XaGi&d zYq|%8)e9mV<8W)fg4qm>o4!`ekimc8r9)3?Wb{0Q&ASM@mH++>M zSf*zr!d>Nk7s0ls?G-)jXvF`)s_ZAA$1hA8KvL1cYiyszEvtJeM~+f5pjHGf z!$#CgpHa{>YU&yj2Xqud`s616tW1Ti${v@d!UHU{HM1G7+Cv8OrL8-H2~9nHL9%%aPZ_q}HQcX)*1;OWVYUPIlgRFqa+DP)Bv+J>~$JHe4TaHb=zN@1djhCTYu z2zdG9Oqn<&76pqDznBY*D@Z&t=AA?axJNRC1o{p*~+m9QE60_R#U6 z^zV>=wIz-IRzP2+OA9f5Idy>U#&D<)%lEiuDM<|mFeQ7upSTZB0^Qi=Wk6KRvrs%N zQEE;ZDeh2Ow3kQWoM2k$-w`^G_tU?}umR!$g)X_ve=M15rnmeT*Ms5`-^uyPRUr){ zUt7jW{!P8ZkEfN9AtPA>&&nPyYG(D6%+lZ~Uzc&In*5)4d^=hv0(i5%4KdnU%Yg3b zZmgYqc7x}*Dqj`i+(%x@vd2{g6vEHEw&)fbRzS87@`_^rfBQt2|J>WaBTR!LgOv5* z`k;DP&UTmuZ~%u>Eck2`s{EMYAUCj#lZc@dvb|lN3BDX2NrB)$xT&sE)yp6dID`4B z6nX9nw66U5N&y@BNd3J8X&w523TRD!RQoP16vhL#RC@rRSs+=Mki}pbNc(e&y7uSs zluE_?`d5XpI(KC=FL+K&lC)zKbjn|v3OFPz4pt~aB|(gfrXW5dNdTz*G1KwqQSBh( z_!Jl05+QAwL&up9>3QSFg$`3_k{%8p;kh#K?C>epbzdw08FmtMC8v21K-iuB02PX6 zUxA_bA&8o#NTr>FCMf+6n(PRIM5bkpbM(?=$FGA+4tc)%$_$LkEdu}Ux#9|QIE!HEtbqQf`A?ni z($JlNjm2U_K5y8MN(LO~7XaLyD|ogfc9>t(Tz|=Vhk@z%!HSzm0+I zSG1$YM5-{$BbSlh@{j>~l*I5ECa9{gkj@djU=C-G(2XCVdHYJM1GvhI@L5~+QSF~a z9`8f&HZts315+GJASZ8t;ZSYhE|fsGUG_|5&dY6Z-_a|#5ie}m%yS;hH*m)ClC~M> z_&&U6J$d7yCcWs1Wg*X{yLhX)5m)3D6V9^1*<4X0_DbdX`ps_66&Slz{N(ZV9wbI;8S z$0JUNFZ5r(2XM|UCsm1g4FX!(VGfYMyTa@cPv8_Ly)Da1I&vj+PfjTXK8z9|{EI1t9Rt8?UB%M~X+9`@H1gVX?#ra>XSbwj1+Yu&?l>j= zD!bVe@*wf28}L+!Lv$d7ku4wcZP(b*e~C(mP@?R|o^0Kkgv5)do{KzAk z-5BX0;l;k;9RGqz>Fj2h$8rQiMf~u1&awZ94v5^?+kN);-D_8_l>iWwO4)0}P$HFJ zp@SW0Pf_6VPJTvm#CrF>;xAGM@`CQF2{>O}zdU0O!|*1aHsg@I^$>B^ml3TU4VWRw=CsUp?=0Q!dkn0ms_6iaaL0g zm@s+N$xhCF0fT2QutYx5E{)zBzZw(Y=`c=y6G;HR!5x&`awvH<?(|~6HG;Y~;FSdcj+&W|i>@X#Oy(#TFu+giWh-n*Xh z`@M(j`b@W7L;97$DdsBO`@I_d%X9lMBOHr;gxna*H=vr%#tPp=zNtYf9731xD4uGB zTdrrg0}YhBk6LA?#@6ll_Y78Zg=O$lCW=ib-t_ggtvBROZ|~oT_mOYJPR8Azzv4vq zd^Eck+Z-Npip^~(T|(Ozym2igTwm|`s@oNhbDLlRtI!hXf#Yqarn$k={1XaCq2`k` zS}VCL2^pP;I7WJc?4Ug}RLJ3M}0Ywi~gSAI`IG{1}8O zDqArkpsq^plH6Wk!1Y3bWx*DBRe_Z$Rj2nQgG_oUbd)FYlRdV@Rw3zFUWIyURAg0? zF4pSeU)anQd`?Pi$-wt&NY!3Lfm^NL5DZW<{fy)LM~;HD3gqJke@!$hu!CfJ^Ruf` zcSVg0Ux_xpk`y(|vtr1%((WIY=z~20Ak93=JTqCC_3{1J1%MdH>f1PiS7B4!%F#tN z0eX1jP3W{fI7HMEhyg;3_iP~^As|@#?df_kshx1!m!K`)gUfl+` zf>5|W&maH;%f1P%m@iR+z(~+6*g-=|pq9ImxoqU<(YZ$N8F8Gan) z?w|LD#nK-4r-0Yg;{km2J<)A0Z`9y95t4Ll!^rMKv9JE$Yq^CN!&Pd4u95&2F{$6L zRW=sg_dvIyTjuHNHTF6Ay%$|tS>`5aTlExZ8EL{cc?7-@-E!{}y>D}Ff?HZ&DHtmWd(NHh-EEwG zP!9g0u&jAG!d-#f8x zXK>68cRTkXW)Stt!gh2)U)%U2lZOZjF+&E zruae_p2EAw>51$S?OmxLCZbWiD>hD{b1rvVfZxj+LL&Y@cj5Ew4fv%WIEIFRWuzi< z!N=+KiEzVj*%EA!w-k**-p!f|0w+acvBw_y~ueG?Xc|GysqU%RvrcS6jaHoqi~*vl`L zZcYx0jS^@Ox(vdu2{2>$zc0bA&b2;ecx?9iStlXIX%)IN`#pG;M<4$E7#fZaSPYC? z5fZmVQmG9P3%}jcs^?VA1FaBhp|zfkBU-=?eZY9CfPPRHitV>BHZ2#Qm1$IvS)XOL z`_G2}B<;qV6W?1mxYsc(K=8+QTGJJG zaF~--&RU}OhTLDoSfE8|72WOe^@h5%-OVXu9|nHus8f!BFUpLP&R6+62Hsi zvI+JY-W~Kza7*d@))#k;rPQYzyrF!7Lq4!5k^kb)!jB|?@FN&MuZOK3z_|BOu#IMm zfF`D#lSI?LB=@jgW#j<)^HI@ky4?JdD3W<#4sosmHG+YNn6R1p{aquemps{I{rR)v z4uGo}$F;SAT|YBcU;OC+df|q<$226be20PqnWQxN1&#d)`W9nr$6o?mzo_g)57Ky! zU?W9BJ?2|?l$Xi;e0Q2w)|h3)ERxfm0N-ACLVGpIRh)E%eF%#<7N+yMH}`SEH55O` zA0=hq^iHb6$aL6rEMDz$87;0_g_KIV3ppz#SY9(AJ|#uDo(|O-diu1eBo!^<0V$P@ zAx1mO2CO*1%B;w^hTziH;e*--mgy0VL)(y=TXMHEyo>&J$-5qd3U;o4+AK^4OKD{t zl5_RAqIkB3&nK5GN*97pi@5t@-rDLlO9=AANAe`-&4z2 zk@hl2Bpk}X0q$2CGQ&ErYQ3Aw0hf^mk614WK&`MdJ&C|Q_jA}{IDIX4>p7mZ1y9!$ z3X*U%@#cPb9n5%1ODf{}V6Q`T9~PmHV?`3jU)>)*sr}&_L8LH|j{pRIi;lP-o60=* z<(yM*PP)U!39rT{&kACoD6|wMXz*w`-b^4DDF@9HIz#f_M8*jDM|q0@7F=32N`wOb zXOH#;Nb7hFF@^c{%T^N7)BT=+v~p+|pSW9yxn z{2uqgbsUEIy;x=2`V?A^%?|@{*oIwh{M)mQkgWRHUEwZJ?qkZd;05@T|6)cjEN0g- zDgY8tG<~Mf>Ae{pI>tF*L(IHeQQuMU>Tpl(LqY~6rDnTLzJ_vt^`n&Z&>3wC+8C4{)u)f%-aW73~ zuc|*W@WlxyC&i!BcS-pCIXONbn?li|V_&9v?GaIGck(=eoWqW{iX_FE>bvVZ-o|km z@^n^X%WO4XYL&1kg~BJ3&D%hvK0ZNRP?%fg4!LxtHevOvJ<|_zT54Bi9+#gh6iDJq z;R|mZio0(pa|#948@=s7!RRy2rx^79ex?1U*fXBsmN@dW@EVG36f|bIon83cUQuD1 z{*pP)-YGx3uz`+FWa=B;>=5U;#{0>0v#o%A6N}TIIPedy1grPa^=pB$Y8HbFS0gH* z!7{E}k!$M58;#7z4(R1tE!-!8cpsr44$m_3e-78yT6o0vtj_i)%~0qkqLKw9w9Go- zu-sof39IpW_dzqEcob6an1K>A&owJ8+v)MDpgrX9>8j#j=ZS)#*;QP00aqTDSFPw& zJ3HTiE$xttk{XXwD>%7KlS*P5=A4xw$;F;Q|5^u`jEkYon(X;0c$RFBRcm1mRMAh0 z-3R$yCTLr+fA@1OCQ*q;&IpL?&%(jFul2tBc{ti+>+3mYRth%UT1-uoI9+OyK=6S3 zicQhxsc9Laj7&3bs1%s}>NIDTcGvbh39g3xebV$kI{Tm#=Dz=BZ+iQE-~rzjGD?5E zRv(0B%% z$g7Nk#3Zp$@zSd3-M%N?Yo|Iq-gD}GNVDaR9r#XZlT!f4UHgTw81o-0!A?^cUs;To z2y~t?^eSP`>J95nigV{|fstciETJ0GAGirmWKIo2jAE-K$6?8s3#Rjp(78ObOSS*J zrn+WMyO~$NM2FLa7_dP5@IIS?}zs3T&iK z&H*Wbdxi>Aj^zj!YF{Loz?$k^G%h%W1Hl^` zsMG;GT;*J`t92st%R5$kZM{_J+(mG?DC1ms>OOOCcXk1_+d5Sr|Fgl!J`ZI@8(6X3 zlBw638^o79CI*)%#W$05n_UE5N&-{JiIC~jLN=$agTp)xrAx7}y5IctJA~g9?154C z!Bgwsc>tFeg$5NCsO^&e>ffCO8Cq1MTW*poh2Tj=S^4cGOG$8|`l#CUE}_6YGw95N zw*+O_ma^wSDDY4y4yO7&F@d@pw=opK`%2DV0dSCw%ZqQCB;kSuOb2--Q=#A$;JCez z@MbJ=H<_3}o2D(ijm*)U;0;I#vjo84+W!{M^V_~AaCPtJxK_pzJ}urwix#D|yZ|As z!sWHF8h@5mrpzJtpj2S8%}9@mN*PBZ=U2C}J)(~GVEWNo^Zz|cM0UCXR46DE#ai!> z)q<&;VMS}-@L)&$VYHNfxlsb;V2aV*iL~B9!PN}1{3xuiS0`{EhRPtLVH031-eM8x z13guF2Ry=uP{L(nsu=>gp*A@mK)i78E>=MsD?qSA2DXjz4z$bmxOdsduAg{BH>O|! zvp?kD-fmqxMv}>fJ_z}X&zw0^1ySK;UZw-co_{5m;>%E|caI7n6& zb_N`ys0@?#Pvu7Xju2lNbkoaDxoZQo+4@?LqDfNC{P9;gTTi%@A>Ilb{@&~cpWA+ymDlN zY3W-^ed`#c@C@|Rk4OJ4|7lwu0Wz!)($E(BhZ~ejl)+#>0enC_ zL_~cVP+fqzpNIPGOj`I)fcaF){kcAAFiU0_+ zsuf?cI|2vp19vxqTWUz6fLjW{-F@V;$1)N9wd22uuK~aSR3B2#E-$$=Y9VlR7v7Y*XrRcp! zCI)6yJvc7IBBqigKoW&~bEoIl2nF(r8g`!)k?Nb;fnU&%z=bt|2=Q6=VesGo#`Ie0 z{t1RAJ5$Z5Tv4?E^63piaFSK zelZ1qsScRX_YD`8^Pc>Df=G`GD|YYNB}pS8i325n9;TEqYxuA!MF`N^uyE~x`wSKQ zoh@Mim`WZx?0^~8?>M^9r(%DsF=m73+@6;`?GB5TmH==tG~tT?1-SyH7_sI5Uejyr zj)(>`4g>IKIF1$bwB5~NAg+Oftgo}K87Cfud-2i-N>byp_PEM@AO9|!VhwGU6UpS* z!g4vfAPJ}%6{ZJ?e*$HX*akT&Uyq=5FLIxW-_H{9`C5g4vUQmQ^l^L0DOt$Ti!k6r zxYw@FDD^_J-Q#9W{OwSyELA|5G|ZQi`55pp9=(`JWK(T)0>vkzdJ4N)X9pd@QW6G8$aeSm)N zbMMhLHc@^DU2fe%)vHp@kE)_3b>x1d(0%kd-_;0kx?>Tf!X3h0jt`qlj)C&2Nw1E465&yb5ldoQ&x|s1 z1Lj2qT0HU~pv|oH19yGK;<_7!*2p z^X`f7N9lM2l|G0~YNzs4%i2c<+Io#LtvV@oFZ`jY{5Xnm_xdWdqM_eeC6Rcl)!W^t zmiB%dKjf}0Ztb%GS_y} z*O|6V(We=!9qX8eQPfC<a(K$R_cwnyId-x8 zyD{2ivDB+@0ZKO8V^(o^cHjw$6TnSZA+=CbU4E3rD!XigYL+rTnaT7GMV}a75@&n! zj`JsVGueS(fV|)5PO+W?brnA$HP+4q9u%nZJglag0F_K0CgJJ_0~!%~dnYNwXP^aR zonP{)hEgX|k(xnL*#1Y~LA8d}Bxoc*=wHSVV~Z|75T=W4%|giCv~~ z2gd$G*F=PW7X;PhYih<9Kn_>w{E{Y&?popNlJ?j0kQ6V1mLvQj$wQZKcetOo1Ax#K zIx2+2jiuWrV2ajR3QH;ca7x@U_v4ROlPU3zF5hkc(0K)y7XzPKjwONudzS8SOP}M< zSdzdYjxz0Yc=njDx%T=w9NU%zdOrAN&x1>osML>B8Im1hP%dx0evvlZ)F@$9UH_lx z5%RE96m^|O%hf_47HJZIT+g^xuv!eqlN_`!8;(v}5UNy~amhEfZUD1b%2pEW15Zab?VQ+Q=SNoPM9|fEI3&H$)T004_PU5#3 zy&+;^!u^cIiI8xT@7)WN?67wkMnh3N%JK7VM*k|pxdz#DjGb#F^08`5I)6iZ&>G-? zLuy8cO;lzx4=&=&@qz`pB7@xgX*LZfm5Jz>uK(<>6VJp|Aevy~T52VvnSJnqg3NK{ zxoI^9K*{@Z1q*5?{n4v@U(o zLLm9042!Ef++T1eM*uxI8^@-xRo;3x-!_}$5MUG<-3}NeBp|(Zl2XgKAIJ9pA{E5K zDl95FgdQ@?jj@$-OzPte!dM!=d=Sd4o^V<0$~}LlLAtbF_tjoUE7gz1vpxdcb^Goc zxmL3x7Cj&;zL2o14T2tP)URd(<08pJ2B2F4s9M0)ggEA@Z_XN9O*5J!Tmbr_yqYUp zA9LDje{CvsJZ#36?k8R@?)8n>zeDnKYkhvL31o2O0Mhot1#H_po^(W+T@PzVt8I#t zIRs~7n&}6P9yq~VVgpLAq1qdaZGs9`_jJ_f`G_~w z@5rCM!~zD4%rXUmsz=IP>wnRgY{t@WV|Mb_tq^AkrR(8O=}dspdHA@3`u-k+?Pa8K zC=U9v;J3(?9U$3at}+&$7V%^pN>}RZl0W5YQwMcQzlv&#mHxt~c$Ta@aG@C5T?U*` z`ZU_fmz`cHnWnf>3>-waSSd{}WrW-8bnAI@&`tH%Tmi9UEzpz}q=z!R;J{B;H~%^?dU3 zXa!mWrPa8TMa=Vj7DKJ6G8?@iY7hEWia*(N&OSS#bcpkcwl&A_IHP0h@Jc%*;gZYh z57ZlcL1J?owzN-U6X6T+S!H82xYCs6<+9H{qYTMdamy~@G`gkoHAql>7rbWIc;8m4 zmoi{HD3_Ab*{O+@uDg9N9wKn{$07|(#scuI&Dj0E9JOued(IT5vsS$A`RF4tu(ut9 z`0*|lmcq+F(TWvdD=~t1A_GcW-FzDZubu={f|6AC1*mY@0~!UBZi$_wfI3K+b}Udn zI5R4l(FYig#>cGa`fA-o07A(nS3p~N*mqiRa8^2+1abiJvI2;y5A6dTP>q7Xp;Ar5NbzUryuGRpAgilNVYk2B4ydgOM2TvJ`EZwHvBcBz z&T3>bp1n@K=Y!{MDDYNa)|F7Z06B<<`0RIdOQ)L;`!mM(oHh;t~r%m zL~!iJd1NGdzpzZ|HH>GyM%PgSc)^X@R*c1U`=9v&wjmc|Wq+~h&Hh{#b$yh(5;w?+ z$4+4%kIQkImjW4Yb}mC766{jeV9ELgUZ1fJrNl?YM(b<&G>~3PtG)USHCGePJbN#E zn?&s;DN|n&@M4WEqKu+)irmS1p;)N&1<^-GsgfP1bJ!eu7q9{KZ=lqdj{nHfng==X zImZEXu&#>UH8J&NGm?WXz*A>V#D0XB9`C2>kH$DvIT0Nhl|O`Z8)XIuk?e~$dQ2U) zKpz%wk_-83VdYoSqtRkXg{!EZQ4kt@BaHkAFJ9K%RO5=-VDOsM2}HyAKxU9>E-zNn zx1|@<&4tCAE70Z4|L^m0UdVhyFRl2U!(4Ov&zl!_IX(P1ciHxL(WG#|UJ}Da#!J?Z zVk(FEMeYg=Mdc@PwEk(O7v^edKi_%qzMn!9RpJe4G^Exb`fe}5f|IsAA`nq^7} zWAapz8&SJA5R1^GF`7cM${*F_Y2*c{`g>q3{a~%hllB!y>BW*DKUuPm{!BlLC;ktf z3+N~KI>ShEDM}%*F_DMoVo7_Y$h8q%I;bEEr4OJxw!wFlhP*`+?8_viCOkt8(je5z z6}EJo8eQ@>H^@Qm#Mu>BqoywqY+*HUi>i`n*b{e)D(tXp8fCB1`yC}k zhKW~y9z=>+P54Ci6l_WEMX)PAEtvq4Xz9RWk%u0>8EdKWDx*{1;efcFGLF^5?^P~p z4AL)T00G&C9DIEf_lf`xQ2%S`I6##J_aJL=t7qsHdFaiU5BhY(b{x|iY+=mCf?Ymi zg|-Yu7KsEndDYG>xJgO6OL)fTVw+w(fvT$yEvM_0#s=mrQ!LstLzO&Y9wR$ZLz5K< zOX+AIS~)kCiHMw23ttdSXoQ%i9Wl?T4(p(J};>y&>hR8cwQ1MqSk0Y`uL z|JHRyIgmxQ)yXz_+ak!I+!&8cjd9fAkw3mn$o7iay^LujmAzh5wW*knsvAL@PZFfM zaqK^r#|>~n9G*qZ(oN&w%!nY{5O|(+v}ons**#N+x0%6&n0zTGkReACE<17W~_hCHUesWP474DrkKob-`G>WoC`<<`ds6ydb50s3tIqVD%<+nmm0c zB^n>WKTK?|8-UxwBP^ak@iqGp3@lavu}}AI?$dM_t6mddI0aesqv07NB7EF&XJ0T7 z<8D{dzfE%Ux$rt#I9rklBc^2($_}TNqbSWPhRZDS3)FP#KB+~tU_}#fSvTNA;5xQV zv1pwffAEG2^q4x;cF;-g@SQBBVz%9P$|ntCM3n_=*lWrXf_l)Lbqc5RP;NIR^6)2x%75>2DO%(p~nj2o+@PStdMPlh1G^8=X#_`%*{=p~6 z)!&Oa6HFKLkM53{FHr?&KvJyalq+%79!MVKj%G2r{2n9tgL*Q}l9Q6+b1EO4)ykexa z*5FPOJYTOFx@!d*EKXSYYC;wl^P}v2=nn4|t1UYijGa(~3?vE|JkyagMt>>TWQNyG z;uJY>K&!#p{r1~$)bm01}fbMiFj*xXtaMf=(|Ydnlpi!yxqixfEyGaWHf!lDTpV|h&2 z6ern-Nb&mtH`y*RR2I~cata-&%lb(Q02kn^Jx@G~u_qgu1g-ybIIwuMz)5s16fHLb z{-4TS6Ag1bOF+k^w?S051uQ;A}UHhA(lw#?_Gm|b3a?*yi4LwLe6RXsW zBB3FriISR<;3R^Xc1`@yrYM6C;I4XDl^7I+jiz2TSV*i0eX@m4_tBnSypLb*4dQsP zu{MLV>4y?2pM3Qc-#}atGSJSMlPD;upWPAhYUCvmTPp?;RazwI{XK;t(fDL+mIlC1 zVI*|h2HO@elsG!tms}5p!Ck2Lh`$HAjz{{<>bh10@G1#=+e@-sQmXm~Y>MTQ)OsXY zQ6wox7dX~tz%<9vIyz^pt-DSGSW%m!3t}F9C{@7ep#A4QnuTBc>3qQmVrg7ZU{Q3W z*gldI#Z{sJV^hS7p>8Tka1lI*x956Vr!KG5Nor=02k9WRGdbhNxG)rV{MSTZWp{+A zfX*u&Dx*Ou!0@CKF3efP9=gbqUs3?dkHTc3G+;uFGWTw|-xYH<7S1N+TcHSj3xUWV zIAjJZ_s3?%Tts1CNFPVh(I&JdHx7T5ja6b<(=!XZW~Y%v4lo1Ogu_d=Sj;L=Bf~QW z&(MF=k+jcPE^w-vU6ViGuPvAZ1%1vC*5(MC4!n||f*O|wOIVI7zeq)ZMXM^N)tS;D zp4G%Ygi4$Hs0KY!M^T2pzh9lm{{vIhwU!ywlXw??rcjz&T4w&Vl5441~eddu&CgNE<)LCSriKH6GMz6E;haUc&rjr^DYyf)P6?o@BAAb+fM7Rgy1o~2*2tm6dYe41AKDp7f6yg=3 zAZ!pXSEBfrjder^V??%0l#_V~_I^ybEBMin>}%#0mLMs>L_DE<5taDscJ$R0&v2NN zJHPeF1OFM@AS$D7)&~uv8+x|_(+8Q%^Cj+sc35BXAWjqdagqkdI(gWs($Q=U+(A0p zIOHgOsC9EG9@@eYuVbsp&Jqy~z0H_j6643{gZSf#DB9|2WK;cAQ z)IV1NQTusC4RnatMj!ZZU{1U-Pd* zG$@?K&ga4Vm3eQ{b19%Jwac3xP|?^xry}9BBU_kj)&C=}FX0M);C=w<;y(qyapcNf zK-VvUJDGzN&&JR+KrFNIG+Nlg(2m34d57foEOP@v#9Y!Ez!NesZ?=Io{0|CPg_IQy zH{A7-u30YuE*j@K;C9<$2+%t97CgSFeS7IP9R6z2M*Et898V=`!yM>9sPsygJvDuP zgC52;!M`fXq{XESOtfmo;l+?`W>)+HHSteD8*Z=--a7A@SjltB#`(j~DHYRlrPxNr zxw)w?P6KjS-M?TpPHpKBB~_|x-`iSP3g&+r_Z+I?&A>p?h3FPV+%<6GBClg>wr zaQg)XL09QKdMTqx-z$4|dS+69%%#kike(AQ5dIVvstiz-nNvfcL+pv^#y@?r_DhfB zpFSaeAwAvt=)1S-HED^8JO3jU%P0NP7b8aBzI}VXO#ka+r3;h{O&ANt@}v;D zWY-8aC|M?YrzH#Kd$mGmt9f#Bfic>dVE)s zzZ`-fGkAS)pprMqLj?^(f)K&?7ReBcGe@)cM?H+qRqtOO?jK%;tCmN-r0fKiY&RUu zenY7jOG{Db2~#KiAHJfL{Q>2@{vj zFDR}4O5`tUr8~s4Jmt*0a^Tf~rjtH!M&8bC6oBL3gZ2MEEt2b-R$gWwBT;|#>&V5r zTShMJ=MTyzBGBag)ks7V^@{~x08Re!V<+C9jXS+c0k7PL9=(9Hkz^O06CPzD3V%S& zRjI8NuW;fz*7VWubc%e0-|>$<*u0y-fqfKa*W8;k;s_YlZpYM@Ll+C4-!pTx5RY^K z$=VrBiW!a{$MF_nd}~+!2DMyL!J#%8P3_!3_fHVswqrR z!$TUlcNx?-Zq9Zo+42z*`_Jg3i(u*6Hq1ULVbBIp%m($6m{dBuE$jgsFh8SpLRah_ z=nW|aZqRsGA4@_1+4q)O7qKUgH>(5Q7pk!Jkm>Z#yFE)BX-7-pW0=01Rg!FDE}}xL z4@8n17UG$0AAwo8^3+*!e@glacgLA=lg&e@L=NK;yN{=7`f0BGH=hT5#Yi}~XV0_} zL0-og>UFqw8F+lAXY57T2 z!TP>RZLU`ilQ&D4ccEhn=Odue##t75<{|(5%aft3byPk8{dR{#v244AKI*qkIWb`yX{l=b=Ss&^K!wrOSa^C=3!@Ht6hSs z3)AW)^;awR>H2n2Ru%2T=#`lvdVdwDSeaS}r7*AI(OlA0rtR`Bq+M{vWm5R|FAEPD zV*+J*whJ{mi^E}GiL-F{NqTE?Mga?+QjH&oArrHjvAW3ZS^s6QnZGOiyw$m&PP4v9~|T`I3|nU2WL!4FPwb*g_v_ zihYQTz=T}EOF;a7_;8qrRED3CjNifl(lleteDZgiScVhN>|3ypKBV17GUPkT*@0-w z3DiS<5Fx8P+K-p>tLvt{7^UV}qY(r!6)JZ==J$He@9}P0K{_g$d_b&vYRekghaft! z1t2pp75i0vbLQ-ANf?yn69=Nc0_^Uay|&JMJ9NE7QO4nTbd_c3ea45p>+q!&*TcHE z3m{Nj&#Iz`hx|4CCIJ0-UFc8?q;%TjYJSgq@HM6R1kNkVe67!$7xiijLx&i3gB7%s zYt0j~!dkZ6t_e=d?k*Lf;}fabbWn_Ac@~9Mbl=@wRr;FfHh=w_ouKW$FynS3dwvJX z#$F#Bq2onpEdvJ|z8J^L`Q-|=b98})c#8`qDpZ8l4lX$5WgBr)ff7psWf{SArhpy0 zCR+Rb-^Q(e7y2!pp+ zAu~wNA+>oYyfvJSX{;v! zB+9QzyAkn~!Z=i9tt#%qTDXa0bn)g}`Ex1SjE-+qb4%xlDBEUp3Ig|!apJ7rk%yxT zNK}(F9HMlTJ?Sb;rn7pspDTn;PJG%M22)eOxDQ4efv}_6XlW1D+`ZAj4guY)b6d{T zI^&op7dp<)7SbWH2WIfFgT~bh_|l0zpg_32JVC1FJAKv7ys(J`$k`yH1CbI~qn`N$LA8SRdII0$dJ`vs3E3ll%2 zR_R54e^lD(U}*>3K473bi#{NTo^0qQbLRL`H??L0|KBTYroAHo<;vAh5`0!Ux0S-< zeMSso*ygIvRYCXDN4jw^&Q3cqO~TyZceL2Euo53C@VbZ}j*#u)&Q@MKiCDT$L|xo# z$4DLwFP=oiOqbD$Ysl9sOv+@20f%vx)QlZaxwrlSYYz!AJOi4e%DoH_L~+C<8oj%; zjG;A5_nn#q>nC-+nVrhX65M;K>v%iG9iqZNg!c0|?u1)#;2CuatDaulQ6Ph8yUYqb z(W1y6M#;3iI1=x8^Td#kkTLrABL@0_?->_g0G~EqRR~SNz$i6t2VS3qJOL^xi$;}Lj;nMnj*0{> z6+ixtY5e2XVSw61r#GG!{fgzA>nXf#ox+=G14)O!a0I^kW^mu{n9fma)fKG{y%RcD zmA20g@C*|75I5zp8&OT4Pr|X(mbdRX+%U9s4$JI&P9koxYSSde`HitR(K?`fSqB(t zVZNt^FVbnq#U7JF1cp|yN6c?DJawZ}wEtt?@g{`JKNB-8UED!9hN8Ckl`HCZ(&|t9 z-ujBw!os#wHEsOcV#Pk=5ihxP_W7%fwlB62$&yD9^kz+m}tbzf5* z)j`%3psQ|A9xtDBAHb+N?4F1b`des|tLBlr+>IMczxwx@{YFh9DYP((?M1X`oVCWgbrAWh!#(X zaPpgOH##S6;YQO|R0+G6N?1j<%*(5gb+F<{eE%U!A&7e**>moHm#R-~dvZ17x9`Q! z0vRkEYl{)7NRbpH$WVHVp2=jDzOz)y#thH-S_=pAe0V`;h;z~bdrbBV9av&nx*mBC}P|A_meNfh31@tY>Ulu zyele)4|LSeqx&wx)Tj~db%_?x((^IQ0~`{f1Tz#XQ7A%ikG~)K03HAMppUD_~WMwH0ZY1 zgAI52%*|4|rd|qvh+X*ZvpEa1bwv9TZwZf&tjMjigBq)vrSF#grlyt5e}Zq79w@;Z zy*TcCp5*E8n9c85O4A_a>dtFR^==p6G|u@roPXlkw)G}=3T^f8KGBNk(z`XO)QZjH zYHJDJmrW4+>BEoM0(mX{^|!jr!!d-!g~+ZF(w?_$XWvP?w(_k#+fp}wCSXb+N-*#y zWjX?Kt0fn;fCX}3YAVD`?znt@vt~4tUQzK#S7eb4ZeU^4Wypanz-R_$x8Yv)gC4yD z&Fy3RjaXr1g=j$fvGXQxiNGpifEKlF@7*oCL35RNOl+jEIjBcF;4HcR)r%HH{0KCW zQR{z8%`5RvXnyhccW`hY@;I0_VK@~?V{-pstgAOQn<(|lAB&3Je6 zisv6#ICw=BRwqR#s#-QVM{TJ6TzhloV{FMu>r5*o6ACV<0xh(~zCrS#v1pu>cx)hl zu<(88;*L-~2@*xmIil)H<3cbDv?&RTSDADmje#_7QtkNt&<)*10D9dRmHZQCQB{b% z#n}Vo_v#mdr?9tK`Nv>K2V*`F0V^lG{}pp{E23L!{mn8HXRGsM6E$!hM|y_>g^``E zGv62V4gpbwy^5l~5DifVT1%Rc%yW*Id$y3MjiA&hF0V>B&!Y9hWW}XaFj0)>m0-*M z8BO`KHE-L%OrXP>^>`^R?{%`DHja9r-rR=86)w;K`xm)S)&`X#yk#8Hd=_|y#h{he zVQi^;6nC$1j7_3(DXYNTcLkDe7=Sx`nsAg|Y8h;qw1Bo~YsefyBW(ScoXs}sVA6VvPJ7kaY}ZB=L#(c1KYYWREY!`0xv; z$I|V70z7C2J}@9qIuCL5n2+S#BRSCZUgvk5AG2W>;#Nt0%j^5a#{lksY7o=7qcNvg zcs+J)_leDWtLe1*X6zw6xm}Cdxbi^j?3aq%jA9x`W68J=9rvms3_UD5WtI|YI7Xd; z(vHBY!4hw~>s)NG){=UOZ`NOu={c*n#6}h1Zw<_}-xu3w`L8qC&(mTV&`$~PU3vJF zhHFDy|Mf4V)ISJWXG@3Ggok>Hq_zbdJvN*Ujetb|D73}qH*sLIU6-KH#rlWqm{x^= zgbgr4+t^h|KY-=6q|zBP$rd?&Vk>>Hg2s3>IMs0VlAUJ!YyG)<3m^g~WjttzPu%_6 z*<{VN&o4E}0!r<7;KpF^r1+G7AfD5^%XEkcCGC+a5 z;)uV#_?tBDhiGh_t3Qx`vU4X&NcUa|sry7AISHjcM$l{YMr5#(=(zE;_W132hi#L$ z=Cg&xejcQJ^GQi3k=sMs#)sFc2`8)QL>`>m8gtorV`P=IT)LJ$o9xq@_g*SjdR`bI z&ujC34-yKif1{->W7NYZxc=F8=~xF#z}@95cPmTd1Wtfvjl;VaF$AsuHc(se4hGEf zRVXMsJsr-DEiuG9vMDOZmK=pWcHPL0$F3b(o>T9jk!vEHQ|K_XW{RsHU0g9J;(hOD z*PN1%vDTCXmQR5LW9YbEP3RcS%scVw+#tv?TWmshMI!z;o#Deh+dGqi*v`>6_u?aC z&Le)hP-U%G9uP?Jq|TsPPu%#|vb; z=-gEADI9;$(&m+mlVi)bMvWP52bS-J!#llOz9ffNdTQ)%G?o7$c|X4K&ME-HaxrNu za`f8LgZ`qkD@d9jcU5Uz(y3dqL(miJO3J4(xE&}jNi%;&@SLh6eAVPH=I!`<+ghlm-v1tkvYlW}161(*3=NA9&PJOe;?Q{4omH2iii^9!RRrgp&Xb8P`9x8~UfP3LzCWEe#@Qc8Z0@baq>klPu6w|3@Q_`rv zAA7(KrCMk7ddF5|o1pr(h2OxQAa$eUN?RR9rF3uVy=kBVgS5@Yb_^6gG;!$~KU){Own;!hbmRe7VJf4|mCq6`t;7+w5mA&_5W6V9n_vH*1%z2b0FR@rPv%o{7m_N zv>u_^ICYGRIrf&*2!$pZm`C z>{|7Pf)En-tY(W6j3(3hgtkrJa40cO$7#s~02|GhVs0?8jdAUEaNd3PA*@;bAko}7 zRHs(DVb#f{R*u1+1?JqUQGNNXcS=f+*CMw%dY!g#$ChEK2|!tW@DK-SYn4G#klCCA zq9Akm8Ig-oDJx(G@Hz=dyqo(qUuNbfooC;>t9k6!exik&x$2gFj(KL@Uhi_hX{mc5 z9BUg_sGnqtXxF1#j3NBcn_u1YN8}|ELBJ^f;vO8KOY@4NQ zobu_2#e;E3l1`7*qMpngUt;3#fg;SVYrZdTQ^~EpW9B!z!^0K77$pZE%DeXUcwwPl zUJBEEc?skm1|*se&_UvYRZnqfGV@}TUqcL&^vIQZfI`}~Q5v*ND5gt)zGnT+4OqlE z+q_BjRlZIxqhH)+`K%e9FH;M?V(I30{1Bu$d z*Ng0Ir$Y}VpN>;P-4oUF+X|uFIZnXAThLjV%qzS9K9&D=ESq&@;QWC(0V2ndC*04i zdn&5x)SkvDmj<`?!Qu;;rY$n_+PM@tRm|Y8RdG1M(M8nDWUX@O3BZZ5J&)NH*VXMY ziRtMnyT!B3abcf*sv)DNY^mZJCzqkM)8@xtk7ElnJiZ{pJ=_qJw)2KUy1Agee>Y?x zf@3FHrWFAtxMtodM#Z8232})_!ncXa;5#`AyXW5G3zFR%^*_Wi^(G2}o`a?uh%Xn7&LlX+6}&Iq{2Y|PPOg^0$(Z+EP7fb^)iGV}N~5g&=%A>g*>!*V&76=#03 z!O-bsmX=+Ae2QZoLy75|%jAa!%W!mxLgtmthexy%mpq_tgVUDIdoWp;8d@*WX#Bp} z@u%LBRI47K4Xj)XhDUE%B6E%CoA2k}YL3rb{61RHmjrojN>!|G6X!UX6*3MVxF(N{)jN-M8Vqy9xqtmQIKxb)&%4dBgElC6)VV z%=!tcaHXA#9lK1?2SV2)1sXP)t0^S0Ckm@8Grt@X@?uD&f6-MdO!%TRr8}SLSHESr z90yq+FLa$OJ@TMgCk8YIZOhKpwV!5p>{};g-1lJj28mzpTDB!$J9M92 zP75%pJ#y=oaLFTvI?`gf{KfAm@m}0zCc(FV^-c2n!NRBdqfn7`=eV?oLe&v={qCsz zqO8a1F>ghTb2EKTxeql9q!jDlOWW(u9m}^RYclT?7~Ia2 zA{@bi;`7^p$eCErx)`2gRkImwvqKAf!4geo@_NrwtPILD>d&syf2pI8q$}XLTY=#^ zSj!Q8*(Q0igW02duZNOGL`2Gx#Vtck_rOW%?z=kjzMdCX9>;ma)B zrqDmG+MxGZ|KUVrrB27e89mB@sZ%WotnF+TJpQEYD#_Zyq7>DcNk^4QNUS#_^Zm_5 zT>o3d@nGn+{k`HVuL=LHvn2~lyxr1?%!buLQc4K}hoSAyv@&6ISY4qgwZ=tqK}zh& zJW^lIq$t_c?J?%LklL>xV0$x!yU^;x5UJv^4lTX;a167uq&<)7Y_q_q!bWT5ERHM4 zwH+V7@xfEWlV_flyuxq)f_5VU9oBI7Pf&_AYR4*5~UZ=Q3D3HK<^~f)kDf?bmR)NOy zS)8*!bq?s>qqwS;NG49`e( z<53n!Z9DC+k>}cj@ZMVr%=82P=^(l@l{Kfip*OJwcQ1Hz^5WR@N4Fc(%e_6!WX)IW zub<^}={0Yf?3mWA5MMK66RsVx3R*rzQR$5OQcrhZC^E{UH}Eq$dY|<{o!aKLr>tst za>RFTB47I#ptZKEO0lB9%u|RWsy91Z5VFgh$`Dz@m@orb+TQ{HmQO^_ zO3S2Yku|EmyO(HAW7~|1a{+;2n!X2z*Ifll zmfOOVEa1+E0xM{n+_DuUL@c=~?fNt?L(?^qyN*wH>E(m_ert04!^W}aW@6ol$QHhJ zltVq2WI=(ZPrP)#N`cbxjuI-drwbie**0Tb7soOh)qW!kRg@mw`J&;`sLm#7Iv{72R zIdWRcjb!8F^R3pDmEU$bI-fuLT#<^gz2RlQmUhD{L9(zLTAM9Wy;3( zO?l=}{pRh)7dmfTdFYuJYC4~21ASrHbRj{Y4Z=A&Il^fNPOJ0P)hf-*eiP2a=6%lD zA@=g+#alOB{W~acSHfJ6o4$3@mem}~CycG9Sv%-&Jps~60KG>PA~>D^aLY89RQRjp zbFYf^h@+c04lk)&(IA`KV7~#$BB?4nku|eUC*=UYDd>so5@>b5`!Ibv;UKtj!mxvK z2_)Y;2?_~anHCNNkL?+Ipd|b){;JXk&;IS}@>(-)>U;duzPfAiIi!mo%j^28K21D!5r7k(^ zK-7G6BsJV^rZ@~n0MVdZW8O}C!Y}$J@xzkeml`(cqD`ndU|3;x{Ai5n-#9$M)KV!a z&E&$LTO^?@u{M2J<>ghW)kxwM&y%O9BA&&-f%Cma7G!g9&P9)=Bfn>Q)!=rmsUo%c zQiEo41BZ`IHo3F0AqS``AZa&mCkG)U`k`a%JI;GYZD9*~9lR2Zql z;W)sDF@5^<*1PV0YL*TjgLSjJ?7zskD@=Oz-D%bNDBU!&V(O_tCZFru7El`5foME% z$oU>huD8q^&GYpJ(;eq1ef4xB-NfiwT=1IeQhotY##5^n=Y zW@1nuorE0i2#^XomUNwQVKxqmh>}Fj!qza0%NMMI6JYDDT-O@-LqkF$Qc~7#)!6Zf zZ*4i;kE&-khnaRxKb6?2uzN$2--ZS276_!Kt~wD@ds<-&O4+{&+{e^Zv z5{GdqlR2qjr7ZYzHWf}S-USN;QI2kUb9wXOZjiv=03bq@|@LxM|Y?n6_Gn z$*bY_5(datMvS#+*Q-~ryj!S$z5jlic@1}i-&agpRRfOYfqSeoC~Pk><~SlDmaur! zZ0U^MJE7Zt!;6SL{j*04Lr2>D(c<-+|G_6u+2+ zDB#;4vl~|Hq9zLiS)v4#u131U`@7oNenXu7bxQ_JlwaEiDcMq#Mq3vz$CD4b11wM* zp9-A6T2+bTmR?gTD$8T~`#<$c8^#i4@%0(o<_CxHFYkPDf(AX~ncNrrgRP{u>27iX zNmSXMT)KZX<3H+&EqnHK5(d!EL2dSb4~)cjzdh^E36Xwk^RagS`xCc{bzkT|w(a$! zZ%IEk!E7WqrJuJ8rkVfyZ*1A?{*S(Jg8=)#0TqhfaJU|U)2Y~}6!z||MscC$MjEwuFX1;6rohkwRy66Zr&>b7&;UiQ z+}>A*>;>l%XfB-7J_r+sX9=#z&_Vz6EjJ))61POU-oO9uNGTR6x^E}OEWI@(5!g)aBD`|a7fhOfl%|lNZU1litY`6izUz|yH;ns zihw;@d11JvA|oRgY*jxetU;zTF`o6WZ)Tx~JUB0U9+&lg4=CVoH#k5t^SqS&Jgvx! zUHNA0#R;fx%Re5rt_}wOQS1{>pUeGKz&R)l6aoBxK<#t~nzx_}7oq?@Rl|0ZC9S{Q zhnzWH+1`FXkro;SoBIhXu0&U4yv25AZL)X&a47j+YZs6%ZT@a#zR|@Rb)k)KEbZ_-%czlJjp6(EpKsKh`5rm! zr(q3;*QP0a+Y~?~;Ty&nY+G;8$b6TjetqYaBTMp8-o#B3NqsPtuM%*5R8PXA0uK=d)%Li75M)u?#kn#&j0@uY1>7|cIS%dzDSX~ z8>52`GbPHgjvN{H5t~Y?l_Q36q+DBKDkBLQE4iXV<6I<1jFxib2*2kWzu$iU`ThR= zZI4Ggk6leOpU?aAI-alR^Z62!l(e@4q;FEHduF|~wDe}pGY}_@0Jv<&7?KH!^Zt;~ z&~|M53I%jsDaa%z!-oe%djvyIGYq@rqMn1n-Jz3($DIgQ)+i|0~=ez)T(B0HJ=em9hLSSDa4eeBq=Zz$}u z+cRcqUP?b6K#mx0iZ?_!iUuBp$pQh@0bFnyOw@BbOr2o222bw`uca${Op{490QTZ0 zpdLE}yv}N;hbgY>sV4CV*OPb$(=65q_->V%*#bD6i@+D@_^XzdRvkSLTxLfMv!i?; zhZcMcg8cXp*dLAqjjLC$Mlw$n>s6o(&z=e2+^vZT2@%{LJWhI%b4B{dTGG0vml$(F ze0jGR;q%Qnp4G^r7j$34yL-#@Ki`RnSO;1{$n)n)1|G91KNim9gcc@ld;$<3$11&D zB_MsTgZDxZ&~7u&F(7<+?Dm`CZ||4@tVR_#_0D-jmbsa&=R1LgdI$^X6F@VQC$>{L za+G5GnPlZ_%u@4wcA=i54Ts7t!0)mfaf+V;yT4%1mR-*Ye-a*fNJmHBufixL=M}gb z8&D`(5L?b$5^8j)1ymCs%Io93deV z_X`wS42}`cvR{a=W$ar9 z!(Rs?hCzx;K&?`9<~u$Msn!+1ZY&jK!VgfE(6NbjoXP%)lHr z>b*pcE=AQ&$R_~F^pd{puzWCR8zU_vLs)S^=n@u4Rmh0E?!I$c)c+HUj{v;$RKqOa zynC-m45DzKrU{E~EMLhBSpdpcDbIBACc~q|K{pcm_-iAWV1$zWL3eH!rv(KqFxa?^ zLNV47nkuM%>=n2M&>|cW2^@_d(%{81F+b5EQp7T=1N|R0G1@VXsKh8=2;1OYOmy(l|IB z6DRI5C%0m;TXpgu*RKcR^U4?XiVRwNM_KfOvEFR9fN$$UJTZmklW7Hns8}M$t4}9; zPvtdpz?`4=^UtN*j?B#_ejA`J(QiFHlZSX} zr5LEVY8){r2!#mi>0$)wuO~7GcdZmltF_P0bS*e3TK?vekSgVj$aLo5j?C3JX`0-3 z|7>b+<*W`kd#?jOF9>0#-OY3J$X9TQO7ZNN0Xda3@lqtsV`R~8XgT-9dj6xl0ztwH z)n3-q{7#GIkTA6)pnKZY&}h*TVo+Nozz z5xpLHq5Oj>+IlUVJ#&!eDiNgMbmI{ySwQ)=)%z^2j($Pv5Dic!I=&?hj2^h{rM5;)Qam1JtKP3!Saf(tBX^z<=^x5mf|= z(JE^LBIy^t@EtX|HmYvbp&SaOO>jD+^if=EQe-uwRoq1=y$zYYEIxKM@4~}JY58UP zkofvr=8{$9x)6XlW~dEX&!YGyPxmvvPAFt8><}|9*qutH%YvPH2gpi?(oLpEMkL(Z zj}lc&RZ$~44n~F%)Df?kU0gTdXCbQ|8JS>3(`|r^5e<+#xp6M|8g+lL zb{NLCkwq&PtqW%~xe7EFRU~*2cS`k{UMb;|gOcO;rK9Yfo;#FsT&?E>W_ul1?B0eI zI$YW5Snd_hX3E4Z#(C*;oxYO8F3OkV54K;s%p0w0cRYW2_+e-XGnY^&r6g%7Oj0Ux z9r1Qg-SzByui0|O?3hy>Uz^M?frOGi^-rGi3{*oFP9(uNT3skdyQrk+ zowzlz1^-HG-~HqPC^1oS4w(M7PfqksR(9appCFF$u>TG~-YHL+TGr6Ebet6ZX8yJc z*MaVC67}C33#OiM|JWdZEyxVP;Qe{nHseQpbMEJn;Z@ILTcL|yUO9q7LZuk5N1l7h zlg7d-g)(+KBNvwbEJw`tExQx z#66R@ik7Nw++MOe@n^Rry_hd7$1TT159bxi+`j!re`{<=TZ_JgZ56{OhN*n)7q_wg z_k{^&^R^tVW!%jR2v|fPJejGn^J%zSH|NfV_AJJrPK7#4{B?A(jZe+8(HA!+(lVxg z9~{jda89jhPGsBUzD&EH7d5$PJdw?R`~Z4xWdayD(y+QiY?O!2?CZnZ3&q84d8Vyu zEzAG&S0CH71z-1~q0!kfyj`wOwER~I2jPEz9a0}~wvE#A!T%_-1$*96; z>IdM5kbsc6q9aD>;vRU_?6LxfXECff%ROy3kER?zej$6igVC9Idb+jHlf1HuaOSz5M!}nva~X-NuvTNMwYSGwl?h zM6f%m&er=0`4Bsy@W7k4FU}T9I17S;h}MJ{X)`G3~!t| zw#A|iLd2$P12BPam=2sg;?oXCG%q@PcH?)6yKnW*?ajkh-nSB-p?&N)hAqW-nV zb#!i&NX5dUum>cuYH=R*Ci1ZMlkJDa%uav;OM2x@X2F>y7-e7`))r;D7M{e$Yn!I;=$Sl7SGom%-=p7OrhR|c zJZL0%{o^k14Q$nmM+%5M=j2{vL@&28=d+#`Qp;jGNYo0Ia`O)Kk%(ld8X|Nu(_lbPts>b5h8l4Xpx*sC%DnV?5ycf0meip&8ZIAXG->)`M>2S?1}5+eB1Mmg^X*I&Kbw?fs;p?-*1e>CFMeuHQ* zvi*e}3c2!0#hZqiHQIdN{Ql_P%#@P4*R&62sA5^w*tO#HC+NnjQKMIjm-_b~D|-U| zO<_(iWDul`GourI%{Nq)I!H$49`%P&Hxw^!{NVCoh>&Dd2j1<~2R8=CZ+jVMd{7xO ztJNq0pI^CljlfOqKo;dSmOFuh*#7ds{{7k}CQ^!ajM`@qLInE&Lh4A@Zy?&sVEBre z(}`o6BP_+W!Fou1oo1g^ga6R6@G)ZdvjWymM3}*` zheDtv-jKgM5$E+VmUnJ=+Iun-(u9ty*!~mPQ;1qxCkjd>9XSVd{g4sHj)Fb z;{xMGHn`>*1FqilW#w9yf)^Wx6sC>-irR8WKu`HSWGK)Z*|(v++u`$*jSw+&cq927 z;V~5C!!lG7c9)A+zUywxO0R>R)On7Hx*>?IN$$i+Xr7^^=C+MQkx0x&x>BLqxizt)mly9;USMF7!OaMBfpYfa4qT>~8Eq=(U*8=vN4OV|p(I>@*x2 zh5hPq-4VX+4xc~r$N~6?l=>DnD<8ue9pq&*$h|tUQh<>W3>oZ~C|wKWu2GJ&vj$<$ z2Hd*Ub}&|~vL*JCI;lhjhX>{^w>7XmXuImSG4R-F#3djSwA_+Qk$4s1o=z#0f#q=N>qyffulicoLHc$yP5_Veb?XSTJO5x{AlKC#ZTkZf&jeKTKl<*fq~ z(FIxW!6ZXXE8kpK9|*4VHPXLBFJGSZ(-{G8BYu1y-}rMc{a0_JvA8_GpO~fuz^|fv z{_i(uHnyT+EqzSw#O7j!GF$Sl<8XbC8Uu&oc{hV>9DB4(TwE{8orZ)LkH$F=4wgz4 z@VW0GR!R#OE)0HF0b-hXetv!+f_HLiJfvo=Kh2w0;vmdbi|#y$$w;|-d%|RmJ5Ih6 z@hIgSw6y$_(0v1O8qD2pLHS{3y~_4f45*UD)VB{hpKsv<;7T$#_8ttQVa;u|a6j=y z=^!<~9=lQ9cGc3Q9nV2Pt^a{DrHqZbpWP6C%g3?PWH$r;<7q-wsm&l zPANQU0J_d`?*<`pNB`i+0Hfvsy1YOPN0mU&j_B%-1L)(mv-8u`;ZAIh+KoZ~Ka7N= zq@?mmxG}u>fx^2dP5WotPA^cH~k$3PI=^oU1~ck+3~a_T9~-6=V#AY^-zOJcHIc*8DfddN5f)!ZDSTA|5m=IDU z12BF5yRn9$Z|V;#ledp!!!N%ZYQpAWvO#JE@5826IJP9DrmUE(cj*E=W&8~|XC%Y; zZRbGIt#HZr!WO5BgjE@$ojf2B^1^Z+Sg9AW@nUq*eBYG2%mL>weiLb6sM_ewyd+`t z9c90r)q=fS8Gl1iFi#E(22Nqw>pFO#B{_TDI{WYvH2YDycNGm2v|1na;6ydP*sv?4 zYSEhF6`M;O6H&@VoKBT_)PDL7PnhQ@*_Di0Mx^;l&BI5SiCcdSj(JNF**A!VwAC`a zr%Nh2YbZ6Qx7A+9UCU~DIN&GLfX6EGV@}oE_ZyWvtyU%EIX}xv`BbQFQ)8WbUgRHR z_cxyt%GjzFEm@3O1AL7~?`tyVk7iH&K9Qz4{qiLM1c#f^X2;JcQ^G6X{7G1q)%%Sy z?P3VQPuPN(4m161@>OJ9Y&?lPQBJ9617*%+UtUU8VYMGwRhkuO5#7-y_SQN}=w5t$ zyq?KdaLhv>zN}Hr6ABDwbSZcnWjsh$lAOeJSJC-G`iqr^Vfvmu8h*|u3P&Ur zo)0NUNA(&~{yAt|fdgMQ{HnQ^VrpNt-5=P)Qo2XSd2*Bd_EbGm}RnB^w(Nha3v;fH++lx+H}*y zY+?$OM*`=xD5F}wI+5mcFV6>Dz!6LLS=OC zTl}}4@S^<|^|2(uB53O()9BHbiwyDIU6JwnKi%rDR7+J8Te8HwbmVjAK;FdQRodQ8?zmC&lDJ7Xl|v%jvt-Nm)5U{NUCXK0JT1MA%av~3yvaB{#Ll)nz{e=p3|yiu z3Ki&29$lG8`;FB7Z{q*~-qtqutkw4Wi{7MJ7O+6<+1qvLn92oKvyJbzpyPSGcr^Ry zfa|Pb73&28eG#bRSss5P*@gpwDTP4}^$%+5)rSHJ`SsWsU?cRta+E_)c0uRV)Fg|7 zJ@bB^jXnOj;T#|t67d3eyQExJE+!@_xWl@@TidWiBB;3dP?P&j+=7_(?)L;105fOh zccI;G$3fbKUh2{1e>)O`8Ndi{{{J^AzOFW|akJlqr^DTU0w08;z5npOv^^%5{|nlG Bl-mFR diff --git a/benchmarks/honest_bench/results/metadata.json b/benchmarks/honest_bench/results/metadata.json index 8ae1cdfe4a..3d9673cc11 100644 --- a/benchmarks/honest_bench/results/metadata.json +++ b/benchmarks/honest_bench/results/metadata.json @@ -1,8 +1,8 @@ { - "generated_at": "2026-05-04T08:54:24.219226+00:00", + "generated_at": "2026-05-14T07:44:59.755910+00:00", "host": { "os_version": "26.4", - "kernel": "Darwin MacBookPro.fritz.box 25.4.0 Darwin Kernel Version 25.4.0: Thu Mar 19 19:30:44 PDT 2026; root:xnu-12377.101.15~1/RELEASE_ARM64_T6000 arm64", + "kernel": "Darwin MacBook-Pro-69.local 25.4.0 Darwin Kernel Version 25.4.0: Thu Mar 19 19:30:44 PDT 2026; root:xnu-12377.101.15~1/RELEASE_ARM64_T6000 arm64", "arch": "arm64", "cpu": "Apple M1 Max", "ncpu": "10", @@ -12,11 +12,11 @@ "rustc": "rustc 1.94.1 (e408947bf 2026-03-25)", "cargo": "cargo 1.94.1 (29ea6fb6a 2026-03-24)", "zig": "0.15.2", - "python": "Python 3.14.3", - "perry": "perry 0.5.495" + "python": "Python 3.14.4", + "perry": "perry 0.5.908" }, "harness": { - "warmup": 2, - "measured": 5 + "warmup": 5, + "measured": 20 } } diff --git a/benchmarks/honest_bench/results/results.json b/benchmarks/honest_bench/results/results.json index a681ef4575..2933e5f53e 100644 --- a/benchmarks/honest_bench/results/results.json +++ b/benchmarks/honest_bench/results/results.json @@ -3,827 +3,3902 @@ { "workload": "image_convolution", "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", "run": 1, - "wall_ms": 411.737916, + "wall_ms": 393.145542, "max_rss_kb": 49696, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", "run": 2, - "wall_ms": 490.978833, + "wall_ms": 399.731458, "max_rss_kb": 49696, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", "run": 3, - "wall_ms": 424.140042, + "wall_ms": 400.096792, "max_rss_kb": 49696, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", "run": 4, - "wall_ms": 407.547417, + "wall_ms": 390.64325, "max_rss_kb": 49696, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", "run": 5, - "wall_ms": 414.195083, + "wall_ms": 399.162125, "max_rss_kb": 49696, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 6, + "wall_ms": 398.947875, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 7, + "wall_ms": 392.447417, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 8, + "wall_ms": 394.653375, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 9, + "wall_ms": 393.478792, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 10, + "wall_ms": 391.702916, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 11, + "wall_ms": 391.024042, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 12, + "wall_ms": 389.562375, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 13, + "wall_ms": 389.620667, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 14, + "wall_ms": 389.962917, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 15, + "wall_ms": 394.127417, + "max_rss_kb": 49680, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 16, + "wall_ms": 396.695875, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 17, + "wall_ms": 390.569458, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 18, + "wall_ms": 389.399166, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 19, + "wall_ms": 389.244166, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/rust/target/release/image_conv", + "run": 20, + "wall_ms": 390.338, + "max_rss_kb": 49696, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", "run": 1, - "wall_ms": 246.825375, + "wall_ms": 243.609125, "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", "run": 2, - "wall_ms": 246.932125, - "max_rss_kb": 49648, + "wall_ms": 245.780417, + "max_rss_kb": 49632, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", "run": 3, - "wall_ms": 249.934958, + "wall_ms": 249.363, "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", "run": 4, - "wall_ms": 247.431958, + "wall_ms": 244.298041, "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", "run": 5, - "wall_ms": 247.83825, + "wall_ms": 268.891042, + "max_rss_kb": 49648, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 6, + "wall_ms": 241.854417, "max_rss_kb": 49632, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", - "run": 1, - "wall_ms": 365.913958, - "max_rss_kb": 51120, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 7, + "wall_ms": 240.314875, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", - "run": 2, - "wall_ms": 377.113916, - "max_rss_kb": 51152, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 8, + "wall_ms": 241.26875, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", - "run": 3, - "wall_ms": 377.4365, - "max_rss_kb": 51120, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 9, + "wall_ms": 247.123666, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", - "run": 4, - "wall_ms": 376.597292, - "max_rss_kb": 51136, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 10, + "wall_ms": 241.813292, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", - "run": 5, - "wall_ms": 375.563125, - "max_rss_kb": 51152, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 11, + "wall_ms": 244.244292, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "node", - "binary": "node", - "run": 1, - "wall_ms": 1291.572208, - "max_rss_kb": 90162, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 12, + "wall_ms": 241.267375, + "max_rss_kb": 49632, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "node", - "binary": "node", - "run": 2, - "wall_ms": 1287.836125, - "max_rss_kb": 88066, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 13, + "wall_ms": 245.117666, + "max_rss_kb": 49632, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "node", - "binary": "node", - "run": 3, - "wall_ms": 1236.968416, - "max_rss_kb": 87122, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 14, + "wall_ms": 247.102291, + "max_rss_kb": 49632, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "node", - "binary": "node", - "run": 4, - "wall_ms": 1228.831208, - "max_rss_kb": 90242, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 15, + "wall_ms": 244.966333, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "node", - "binary": "node", - "run": 5, - "wall_ms": 1329.56975, - "max_rss_kb": 86978, + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 16, + "wall_ms": 246.73175, + "max_rss_kb": 49648, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "bun", - "binary": "bun", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 17, + "wall_ms": 248.459209, + "max_rss_kb": 49632, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 18, + "wall_ms": 250.455833, + "max_rss_kb": 49632, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 19, + "wall_ms": 249.686875, + "max_rss_kb": 49648, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/zig/zig-out/bin/image_conv", + "run": 20, + "wall_ms": 251.848959, + "max_rss_kb": 49648, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", "run": 1, - "wall_ms": 924.419708, - "max_rss_kb": 61344, + "wall_ms": 353.905792, + "max_rss_kb": 51120, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "bun", - "binary": "bun", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", "run": 2, - "wall_ms": 986.156459, - "max_rss_kb": 61424, + "wall_ms": 352.935666, + "max_rss_kb": 51120, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "bun", - "binary": "bun", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", "run": 3, - "wall_ms": 937.04425, - "max_rss_kb": 61296, + "wall_ms": 354.9005, + "max_rss_kb": 51152, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "bun", - "binary": "bun", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", "run": 4, - "wall_ms": 981.905125, - "max_rss_kb": 61264, + "wall_ms": 357.990375, + "max_rss_kb": 51152, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { "workload": "image_convolution", - "language": "bun", - "binary": "bun", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", "run": 5, - "wall_ms": 948.936125, - "max_rss_kb": 61696, + "wall_ms": 357.113875, + "max_rss_kb": 51120, "exit_code": 0, "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", - "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200" + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 1, - "wall_ms": 34.768958, - "max_rss_kb": 1184, + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 6, + "wall_ms": 358.15725, + "max_rss_kb": 51120, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 2, - "wall_ms": 42.31, - "max_rss_kb": 1216, + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 7, + "wall_ms": 353.61225, + "max_rss_kb": 51168, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 3, - "wall_ms": 45.883208, - "max_rss_kb": 1168, + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 8, + "wall_ms": 352.534125, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 9, + "wall_ms": 357.191709, + "max_rss_kb": 51152, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 10, + "wall_ms": 353.946, + "max_rss_kb": 51152, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 11, + "wall_ms": 350.160959, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 12, + "wall_ms": 354.893334, + "max_rss_kb": 51136, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 13, + "wall_ms": 353.3355, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 14, + "wall_ms": 355.724917, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 15, + "wall_ms": 355.270875, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 16, + "wall_ms": 350.367584, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 17, + "wall_ms": 354.485458, + "max_rss_kb": 51168, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 18, + "wall_ms": 352.368583, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 19, + "wall_ms": 354.07075, + "max_rss_kb": 51152, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv", + "run": 20, + "wall_ms": 350.738875, + "max_rss_kb": 51120, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 1, + "wall_ms": 1206.10775, + "max_rss_kb": 87090, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 2, + "wall_ms": 1212.712583, + "max_rss_kb": 90658, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 3, + "wall_ms": 1205.088583, + "max_rss_kb": 87266, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 4, + "wall_ms": 1210.553416, + "max_rss_kb": 87410, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 5, + "wall_ms": 1202.203375, + "max_rss_kb": 88578, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 6, + "wall_ms": 1213.827875, + "max_rss_kb": 90034, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 7, + "wall_ms": 1211.120958, + "max_rss_kb": 87138, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 8, + "wall_ms": 1205.231958, + "max_rss_kb": 90594, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 9, + "wall_ms": 1209.958959, + "max_rss_kb": 87122, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 10, + "wall_ms": 1207.029875, + "max_rss_kb": 90626, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 11, + "wall_ms": 1207.174208, + "max_rss_kb": 88594, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 12, + "wall_ms": 1217.714416, + "max_rss_kb": 90402, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 13, + "wall_ms": 1302.91025, + "max_rss_kb": 87410, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 14, + "wall_ms": 1200.852625, + "max_rss_kb": 87234, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 15, + "wall_ms": 1206.205083, + "max_rss_kb": 87330, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 16, + "wall_ms": 1215.850292, + "max_rss_kb": 90610, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 17, + "wall_ms": 1197.882291, + "max_rss_kb": 90354, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 18, + "wall_ms": 1202.314584, + "max_rss_kb": 89074, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 19, + "wall_ms": 1205.347667, + "max_rss_kb": 88610, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "node", + "binary": "node", + "run": 20, + "wall_ms": 1201.450417, + "max_rss_kb": 88546, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 1, + "wall_ms": 977.446, + "max_rss_kb": 61648, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 2, + "wall_ms": 885.194667, + "max_rss_kb": 61504, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 3, + "wall_ms": 882.944083, + "max_rss_kb": 61440, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 4, + "wall_ms": 916.662791, + "max_rss_kb": 61392, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 5, + "wall_ms": 879.058958, + "max_rss_kb": 61568, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 6, + "wall_ms": 914.18375, + "max_rss_kb": 61472, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 7, + "wall_ms": 939.630125, + "max_rss_kb": 61760, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 8, + "wall_ms": 921.808083, + "max_rss_kb": 61472, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 9, + "wall_ms": 996.723708, + "max_rss_kb": 62256, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 10, + "wall_ms": 912.272917, + "max_rss_kb": 61456, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 11, + "wall_ms": 876.330292, + "max_rss_kb": 61456, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 12, + "wall_ms": 916.768333, + "max_rss_kb": 61712, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 13, + "wall_ms": 910.497875, + "max_rss_kb": 61392, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 14, + "wall_ms": 883.137125, + "max_rss_kb": 61744, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 15, + "wall_ms": 913.648917, + "max_rss_kb": 61456, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 16, + "wall_ms": 923.645208, + "max_rss_kb": 61760, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 17, + "wall_ms": 931.416667, + "max_rss_kb": 61328, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 18, + "wall_ms": 997.125042, + "max_rss_kb": 62032, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 19, + "wall_ms": 911.519041, + "max_rss_kb": 61360, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "image_convolution", + "language": "bun", + "binary": "bun", + "run": 20, + "wall_ms": 919.470709, + "max_rss_kb": 61616, + "exit_code": 0, + "stdout_first": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "stdout_last": "checksum=2ba2e053 dims=3840x2160 bytes=24883200", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 1, + "wall_ms": 34.952917, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 2, + "wall_ms": 34.2765, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 3, + "wall_ms": 36.259458, + "max_rss_kb": 1168, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 4, + "wall_ms": 34.075375, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 5, + "wall_ms": 33.190083, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 6, + "wall_ms": 35.027416, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 7, + "wall_ms": 35.046708, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 8, + "wall_ms": 32.711709, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 9, + "wall_ms": 33.6715, + "max_rss_kb": 1168, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 10, + "wall_ms": 33.941083, + "max_rss_kb": 1168, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 11, + "wall_ms": 32.825083, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 12, + "wall_ms": 33.327042, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 13, + "wall_ms": 33.789958, + "max_rss_kb": 1168, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 14, + "wall_ms": 34.544792, + "max_rss_kb": 1168, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 15, + "wall_ms": 36.450709, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 16, + "wall_ms": 34.217875, + "max_rss_kb": 1168, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 17, + "wall_ms": 33.518084, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 18, + "wall_ms": 34.189833, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 19, + "wall_ms": 35.79525, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 20, + "wall_ms": 33.690208, + "max_rss_kb": 1184, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 1, + "wall_ms": 32.702084, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 2, + "wall_ms": 32.95725, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 3, + "wall_ms": 35.187042, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 4, + "wall_ms": 34.697709, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 5, + "wall_ms": 32.767709, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 6, + "wall_ms": 34.482292, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 7, + "wall_ms": 33.74825, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 8, + "wall_ms": 32.675959, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 9, + "wall_ms": 32.843584, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 10, + "wall_ms": 34.443583, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 11, + "wall_ms": 34.460292, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 12, + "wall_ms": 37.253334, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 13, + "wall_ms": 34.396792, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 14, + "wall_ms": 35.454459, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 15, + "wall_ms": 34.475125, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 16, + "wall_ms": 34.593709, + "max_rss_kb": 1536, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 17, + "wall_ms": 33.509041, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 18, + "wall_ms": 34.916417, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 19, + "wall_ms": 34.8765, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 20, + "wall_ms": 34.490917, + "max_rss_kb": 1520, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 1, + "wall_ms": 38.32375, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 2, + "wall_ms": 39.518875, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 3, + "wall_ms": 40.58725, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 4, + "wall_ms": 38.416333, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 5, + "wall_ms": 37.675625, + "max_rss_kb": 3664, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 6, + "wall_ms": 38.730541, + "max_rss_kb": 3648, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 7, + "wall_ms": 38.265375, + "max_rss_kb": 3648, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 8, + "wall_ms": 38.861875, + "max_rss_kb": 3648, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 9, + "wall_ms": 39.309917, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 10, + "wall_ms": 39.232834, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 11, + "wall_ms": 39.7595, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 12, + "wall_ms": 43.094833, + "max_rss_kb": 3648, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 13, + "wall_ms": 39.386041, + "max_rss_kb": 3648, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 14, + "wall_ms": 39.651083, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 15, + "wall_ms": 39.739958, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 16, + "wall_ms": 38.731791, + "max_rss_kb": 3648, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 17, + "wall_ms": 38.625459, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 18, + "wall_ms": 37.813625, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 19, + "wall_ms": 41.030292, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 20, + "wall_ms": 39.108709, + "max_rss_kb": 3632, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 1, + "wall_ms": 145.082458, + "max_rss_kb": 39314, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 2, + "wall_ms": 143.340833, + "max_rss_kb": 36754, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 3, + "wall_ms": 144.099417, + "max_rss_kb": 35682, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 4, + "wall_ms": 142.78675, + "max_rss_kb": 37810, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 5, + "wall_ms": 142.080334, + "max_rss_kb": 36370, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 6, + "wall_ms": 143.064667, + "max_rss_kb": 35810, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 7, + "wall_ms": 143.203833, + "max_rss_kb": 37746, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 8, + "wall_ms": 144.196208, + "max_rss_kb": 36050, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 9, + "wall_ms": 145.091417, + "max_rss_kb": 36146, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 10, + "wall_ms": 149.108625, + "max_rss_kb": 37730, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 11, + "wall_ms": 143.919375, + "max_rss_kb": 36098, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 12, + "wall_ms": 144.761667, + "max_rss_kb": 37906, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 13, + "wall_ms": 144.837333, + "max_rss_kb": 37906, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 14, + "wall_ms": 143.857375, + "max_rss_kb": 37585, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 15, + "wall_ms": 141.493333, + "max_rss_kb": 36866, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 16, + "wall_ms": 142.255083, + "max_rss_kb": 36114, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 17, + "wall_ms": 141.976166, + "max_rss_kb": 38913, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 18, + "wall_ms": 143.825708, + "max_rss_kb": 35970, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 19, + "wall_ms": 140.390125, + "max_rss_kb": 37122, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "node", + "binary": "node", + "run": 20, + "wall_ms": 143.354083, + "max_rss_kb": 37842, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 1, + "wall_ms": 49.903875, + "max_rss_kb": 10832, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 2, + "wall_ms": 51.3185, + "max_rss_kb": 10848, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 3, + "wall_ms": 51.658417, + "max_rss_kb": 10816, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 4, + "wall_ms": 51.989667, + "max_rss_kb": 10800, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 5, + "wall_ms": 49.75, + "max_rss_kb": 10816, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 6, + "wall_ms": 52.267292, + "max_rss_kb": 10864, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 7, + "wall_ms": 50.136416, + "max_rss_kb": 10800, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 8, + "wall_ms": 51.464542, + "max_rss_kb": 10832, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 9, + "wall_ms": 49.678125, + "max_rss_kb": 10880, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 10, + "wall_ms": 49.480833, + "max_rss_kb": 10832, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 11, + "wall_ms": 49.999458, + "max_rss_kb": 10864, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 12, + "wall_ms": 53.987, + "max_rss_kb": 10832, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 13, + "wall_ms": 50.086625, + "max_rss_kb": 10880, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 14, + "wall_ms": 51.824916, + "max_rss_kb": 10848, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 15, + "wall_ms": 51.8455, + "max_rss_kb": 10832, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 16, + "wall_ms": 52.428583, + "max_rss_kb": 10880, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 17, + "wall_ms": 53.90225, + "max_rss_kb": 10928, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 18, + "wall_ms": 49.00075, + "max_rss_kb": 10816, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 19, + "wall_ms": 50.662875, + "max_rss_kb": 10816, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_small", + "language": "bun", + "binary": "bun", + "run": 20, + "wall_ms": 50.818208, + "max_rss_kb": 10800, + "exit_code": 0, + "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 1, + "wall_ms": 601.8995, + "max_rss_kb": 442352, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 2, + "wall_ms": 602.069167, + "max_rss_kb": 438720, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 3, + "wall_ms": 605.726, + "max_rss_kb": 440912, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 4, + "wall_ms": 609.582209, + "max_rss_kb": 438336, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 5, + "wall_ms": 660.508334, + "max_rss_kb": 442656, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 6, + "wall_ms": 607.789875, + "max_rss_kb": 440896, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 7, + "wall_ms": 608.638291, + "max_rss_kb": 442672, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 8, + "wall_ms": 610.796208, + "max_rss_kb": 442336, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 9, + "wall_ms": 599.539584, + "max_rss_kb": 442672, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 10, + "wall_ms": 607.225125, + "max_rss_kb": 440880, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 11, + "wall_ms": 602.323208, + "max_rss_kb": 442672, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 12, + "wall_ms": 611.593584, + "max_rss_kb": 440896, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 13, + "wall_ms": 612.353416, + "max_rss_kb": 438704, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 14, + "wall_ms": 607.287, + "max_rss_kb": 442672, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 15, + "wall_ms": 621.74625, + "max_rss_kb": 442400, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 16, + "wall_ms": 621.437833, + "max_rss_kb": 438704, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 17, + "wall_ms": 607.873708, + "max_rss_kb": 442352, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 18, + "wall_ms": 608.823792, + "max_rss_kb": 440928, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 19, + "wall_ms": 612.654292, + "max_rss_kb": 438432, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "rust", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", + "run": 20, + "wall_ms": 603.127417, + "max_rss_kb": 436960, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 1, + "wall_ms": 921.030208, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 2, + "wall_ms": 860.017666, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 3, + "wall_ms": 863.431666, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 4, + "wall_ms": 870.846875, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 5, + "wall_ms": 875.882416, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 6, + "wall_ms": 868.164917, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 7, + "wall_ms": 870.474375, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 8, + "wall_ms": 932.23875, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 9, + "wall_ms": 864.806708, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 10, + "wall_ms": 862.333083, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 11, + "wall_ms": 865.232209, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 12, + "wall_ms": 872.025042, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 13, + "wall_ms": 868.595417, + "max_rss_kb": 590608, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 14, + "wall_ms": 863.729042, + "max_rss_kb": 590592, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 15, + "wall_ms": 865.995625, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 16, + "wall_ms": 868.087834, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 17, + "wall_ms": 865.841083, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 18, + "wall_ms": 866.776833, + "max_rss_kb": 590592, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 19, + "wall_ms": 866.140667, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "zig", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "run": 20, + "wall_ms": 895.654292, + "max_rss_kb": 590624, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 1, + "wall_ms": 1091.640917, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 2, + "wall_ms": 1100.503541, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 3, + "wall_ms": 1105.45, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 4, + "wall_ms": 1126.517917, + "max_rss_kb": 748529, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 5, + "wall_ms": 1100.768417, + "max_rss_kb": 748529, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 6, + "wall_ms": 1097.905375, + "max_rss_kb": 748529, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 7, + "wall_ms": 1090.236125, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 8, + "wall_ms": 1098.249208, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 9, + "wall_ms": 1098.499125, + "max_rss_kb": 748529, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 10, + "wall_ms": 1096.985834, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 11, + "wall_ms": 1098.672792, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 12, + "wall_ms": 1093.523459, + "max_rss_kb": 748513, + "exit_code": 0, + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" + }, + { + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 13, + "wall_ms": 1107.960791, + "max_rss_kb": 748513, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 4, - "wall_ms": 44.004375, - "max_rss_kb": 1168, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 14, + "wall_ms": 1093.430417, + "max_rss_kb": 748513, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 5, - "wall_ms": 34.715542, - "max_rss_kb": 1184, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 15, + "wall_ms": 1091.401333, + "max_rss_kb": 748513, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", - "run": 1, - "wall_ms": 38.860417, - "max_rss_kb": 1552, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 16, + "wall_ms": 1095.222167, + "max_rss_kb": 748513, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", - "run": 2, - "wall_ms": 51.309083, - "max_rss_kb": 1536, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 17, + "wall_ms": 1105.782333, + "max_rss_kb": 748529, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", - "run": 3, - "wall_ms": 42.542666, - "max_rss_kb": 1536, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 18, + "wall_ms": 1096.645334, + "max_rss_kb": 748513, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", - "run": 4, - "wall_ms": 37.121708, - "max_rss_kb": 1536, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 19, + "wall_ms": 1100.851083, + "max_rss_kb": 748513, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", - "run": 5, - "wall_ms": 50.8935, - "max_rss_kb": 1536, + "workload": "json_pipeline_full", + "language": "perry", + "binary": "/Users/amlug/projects/perry/perry/.claude/worktrees/refresh-benchmarks/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "run": 20, + "wall_ms": 1121.404833, + "max_rss_kb": 748545, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", "run": 1, - "wall_ms": 46.582792, - "max_rss_kb": 3168, + "wall_ms": 971.31025, + "max_rss_kb": 901232, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", "run": 2, - "wall_ms": 44.849583, - "max_rss_kb": 3184, + "wall_ms": 958.09325, + "max_rss_kb": 900719, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", "run": 3, - "wall_ms": 46.64125, - "max_rss_kb": 3184, + "wall_ms": 966.652834, + "max_rss_kb": 901520, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", "run": 4, - "wall_ms": 47.152625, - "max_rss_kb": 3184, + "wall_ms": 958.558708, + "max_rss_kb": 902000, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", "run": 5, - "wall_ms": 57.337333, - "max_rss_kb": 3184, + "wall_ms": 958.128167, + "max_rss_kb": 901616, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", + "workload": "json_pipeline_full", "language": "node", "binary": "node", - "run": 1, - "wall_ms": 165.984583, - "max_rss_kb": 37986, + "run": 6, + "wall_ms": 966.020417, + "max_rss_kb": 902000, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", + "workload": "json_pipeline_full", "language": "node", "binary": "node", - "run": 2, - "wall_ms": 207.100667, - "max_rss_kb": 35890, + "run": 7, + "wall_ms": 959.655041, + "max_rss_kb": 899968, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", + "workload": "json_pipeline_full", "language": "node", "binary": "node", - "run": 3, - "wall_ms": 159.098958, - "max_rss_kb": 36994, + "run": 8, + "wall_ms": 955.413791, + "max_rss_kb": 899952, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", + "workload": "json_pipeline_full", "language": "node", "binary": "node", - "run": 4, - "wall_ms": 186.534958, - "max_rss_kb": 39122, + "run": 9, + "wall_ms": 972.537792, + "max_rss_kb": 901024, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", + "workload": "json_pipeline_full", "language": "node", "binary": "node", - "run": 5, - "wall_ms": 173.951583, - "max_rss_kb": 35970, + "run": 10, + "wall_ms": 990.437083, + "max_rss_kb": 901968, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "bun", - "binary": "bun", - "run": 1, - "wall_ms": 63.902084, - "max_rss_kb": 10928, + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", + "run": 11, + "wall_ms": 965.614, + "max_rss_kb": 902112, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "bun", - "binary": "bun", - "run": 2, - "wall_ms": 71.972208, - "max_rss_kb": 10928, + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", + "run": 12, + "wall_ms": 970.193, + "max_rss_kb": 900896, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "bun", - "binary": "bun", - "run": 3, - "wall_ms": 59.651417, - "max_rss_kb": 10832, + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", + "run": 13, + "wall_ms": 962.056416, + "max_rss_kb": 901024, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "bun", - "binary": "bun", - "run": 4, - "wall_ms": 73.2785, - "max_rss_kb": 10896, + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", + "run": 14, + "wall_ms": 984.372375, + "max_rss_kb": 901824, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { - "workload": "json_pipeline_small", - "language": "bun", - "binary": "bun", - "run": 5, - "wall_ms": 65.391042, - "max_rss_kb": 10928, + "workload": "json_pipeline_full", + "language": "node", + "binary": "node", + "run": 15, + "wall_ms": 960.0985, + "max_rss_kb": 901040, "exit_code": 0, - "stdout_first": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8", - "stdout_last": "input_bytes=21671 records_in=100 records_out=56 output_bytes=14841 hash=7fc66fa8" + "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 1, - "wall_ms": 879.89725, - "max_rss_kb": 440944, + "language": "node", + "binary": "node", + "run": 16, + "wall_ms": 965.002959, + "max_rss_kb": 900336, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 2, - "wall_ms": 738.474666, - "max_rss_kb": 442336, + "language": "node", + "binary": "node", + "run": 17, + "wall_ms": 981.608, + "max_rss_kb": 900848, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 3, - "wall_ms": 691.6455, - "max_rss_kb": 442368, + "language": "node", + "binary": "node", + "run": 18, + "wall_ms": 980.784416, + "max_rss_kb": 902336, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 4, - "wall_ms": 711.723792, - "max_rss_kb": 440944, + "language": "node", + "binary": "node", + "run": 19, + "wall_ms": 968.113208, + "max_rss_kb": 901568, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "rust", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/rust/target/release/json_pipeline", - "run": 5, - "wall_ms": 747.716667, - "max_rss_kb": 442384, + "language": "node", + "binary": "node", + "run": 20, + "wall_ms": 975.743166, + "max_rss_kb": 900832, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "language": "bun", + "binary": "bun", "run": 1, - "wall_ms": 982.470292, - "max_rss_kb": 590576, + "wall_ms": 646.0195, + "max_rss_kb": 608353, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "language": "bun", + "binary": "bun", "run": 2, - "wall_ms": 1004.263, - "max_rss_kb": 590576, + "wall_ms": 659.163708, + "max_rss_kb": 607969, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "language": "bun", + "binary": "bun", "run": 3, - "wall_ms": 978.323625, - "max_rss_kb": 590576, + "wall_ms": 649.823041, + "max_rss_kb": 608001, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "language": "bun", + "binary": "bun", "run": 4, - "wall_ms": 981.93125, - "max_rss_kb": 590576, + "wall_ms": 654.0085, + "max_rss_kb": 607969, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "zig", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/zig/zig-out/bin/json_pipeline", + "language": "bun", + "binary": "bun", "run": 5, - "wall_ms": 948.728292, - "max_rss_kb": 590592, + "wall_ms": 649.594333, + "max_rss_kb": 608177, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", - "run": 1, - "wall_ms": 1175.620083, - "max_rss_kb": 737601, + "language": "bun", + "binary": "bun", + "run": 6, + "wall_ms": 648.925459, + "max_rss_kb": 608241, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", - "run": 2, - "wall_ms": 1188.095167, - "max_rss_kb": 737617, + "language": "bun", + "binary": "bun", + "run": 7, + "wall_ms": 654.835208, + "max_rss_kb": 607953, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", - "run": 3, - "wall_ms": 1259.904958, - "max_rss_kb": 737601, + "language": "bun", + "binary": "bun", + "run": 8, + "wall_ms": 714.429583, + "max_rss_kb": 606945, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", - "run": 4, - "wall_ms": 1184.493708, - "max_rss_kb": 737585, + "language": "bun", + "binary": "bun", + "run": 9, + "wall_ms": 651.221167, + "max_rss_kb": 608017, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "perry", - "binary": "/Users/amlug/projects/perry/perry/benchmarks/honest_bench/workloads/1_json_pipeline/perry/json_pipeline", - "run": 5, - "wall_ms": 1235.395917, - "max_rss_kb": 737633, + "language": "bun", + "binary": "bun", + "run": 10, + "wall_ms": 646.6225, + "max_rss_kb": 608097, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "node", - "binary": "node", - "run": 1, - "wall_ms": 1191.306875, - "max_rss_kb": 901456, + "language": "bun", + "binary": "bun", + "run": 11, + "wall_ms": 646.376, + "max_rss_kb": 608129, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "node", - "binary": "node", - "run": 2, - "wall_ms": 1426.541583, - "max_rss_kb": 743368, + "language": "bun", + "binary": "bun", + "run": 12, + "wall_ms": 648.719, + "max_rss_kb": 608241, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "node", - "binary": "node", - "run": 3, - "wall_ms": 1171.957167, - "max_rss_kb": 901104, + "language": "bun", + "binary": "bun", + "run": 13, + "wall_ms": 649.941125, + "max_rss_kb": 607809, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "node", - "binary": "node", - "run": 4, - "wall_ms": 1234.957625, - "max_rss_kb": 901664, + "language": "bun", + "binary": "bun", + "run": 14, + "wall_ms": 649.531625, + "max_rss_kb": 606689, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", - "language": "node", - "binary": "node", - "run": 5, - "wall_ms": 1088.871834, - "max_rss_kb": 901328, + "language": "bun", + "binary": "bun", + "run": 15, + "wall_ms": 647.0015, + "max_rss_kb": 607953, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", "language": "bun", "binary": "bun", - "run": 1, - "wall_ms": 730.115583, - "max_rss_kb": 606433, + "run": 16, + "wall_ms": 650.844208, + "max_rss_kb": 607857, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", "language": "bun", "binary": "bun", - "run": 2, - "wall_ms": 734.023333, - "max_rss_kb": 607985, + "run": 17, + "wall_ms": 646.94375, + "max_rss_kb": 608193, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", "language": "bun", "binary": "bun", - "run": 3, - "wall_ms": 770.399958, - "max_rss_kb": 607185, + "run": 18, + "wall_ms": 651.652708, + "max_rss_kb": 607937, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", "language": "bun", "binary": "bun", - "run": 4, - "wall_ms": 768.649416, - "max_rss_kb": 606849, + "run": 19, + "wall_ms": 651.993042, + "max_rss_kb": 608177, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" }, { "workload": "json_pipeline_full", "language": "bun", "binary": "bun", - "run": 5, - "wall_ms": 739.061125, - "max_rss_kb": 607905, + "run": 20, + "wall_ms": 658.766917, + "max_rss_kb": 607985, "exit_code": 0, "stdout_first": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", - "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588" + "stdout_last": "input_bytes=112695869 records_in=500000 records_out=249976 output_bytes=68140794 hash=b7e8a588", + "output_match": true, + "output_match_reason": "" } ] } diff --git a/benchmarks/honest_bench/results/summary.txt b/benchmarks/honest_bench/results/summary.txt new file mode 100644 index 0000000000..a6114d89fe --- /dev/null +++ b/benchmarks/honest_bench/results/summary.txt @@ -0,0 +1,24 @@ +# honest_bench — output-correctness summary +# 300 measured rows across 15 (workload, language) pairs +# expected.json: present + +## PERF — output verified to match Bun reference +image_convolution bun 915.4 ms runs=20 match=20/20 +image_convolution node 1206.6 ms runs=20 match=20/20 +image_convolution perry 354.0 ms runs=20 match=20/20 +image_convolution rust 392.1 ms runs=20 match=20/20 +image_convolution zig 245.4 ms runs=20 match=20/20 +json_pipeline_full bun 649.9 ms runs=20 match=20/20 +json_pipeline_full node 966.3 ms runs=20 match=20/20 +json_pipeline_full perry 1098.4 ms runs=20 match=20/20 +json_pipeline_full rust 608.3 ms runs=20 match=20/20 +json_pipeline_full zig 867.4 ms runs=20 match=20/20 +json_pipeline_small bun 51.1 ms runs=20 match=20/20 +json_pipeline_small node 143.6 ms runs=20 match=20/20 +json_pipeline_small perry 39.2 ms runs=20 match=20/20 +json_pipeline_small rust 34.1 ms runs=20 match=20/20 +json_pipeline_small zig 34.5 ms runs=20 match=20/20 + +# To turn mismatches into a hard CI failure: ./run.sh --strict-output +# To refresh the reference (only when output semantics intentionally change): +# HONEST_BENCH_REFRESH_EXPECTED=1 ./run.sh diff --git a/benchmarks/json_polyglot/RESULTS.md b/benchmarks/json_polyglot/RESULTS.md index ea9fe6169b..39accf3b4a 100644 --- a/benchmarks/json_polyglot/RESULTS.md +++ b/benchmarks/json_polyglot/RESULTS.md @@ -1,8 +1,8 @@ # JSON Polyglot Benchmark Results **Runs per cell:** 11 · **Pinning:** macOS scheduler hint (taskpolicy -t 0 -l 0 — P-core preferred via throughput/latency tiers, NOT strict affinity) -**Hardware:** Darwin 25.4.0 arm64 on MacBookPro. -**Date:** 2026-04-25. +**Hardware:** Darwin 25.4.0 arm64 on MacBook-Pro-69. +**Date:** 2026-05-14. Two workloads, each language listed twice (idiomatic / optimized flag profile). Median wall-clock time is the headline number; p95, σ (population stddev), @@ -18,24 +18,23 @@ low — the lazy path can avoid materializing the parse tree entirely. | Implementation | Profile | Median (ms) | p95 (ms) | σ | Min | Max | Peak RSS (MB) | |---|---|---:|---:|---:|---:|---:|---:| -| c++ -O3 -flto (simdjson) | optimized | 24 | 28 | 1.2 | 23 | 28 | 8 | -| c++ -O2 (simdjson) | idiomatic | 29 | 34 | 1.7 | 28 | 34 | 8 | -| perry (gen-gc + lazy tape) | optimized | 75 | 91 | 6.9 | 69 | 91 | 85 | -| rust serde_json (LTO+1cgu) | optimized | 185 | 190 | 1.7 | 183 | 190 | 11 | -| rust serde_json | idiomatic | 198 | 204 | 2.3 | 195 | 204 | 11 | -| bun (default) | idiomatic | 259 | 342 | 26.1 | 253 | 342 | 82 | -| perry (mark-sweep, no lazy) | idiomatic | 363 | 378 | 6.3 | 356 | 378 | 102 | -| node (default) | idiomatic | 394 | 602 | 60.1 | 382 | 602 | 127 | -| kotlin -server -Xmx512m | optimized | 453 | 484 | 12.6 | 447 | 484 | 423 | -| kotlin (kotlinx.serialization) | idiomatic | 473 | 533 | 21.4 | 453 | 533 | 606 | -| node --max-old=4096 | optimized | 526 | 605 | 38.3 | 478 | 605 | 128 | -| assemblyscript+json-as (wasmtime) | idiomatic | 598 | 621 | 10.5 | 582 | 621 | 58 | -| c++ -O3 -flto (nlohmann/json) | optimized | 772 | 774 | 1.1 | 771 | 774 | 25 | -| go -ldflags="-s -w" -trimpath | optimized | 805 | 824 | 9.1 | 796 | 824 | 23 | -| c++ -O2 (nlohmann/json) | idiomatic | 840 | 846 | 3.0 | 836 | 846 | 25 | -| go (encoding/json) | idiomatic | 848 | 1344 | 184.3 | 796 | 1344 | 23 | -| swift -O -wmo (Foundation) | optimized | 3709 | 3793 | 32.5 | 3686 | 3793 | 34 | -| swift -O (Foundation) | idiomatic | 3730 | 3844 | 54.3 | 3688 | 3844 | 34 | +| c++ -O3 -flto (simdjson) | optimized | 24 | 26 | 0.6 | 24 | 26 | 8 | +| c++ -O2 (simdjson) | idiomatic | 29 | 34 | 1.4 | 29 | 34 | 8 | +| perry (gen-gc + lazy tape) | optimized | 83 | 86 | 1.4 | 81 | 86 | 227 | +| rust serde_json (LTO+1cgu) | optimized | 186 | 190 | 1.4 | 185 | 190 | 11 | +| rust serde_json | idiomatic | 197 | 201 | 1.7 | 195 | 201 | 11 | +| bun (default) | idiomatic | 249 | 252 | 1.3 | 247 | 252 | 81 | +| perry (mark-sweep, no lazy) | idiomatic | 335 | 339 | 1.7 | 333 | 339 | 283 | +| node (default) | idiomatic | 377 | 386 | 4.5 | 370 | 386 | 127 | +| node --max-old=4096 | optimized | 380 | 386 | 4.0 | 373 | 386 | 127 | +| kotlin -server -Xmx512m | optimized | 457 | 470 | 5.3 | 451 | 470 | 424 | +| kotlin (kotlinx.serialization) | idiomatic | 476 | 495 | 8.0 | 467 | 495 | 606 | +| c++ -O3 -flto (nlohmann/json) | optimized | 783 | 785 | 1.8 | 780 | 785 | 25 | +| go -ldflags="-s -w" -trimpath | optimized | 796 | 802 | 3.8 | 788 | 802 | 23 | +| go (encoding/json) | idiomatic | 797 | 829 | 9.9 | 792 | 829 | 23 | +| c++ -O2 (nlohmann/json) | idiomatic | 849 | 851 | 1.1 | 848 | 851 | 25 | +| swift -O -wmo (Foundation) | optimized | 3771 | 3834 | 30.9 | 3698 | 3834 | 34 | +| swift -O (Foundation) | idiomatic | 3783 | 3819 | 18.4 | 3750 | 3819 | 34 | ## JSON parse-and-iterate @@ -46,21 +45,20 @@ JSON content. 10k records, ~1 MB blob, 50 iterations per run. | Implementation | Profile | Median (ms) | p95 (ms) | σ | Min | Max | Peak RSS (MB) | |---|---|---:|---:|---:|---:|---:|---:| -| c++ -O2 (simdjson) | idiomatic | 24 | 27 | 0.9 | 24 | 27 | 8 | -| c++ -O3 -flto (simdjson) | optimized | 24 | 24 | 0.4 | 23 | 24 | 8 | -| rust serde_json (LTO+1cgu) | optimized | 183 | 185 | 1.2 | 182 | 185 | 11 | -| rust serde_json | idiomatic | 200 | 330 | 37.4 | 196 | 330 | 13 | -| bun (default) | idiomatic | 254 | 255 | 1.9 | 249 | 255 | 87 | -| node --max-old=4096 | optimized | 355 | 389 | 11.4 | 346 | 389 | 87 | -| perry (mark-sweep, no lazy) | idiomatic | 375 | 402 | 10.2 | 370 | 402 | 102 | -| node (default) | idiomatic | 380 | 652 | 87.2 | 356 | 652 | 101 | -| kotlin -server -Xmx512m | optimized | 455 | 465 | 6.1 | 444 | 465 | 426 | -| perry (gen-gc + lazy tape) | optimized | 466 | 475 | 7.0 | 457 | 475 | 100 | -| kotlin (kotlinx.serialization) | idiomatic | 469 | 481 | 5.9 | 459 | 481 | 608 | -| assemblyscript+json-as (wasmtime) | idiomatic | 605 | 632 | 11.4 | 587 | 632 | 58 | -| c++ -O3 -flto (nlohmann/json) | optimized | 786 | 793 | 2.7 | 782 | 793 | 25 | -| go -ldflags="-s -w" -trimpath | optimized | 805 | 833 | 9.2 | 798 | 833 | 22 | -| go (encoding/json) | idiomatic | 811 | 886 | 25.3 | 803 | 886 | 23 | -| c++ -O2 (nlohmann/json) | idiomatic | 866 | 929 | 18.7 | 857 | 929 | 26 | -| swift -O (Foundation) | idiomatic | 3686 | 4009 | 96.7 | 3634 | 4009 | 34 | -| swift -O -wmo (Foundation) | optimized | 3702 | 3769 | 36.2 | 3660 | 3769 | 34 | +| c++ -O2 (simdjson) | idiomatic | 24 | 25 | 0.5 | 24 | 25 | 8 | +| c++ -O3 -flto (simdjson) | optimized | 24 | 25 | 0.3 | 24 | 25 | 8 | +| rust serde_json (LTO+1cgu) | optimized | 182 | 184 | 0.9 | 181 | 184 | 11 | +| rust serde_json | idiomatic | 197 | 203 | 1.8 | 196 | 203 | 11 | +| bun (default) | idiomatic | 251 | 254 | 1.2 | 250 | 254 | 86 | +| perry (mark-sweep, no lazy) | idiomatic | 338 | 366 | 8.3 | 336 | 366 | 283 | +| node (default) | idiomatic | 351 | 357 | 2.9 | 346 | 357 | 87 | +| node --max-old=4096 | optimized | 352 | 360 | 5.4 | 343 | 360 | 87 | +| perry (gen-gc + lazy tape) | optimized | 425 | 428 | 2.1 | 421 | 428 | 309 | +| kotlin -server -Xmx512m | optimized | 462 | 527 | 20.4 | 449 | 527 | 424 | +| kotlin (kotlinx.serialization) | idiomatic | 476 | 485 | 3.7 | 473 | 485 | 606 | +| c++ -O3 -flto (nlohmann/json) | optimized | 797 | 828 | 9.2 | 795 | 828 | 25 | +| go -ldflags="-s -w" -trimpath | optimized | 798 | 842 | 13.0 | 794 | 842 | 23 | +| go (encoding/json) | idiomatic | 799 | 805 | 3.1 | 795 | 805 | 23 | +| c++ -O2 (nlohmann/json) | idiomatic | 877 | 882 | 2.6 | 873 | 882 | 25 | +| swift -O (Foundation) | idiomatic | 3742 | 3791 | 18.9 | 3721 | 3791 | 34 | +| swift -O -wmo (Foundation) | optimized | 3758 | 3793 | 23.9 | 3713 | 3793 | 34 | diff --git a/benchmarks/polyglot/RESULTS.md b/benchmarks/polyglot/RESULTS.md index 1b9e0eea13..4f7b759f45 100644 --- a/benchmarks/polyglot/RESULTS.md +++ b/benchmarks/polyglot/RESULTS.md @@ -13,11 +13,9 @@ each delta. ## Results -**Run date (Perry):** 2026-05-06 — Perry commit `main` (v0.5.585), -both `default` and `--fast-math` columns. -**Run date (other languages):** 2026-04-25 (v0.5.249-era -polyglot run); their numbers haven't moved (same compilers, same -hardware), full polyglot rerun is on the followup list. +**Run date:** 2026-05-14 — Perry v0.5.908, full polyglot sweep across +all 10 runtimes. Both `default` and `--fast-math` Perry columns, +on an otherwise-idle machine. **Hardware:** Apple M1 Max (10 cores, 64 GB RAM), macOS 26.4. **Methodology:** RUNS=11 per cell. **Median wall-clock ms below**; full per-cell stats (median + p95 + σ + min + max) in `RESULTS_AUTO.md`. @@ -37,15 +35,25 @@ See `../docs/src/cli/fast-math.md` for the full behavior contract. | Benchmark | Perry default | Perry --fast | Rust | C++ | Go | Swift | Java | Node | Bun | Python | |---------------------|--------------:|-------------:|------:|------:|------:|------:|------:|------:|------:|--------:| -| fibonacci | 304 | 304 | 330 | 315 | 451 | 406 | 282 | 1022 | 589 | 16054 | -| loop_overhead | 95 | 12 | 98 | 98 | 98 | 143 | 100 | 54 | 46 | 3019 | -| **loop_data_dependent** | **221** | **221** | **229** | **129** | **128** | **233** | **229** | **322** | **232** | **10750** | -| array_write | 4 | 3 | 7 | 3 | 9 | 2 | 7 | 9 | 6 | 401 | -| array_read | 11 | 11 | 9 | 9 | 11 | 9 | 12 | 13 | 16 | 342 | -| math_intensive | 50 | 14 | 48 | 51 | 49 | 50 | 74 | 51 | 51 | 2238 | -| object_create | 2 | 0 | 0 | 0 | 0 | 0 | 5 | 11 | 6 | 164 | -| nested_loops | 17 | 17 | 8 | 8 | 10 | 8 | 11 | 18 | 21 | 484 | -| accumulate | 95 | 33 | 98 | 98 | 98 | 98 | 100 | 617 | 100 | 5048 | +| fibonacci | 309 | 306 | 316 | 309 | 446 | 401 | 278 | 987 | 518 | 12382 | +| loop_overhead | 97 | 12 | 97 | 96 | 96 | 96 | 97 | 53 | 41 | 1967 | +| **loop_data_dependent** | **225** | **224** | **226** | **129** | **128** | **225** | **226** | **226** | **230** | **6068** | +| array_write | 3 | 4 | 7 | 2 | 9 | 2 | 6 | 9 | 6 | 331 | +| array_read | 11 | 11 | 9 | 9 | 10 | 9 | 11 | 14 | 16 | 236 | +| math_intensive | 51 | 14 | 48 | 50 | 48 | 48 | 50 | 49 | 50 | 1579 | +| object_create | 2 | 0 | 0 | 0 | 0 | 0 | 5 | 8 | 6 | 133 | +| nested_loops | 18 | 17 | 8 | 8 | 10 | 8 | 10 | 17 | 20 | 353 | +| accumulate | 97 | 34 | 97 | 96 | 96 | 96 | 98 | 597 | 98 | 4382 | + +> Clean v0.5.908 sweep on an idle machine — both Perry columns and all +> peer languages re-measured together. σ on Perry cells is 0.3-2.2 ms +> across the board (vs the 25-57 ms spread in yesterday's contaminated +> v0.5.891 sweep). `fibonacci` and `loop_data_dependent` are within +> 3 ms between default and `--fast-math`, confirming the structural +> expectation (integer recursion / sequential FP carry are fast-math- +> immune). Trivially-foldable rows (`loop_overhead` / `math_intensive` +> / `accumulate`) reproduce the v0.5.585 fast-math win pattern to the +> millisecond. **New benchmark in v0.5.249: `loop_data_dependent`.** Same shape as `loop_overhead` but with a multiplicative carry through `sum` and diff --git a/benchmarks/polyglot/RESULTS_AUTO.md b/benchmarks/polyglot/RESULTS_AUTO.md index f4e4c59069..93d84db9de 100644 --- a/benchmarks/polyglot/RESULTS_AUTO.md +++ b/benchmarks/polyglot/RESULTS_AUTO.md @@ -1,31 +1,22 @@ # Polyglot Compute-Microbench Results (auto-generated) **Runs per cell:** 11 · **Pinning:** macOS scheduler hint (taskpolicy -t 0 -l 0 — P-core preferred via throughput/latency tiers, NOT strict affinity) -**Hardware:** Darwin 25.4.0 arm64 on MacBookPro · **Date:** 2026-04-25 -**Perry version:** v0.5.249 - -> **⚠ Pre-fast-math-flip snapshot (v0.5.585+).** This table was generated -> when Perry emitted `reassoc + contract` per-instruction FMF flags -> unconditionally. The current default (v0.5.585+) does NOT emit those -> flags; the numbers in the Perry column here correspond to today's -> `--fast-math` mode. For the post-flip Perry numbers in BOTH modes, -> see [`RESULTS.md`](./RESULTS.md). Re-running this auto-generated file -> needs a full polyglot sweep (8 benches × 9 runtimes × RUNS=11); -> tracked as a follow-up. +**Hardware:** Darwin 25.4.0 arm64 on MacBook-Pro-69 · **Date:** 2026-05-14 +**Perry version:** v0.5.908 Headline = median wall-clock ms. Lower is better. | Benchmark | Perry | Rust | C++ | Go | Swift | Java | Node | Bun | Hermes | Python | |---------------------|-------|-------|-------|-------|-------|-------|-------|-------|--------|---------| -| fibonacci | 318 | 330 | 315 | 451 | 406 | 282 | 1022 | 589 | - | 16054 | -| loop_overhead | 12 | 98 | 98 | 98 | 143 | 100 | 54 | 46 | - | 3019 | -| loop_data_dependent | 235 | 229 | 129 | 128 | 233 | 229 | 322 | 232 | - | 10750 | -| array_write | 4 | 7 | 3 | 9 | 2 | 7 | 9 | 6 | - | 401 | -| array_read | 4 | 9 | 9 | 11 | 9 | 12 | 13 | 16 | - | 342 | -| math_intensive | 14 | 48 | 51 | 49 | 50 | 74 | 51 | 51 | - | 2238 | -| object_create | 1 | 0 | 0 | 0 | 0 | 5 | 11 | 6 | - | 164 | -| nested_loops | 18 | 8 | 8 | 10 | 8 | 11 | 18 | 21 | - | 484 | -| accumulate | 34 | 98 | 98 | 98 | 98 | 100 | 617 | 100 | - | 5048 | +| fibonacci | 309 | 316 | 309 | 446 | 401 | 278 | 987 | 518 | - | 12382 | +| loop_overhead | 97 | 97 | 96 | 96 | 96 | 97 | 53 | 41 | - | 1967 | +| loop_data_dependent | 225 | 226 | 129 | 128 | 225 | 226 | 226 | 230 | - | 6068 | +| array_write | 3 | 7 | 2 | 9 | 2 | 6 | 9 | 6 | - | 331 | +| array_read | 11 | 9 | 9 | 10 | 9 | 11 | 14 | 16 | - | 236 | +| math_intensive | 51 | 48 | 50 | 48 | 48 | 50 | 49 | 50 | - | 1579 | +| object_create | 2 | 0 | 0 | 0 | 0 | 5 | 8 | 6 | - | 133 | +| nested_loops | 18 | 8 | 8 | 10 | 8 | 10 | 17 | 20 | - | 353 | +| accumulate | 97 | 97 | 96 | 96 | 96 | 98 | 597 | 98 | - | 4382 | ## Per-cell full stats @@ -33,93 +24,113 @@ Format: median (p95: X, σ: S, min: Y, max: Z) ms | Benchmark | Runtime | Stats (ms) | |---|---|---| -| fibonacci | perry | 318 (p95: 358, σ: 13.4, min: 315, max: 358) | -| fibonacci | rust | 330 (p95: 662, σ: 115.5, min: 322, max: 662) | -| fibonacci | cpp | 315 (p95: 317, σ: 1.1, min: 314, max: 317) | -| fibonacci | go | 451 (p95: 462, σ: 4.1, min: 448, max: 462) | -| fibonacci | swift | 406 (p95: 409, σ: 0.9, min: 406, max: 409) | -| fibonacci | java | 282 (p95: 364, σ: 23.9, min: 279, max: 364) | -| fibonacci | node | 1022 (p95: 1656, σ: 182.3, min: 1008, max: 1656) | -| fibonacci | bun | 589 (p95: 1442, σ: 250.3, min: 537, max: 1442) | +| fibonacci | perry | 309 (p95: 317, σ: 2.8, min: 307, max: 317) | +| fibonacci | rust | 316 (p95: 323, σ: 2.5, min: 315, max: 323) | +| fibonacci | cpp | 309 (p95: 312, σ: 1.0, min: 308, max: 312) | +| fibonacci | go | 446 (p95: 448, σ: 0.9, min: 445, max: 448) | +| fibonacci | swift | 401 (p95: 409, σ: 2.7, min: 399, max: 409) | +| fibonacci | java | 278 (p95: 296, σ: 6.0, min: 277, max: 296) | +| fibonacci | node | 987 (p95: 1030, σ: 12.5, min: 985, max: 1030) | +| fibonacci | bun | 518 (p95: 525, σ: 2.9, min: 515, max: 525) | | fibonacci | hermes | - | -| fibonacci | python | 16054 (p95: 20114, σ: 1178.7, min: 15874, max: 20114) | -| loop_overhead | perry | 12 (p95: 13, σ: 0.5, min: 12, max: 13) | -| loop_overhead | rust | 98 (p95: 264, σ: 61.0, min: 97, max: 264) | -| loop_overhead | cpp | 98 (p95: 197, σ: 33.7, min: 98, max: 197) | -| loop_overhead | go | 98 (p95: 99, σ: 0.6, min: 97, max: 99) | -| loop_overhead | swift | 143 (p95: 282, σ: 49.4, min: 97, max: 282) | -| loop_overhead | java | 100 (p95: 126, σ: 7.6, min: 98, max: 126) | -| loop_overhead | node | 54 (p95: 58, σ: 1.2, min: 54, max: 58) | -| loop_overhead | bun | 46 (p95: 63, σ: 6.2, min: 43, max: 63) | +| fibonacci | python | 12382 (p95: 12503, σ: 58.7, min: 12322, max: 12503) | +| loop_overhead | perry | 97 (p95: 99, σ: 0.9, min: 96, max: 99) | +| loop_overhead | rust | 97 (p95: 98, σ: 0.6, min: 96, max: 98) | +| loop_overhead | cpp | 96 (p95: 97, σ: 0.6, min: 95, max: 97) | +| loop_overhead | go | 96 (p95: 97, σ: 0.6, min: 95, max: 97) | +| loop_overhead | swift | 96 (p95: 97, σ: 0.6, min: 95, max: 97) | +| loop_overhead | java | 97 (p95: 98, σ: 0.5, min: 97, max: 98) | +| loop_overhead | node | 53 (p95: 58, σ: 1.4, min: 53, max: 58) | +| loop_overhead | bun | 41 (p95: 42, σ: 0.7, min: 40, max: 42) | | loop_overhead | hermes | - | -| loop_overhead | python | 3019 (p95: 5066, σ: 587.6, min: 2979, max: 5066) | -| loop_data_dependent | perry | 235 (p95: 307, σ: 29.3, min: 229, max: 307) | -| loop_data_dependent | rust | 229 (p95: 247, σ: 7.5, min: 227, max: 247) | -| loop_data_dependent | cpp | 129 (p95: 130, σ: 0.9, min: 128, max: 130) | -| loop_data_dependent | go | 128 (p95: 130, σ: 1.0, min: 127, max: 130) | -| loop_data_dependent | swift | 233 (p95: 278, σ: 18.4, min: 229, max: 278) | -| loop_data_dependent | java | 229 (p95: 231, σ: 0.8, min: 229, max: 231) | -| loop_data_dependent | node | 322 (p95: 447, σ: 63.4, min: 259, max: 447) | -| loop_data_dependent | bun | 232 (p95: 241, σ: 3.9, min: 230, max: 241) | +| loop_overhead | python | 1967 (p95: 2056, σ: 34.4, min: 1964, max: 2056) | +| loop_data_dependent | perry | 225 (p95: 234, σ: 2.7, min: 224, max: 234) | +| loop_data_dependent | rust | 226 (p95: 230, σ: 1.6, min: 225, max: 230) | +| loop_data_dependent | cpp | 129 (p95: 131, σ: 1.3, min: 128, max: 131) | +| loop_data_dependent | go | 128 (p95: 129, σ: 0.5, min: 128, max: 129) | +| loop_data_dependent | swift | 225 (p95: 226, σ: 0.6, min: 224, max: 226) | +| loop_data_dependent | java | 226 (p95: 229, σ: 1.4, min: 224, max: 229) | +| loop_data_dependent | node | 226 (p95: 228, σ: 0.8, min: 225, max: 228) | +| loop_data_dependent | bun | 230 (p95: 232, σ: 1.1, min: 228, max: 232) | | loop_data_dependent | hermes | - | -| loop_data_dependent | python | 10750 (p95: 35545, σ: 8839.0, min: 8201, max: 35545) | -| array_write | perry | 4 (p95: 5, σ: 0.6, min: 3, max: 5) | +| loop_data_dependent | python | 6068 (p95: 6186, σ: 41.6, min: 6044, max: 6186) | +| array_write | perry | 3 (p95: 4, σ: 0.5, min: 3, max: 4) | | array_write | rust | 7 (p95: 8, σ: 0.4, min: 7, max: 8) | -| array_write | cpp | 3 (p95: 4, σ: 0.7, min: 2, max: 4) | -| array_write | go | 9 (p95: 10, σ: 0.6, min: 8, max: 10) | -| array_write | swift | 2 (p95: 3, σ: 0.4, min: 2, max: 3) | -| array_write | java | 7 (p95: 7, σ: 0.4, min: 6, max: 7) | -| array_write | node | 9 (p95: 10, σ: 0.7, min: 8, max: 10) | +| array_write | cpp | 2 (p95: 3, σ: 0.3, min: 2, max: 3) | +| array_write | go | 9 (p95: 9, σ: 0.4, min: 8, max: 9) | +| array_write | swift | 2 (p95: 4, σ: 0.8, min: 2, max: 4) | +| array_write | java | 6 (p95: 7, σ: 0.7, min: 5, max: 7) | +| array_write | node | 9 (p95: 9, σ: 0.5, min: 8, max: 9) | | array_write | bun | 6 (p95: 9, σ: 1.0, min: 5, max: 9) | | array_write | hermes | - | -| array_write | python | 401 (p95: 431, σ: 10.2, min: 396, max: 431) | -| array_read | perry | 4 (p95: 5, σ: 0.9, min: 2, max: 5) | -| array_read | rust | 9 (p95: 10, σ: 0.4, min: 9, max: 10) | -| array_read | cpp | 9 (p95: 10, σ: 0.4, min: 9, max: 10) | -| array_read | go | 11 (p95: 12, σ: 0.5, min: 10, max: 12) | -| array_read | swift | 9 (p95: 11, σ: 0.6, min: 9, max: 11) | -| array_read | java | 12 (p95: 23, σ: 4.0, min: 11, max: 23) | -| array_read | node | 13 (p95: 18, σ: 1.4, min: 13, max: 18) | -| array_read | bun | 16 (p95: 19, σ: 1.2, min: 14, max: 19) | +| array_write | python | 331 (p95: 338, σ: 3.3, min: 327, max: 338) | +| array_read | perry | 11 (p95: 12, σ: 0.4, min: 11, max: 12) | +| array_read | rust | 9 (p95: 9, σ: 0.0, min: 9, max: 9) | +| array_read | cpp | 9 (p95: 11, σ: 0.7, min: 9, max: 11) | +| array_read | go | 10 (p95: 11, σ: 0.4, min: 10, max: 11) | +| array_read | swift | 9 (p95: 10, σ: 0.3, min: 9, max: 10) | +| array_read | java | 11 (p95: 13, σ: 0.6, min: 11, max: 13) | +| array_read | node | 14 (p95: 14, σ: 0.5, min: 13, max: 14) | +| array_read | bun | 16 (p95: 17, σ: 0.8, min: 14, max: 17) | | array_read | hermes | - | -| array_read | python | 342 (p95: 356, σ: 5.6, min: 332, max: 356) | -| math_intensive | perry | 14 (p95: 15, σ: 0.5, min: 14, max: 15) | -| math_intensive | rust | 48 (p95: 49, σ: 0.6, min: 47, max: 49) | -| math_intensive | cpp | 51 (p95: 51, σ: 0.4, min: 50, max: 51) | -| math_intensive | go | 49 (p95: 50, σ: 0.4, min: 49, max: 50) | -| math_intensive | swift | 50 (p95: 88, σ: 11.0, min: 49, max: 88) | -| math_intensive | java | 74 (p95: 135, σ: 30.3, min: 51, max: 135) | -| math_intensive | node | 51 (p95: 52, σ: 0.7, min: 50, max: 52) | -| math_intensive | bun | 51 (p95: 52, σ: 0.5, min: 51, max: 52) | +| array_read | python | 236 (p95: 244, σ: 4.7, min: 227, max: 244) | +| math_intensive | perry | 51 (p95: 51, σ: 0.4, min: 50, max: 51) | +| math_intensive | rust | 48 (p95: 49, σ: 0.7, min: 47, max: 49) | +| math_intensive | cpp | 50 (p95: 54, σ: 1.4, min: 49, max: 54) | +| math_intensive | go | 48 (p95: 49, σ: 0.5, min: 48, max: 49) | +| math_intensive | swift | 48 (p95: 50, σ: 0.8, min: 48, max: 50) | +| math_intensive | java | 50 (p95: 51, σ: 0.3, min: 50, max: 51) | +| math_intensive | node | 49 (p95: 52, σ: 1.0, min: 49, max: 52) | +| math_intensive | bun | 50 (p95: 52, σ: 0.9, min: 50, max: 52) | | math_intensive | hermes | - | -| math_intensive | python | 2238 (p95: 2347, σ: 35.3, min: 2227, max: 2347) | -| object_create | perry | 1 (p95: 1, σ: 0.5, min: 0, max: 1) | +| math_intensive | python | 1579 (p95: 1593, σ: 4.1, min: 1578, max: 1593) | +| object_create | perry | 2 (p95: 4, σ: 0.6, min: 2, max: 4) | | object_create | rust | 0 (p95: 1, σ: 0.3, min: 0, max: 1) | | object_create | cpp | 0 (p95: 1, σ: 0.4, min: 0, max: 1) | -| object_create | go | 0 (p95: 1, σ: 0.3, min: 0, max: 1) | -| object_create | swift | 0 (p95: 1, σ: 0.3, min: 0, max: 1) | -| object_create | java | 5 (p95: 6, σ: 0.6, min: 4, max: 6) | -| object_create | node | 11 (p95: 20, σ: 3.4, min: 8, max: 20) | -| object_create | bun | 6 (p95: 7, σ: 0.5, min: 6, max: 7) | +| object_create | go | 0 (p95: 0, σ: 0.0, min: 0, max: 0) | +| object_create | swift | 0 (p95: 0, σ: 0.0, min: 0, max: 0) | +| object_create | java | 5 (p95: 5, σ: 0.0, min: 5, max: 5) | +| object_create | node | 8 (p95: 9, σ: 0.5, min: 8, max: 9) | +| object_create | bun | 6 (p95: 9, σ: 1.0, min: 5, max: 9) | | object_create | hermes | - | -| object_create | python | 164 (p95: 224, σ: 17.5, min: 160, max: 224) | -| nested_loops | perry | 18 (p95: 19, σ: 0.7, min: 17, max: 19) | -| nested_loops | rust | 8 (p95: 9, σ: 0.3, min: 8, max: 9) | -| nested_loops | cpp | 8 (p95: 8, σ: 0.0, min: 8, max: 8) | -| nested_loops | go | 10 (p95: 15, σ: 1.6, min: 9, max: 15) | -| nested_loops | swift | 8 (p95: 31, σ: 7.1, min: 8, max: 31) | -| nested_loops | java | 11 (p95: 11, σ: 0.5, min: 10, max: 11) | -| nested_loops | node | 18 (p95: 25, σ: 2.2, min: 17, max: 25) | -| nested_loops | bun | 21 (p95: 24, σ: 1.1, min: 20, max: 24) | +| object_create | python | 133 (p95: 134, σ: 0.6, min: 132, max: 134) | +| nested_loops | perry | 18 (p95: 18, σ: 0.5, min: 17, max: 18) | +| nested_loops | rust | 8 (p95: 8, σ: 0.0, min: 8, max: 8) | +| nested_loops | cpp | 8 (p95: 9, σ: 0.3, min: 8, max: 9) | +| nested_loops | go | 10 (p95: 12, σ: 0.8, min: 9, max: 12) | +| nested_loops | swift | 8 (p95: 8, σ: 0.0, min: 8, max: 8) | +| nested_loops | java | 10 (p95: 12, σ: 0.7, min: 10, max: 12) | +| nested_loops | node | 17 (p95: 27, σ: 3.4, min: 16, max: 27) | +| nested_loops | bun | 20 (p95: 20, σ: 0.5, min: 19, max: 20) | | nested_loops | hermes | - | -| nested_loops | python | 484 (p95: 717, σ: 66.9, min: 472, max: 717) | -| accumulate | perry | 34 (p95: 36, σ: 0.8, min: 33, max: 36) | -| accumulate | rust | 98 (p95: 99, σ: 0.8, min: 96, max: 99) | -| accumulate | cpp | 98 (p95: 98, σ: 0.5, min: 97, max: 98) | -| accumulate | go | 98 (p95: 101, σ: 1.0, min: 97, max: 101) | -| accumulate | swift | 98 (p95: 229, σ: 37.7, min: 97, max: 229) | -| accumulate | java | 100 (p95: 101, σ: 0.9, min: 98, max: 101) | -| accumulate | node | 617 (p95: 745, σ: 37.6, min: 610, max: 745) | -| accumulate | bun | 100 (p95: 101, σ: 0.7, min: 99, max: 101) | +| nested_loops | python | 353 (p95: 356, σ: 3.6, min: 347, max: 356) | +| accumulate | perry | 97 (p95: 101, σ: 1.3, min: 96, max: 101) | +| accumulate | rust | 97 (p95: 98, σ: 0.9, min: 95, max: 98) | +| accumulate | cpp | 96 (p95: 97, σ: 0.4, min: 96, max: 97) | +| accumulate | go | 96 (p95: 97, σ: 0.5, min: 95, max: 97) | +| accumulate | swift | 96 (p95: 98, σ: 1.2, min: 95, max: 98) | +| accumulate | java | 98 (p95: 101, σ: 1.1, min: 97, max: 101) | +| accumulate | node | 597 (p95: 690, σ: 27.0, min: 592, max: 690) | +| accumulate | bun | 98 (p95: 99, σ: 0.6, min: 97, max: 99) | | accumulate | hermes | - | -| accumulate | python | 5048 (p95: 5949, σ: 335.7, min: 4971, max: 5949) | +| accumulate | python | 4382 (p95: 4461, σ: 27.4, min: 4359, max: 4461) | + +## Perry `--fast-math` addendum (separate run, same v0.5.908 binary recompiled with `PERRY_FAST_MATH=1`) + +| Benchmark | Runtime | Stats (ms) | +|---|---|---| +| fibonacci | perry --fast | 306 (p95: 310, σ: 1.3, min: 305, max: 310) | +| loop_overhead | perry --fast | 12 (p95: 17, σ: 1.4, min: 12, max: 17) | +| loop_data_dependent | perry --fast | 224 (p95: 226, σ: 1.0, min: 223, max: 226) | +| array_write | perry --fast | 4 (p95: 7, σ: 1.2, min: 3, max: 7) | +| array_read | perry --fast | 11 (p95: 12, σ: 0.3, min: 11, max: 12) | +| math_intensive | perry --fast | 14 (p95: 16, σ: 0.6, min: 14, max: 16) | +| object_create | perry --fast | 0 (p95: 1, σ: 0.4, min: 0, max: 1) | +| nested_loops | perry --fast | 17 (p95: 25, σ: 2.2, min: 17, max: 25) | +| accumulate | perry --fast | 34 (p95: 36, σ: 0.9, min: 33, max: 36) | + +The `--fast-math` rerun produced tight σ on every cell (1-2 ms typical), +indicating a clean run. Trivially-foldable cells (`loop_overhead`, +`math_intensive`, `accumulate`) reproduce the historical 7-8× win; +non-foldable cells (`fibonacci`, `loop_data_dependent`, `nested_loops`) +match default mode within 1-4 ms — exactly the structural expectation. diff --git a/benchmarks/polyglot/RESULTS_OPT.md b/benchmarks/polyglot/RESULTS_OPT.md index e4a46e0d7f..f72c0207a8 100644 --- a/benchmarks/polyglot/RESULTS_OPT.md +++ b/benchmarks/polyglot/RESULTS_OPT.md @@ -7,7 +7,15 @@ fast-math is opt-in; the previous "Perry default" through v0.5.584 is now the `--fast-math` mode). **Run date (Perry):** 2026-05-06 — Perry commit `main` (v0.5.585). -**Run date (other languages):** 2026-04-15 — refreshed when next polyglot +The 2026-05-14 v0.5.908 default-mode polyglot sweep (see `RESULTS.md`) +did not rerun `bench_opt.*` — the table here is preserved as the +last side-by-side opt-tuning sweep. The 2026-05-14 default-column +numbers in `RESULTS.md` match v0.5.585 within 1-4 ms (e.g. fibonacci +304 → 309, loop_overhead 95 → 97, math_intensive 50 → 51), so the +opt-side cells here are within noise of the current binary; the +shape (which language's `opt` flags close the gap to Perry +`--fast-math`) is unchanged. +**Run date (other languages):** 2026-04-15 — refreshed when next opt sweep runs. **Hardware:** Apple M1 Max, macOS 26.4. **Methodology:** Perry RUNS=11 median; other languages best of 5 per diff --git a/benchmarks/suite/results/RESULTS.md b/benchmarks/suite/results/RESULTS.md new file mode 100644 index 0000000000..2c370bda84 --- /dev/null +++ b/benchmarks/suite/results/RESULTS.md @@ -0,0 +1,79 @@ +# suite/ Microbenchmark Results + +**Run date:** 2026-05-14 · **Perry version:** v0.5.908 +**Hardware:** Apple M1 Max (10 cores), 64 GB RAM, macOS 26.4 (Darwin 25.4.0), otherwise-idle machine. +**Runtimes:** Perry 0.5.908 / Node v25.8.0 / Bun 1.3.12. Static Hermes not installed. + +**Methodology:** single run per cell (not RUNS=11). For multi-run medians + p95 + σ, +see [`benchmarks/polyglot/`](../../polyglot/) and [`benchmarks/json_polyglot/`](../../json_polyglot/). + +Wall-clock ms. Lower is better. + +| Benchmark | Perry | Node.js | Bun | +|-------------------|------:|--------:|-----:| +| loop_overhead | 97 | 53 | 41 | +| array_write | 3 | 9 | 6 | +| array_read | 11 | 13 | 16 | +| fibonacci | 319 | 988 | 515 | +| math_intensive | 61 | 50 | 50 | +| object_create | 2 | 9 | 7 | +| string_concat | 0 | 3 | 1 | +| method_calls | 9 | 11 | 9 | +| nested_loops | 17 | 17 | 19 | +| prime_sieve | 3 | 8 | 7 | +| binary_trees | 2 | 10 | 7 | +| factorial | 107 | 591 | 97 | +| closure | 50 | 304 | 51 | +| mandelbrot | 28 | 25 | 29 | +| matrix_multiply | 28 | 34 | 34 | + +### Startup time (avg of 5 runs) + +| Metric | Perry | Node.js | Bun | +|------------|------:|--------:|----:| +| cold start | 113ms | 131ms | 42ms | + +### Peak RSS (binary_trees) + +| Metric | Perry | Node.js | Bun | +|-----------|------:|--------:|----:| +| peak RSS | 6MB | 75MB | 49MB | + +### Summary + +- **vs Node.js:** 11 faster, 3 slower, 1 tied +- **vs Bun:** 11 faster, 3 slower, 1 tied + +### Vs the 2026-05-13 (v0.5.891 contaminated) sweep + +A parallel cargo build was running through part of yesterday's sweep, inflating +single-run cells. Today's results on an idle machine recovered most of the +apparent regressions: + +| Benchmark | v0.5.891 | v0.5.908 | Δ | Notes | +|----------------|---------:|---------:|----------:|-------| +| method_calls | 25ms | 9ms | **-16ms** | yesterday's reading was noise; back near baseline | +| math_intensive | 51ms | 61ms | +10ms | within run-to-run noise on single-run methodology | +| factorial | 98ms | 107ms | +9ms | within noise | +| binary_trees | 3ms | 2ms | -1ms | tiny improvement | +| mandelbrot | 23ms | 28ms | +5ms | within noise | + +### Vs the 2026-04-23 v0.5.173 baseline (still-pending regressions) + +| Benchmark | v0.5.173 | v0.5.908 | Δ | Hypothesis | +|----------------|---------:|---------:|----------:|------------| +| factorial | 31ms | 107ms | **+76ms** | v0.5.585 fast-math opt-in flip (FP-tail reduction no longer collapses to scalar) | +| closure | 10ms | 50ms | **+40ms** | closure-env layout change since v0.5.173 — open follow-up | +| method_calls | 1ms | 9ms | +8ms | most regression closed in v0.5.908 (was 25ms yesterday); 8ms residual | +| prime_sieve | 5ms | 3ms | -2ms | improvement | +| matrix_multiply| 24ms | 28ms | +4ms | within noise | +| binary_trees | 3ms | 2ms | -1ms | unchanged within noise | +| string_concat | 0ms | 0ms | = | unchanged | +| mandelbrot | 23ms | 28ms | +5ms | within single-run noise | + +Reproduction: + +```bash +cd benchmarks/suite +./run_benchmarks.sh +```