Pith. sign in

REVIEW 3 major objections 4 minor 21 references

Lossless but Not Free: An Empirical Anatomy of Speculative Decoding on Consumer Hardware

T0 review · 3 major / 4 minor · reviewed 2026-08-01 · deepseek-v4-flash

Pith's one-line read Speculative decoding can speed up laptop LLM generation by 1.61x while exactly preserving the target model's distribution—but only when the draft is faster and verification is genuinely parallel.

desk verdict Useful empirical anatomy of speculative decoding on Apple silicon; main speedup/failure findings are solid, but the Level-3 losslessness check is not a clean certificate because of autocorrelation and the paper's own batch-invariance measurement. read the letter →

arxiv 2607.17283 v1 pith:7VDYNVR3 submitted 2026-07-19 cs.AI cs.LG

classification cs.AIcs.LG
keywords speculativedecodingrejectionsamplinglosslessaccelerationLLMinferenceconsumerhardwarebatchverificationacceptanceprofiledistributionequivalence
verification ladder T0 review T1 audit T2 compute T3 formal

The pith

A machine-rendered reading of the paper's core claim, the machinery that carries it, and where it could break.

The reading

The paper sets out to show two things about speculative decoding on ordinary consumer hardware. First, that a careful from-scratch implementation is truly lossless: the rejection-sampling rule makes speculative output statistically indistinguishable from the target model alone, with a two-sample chi-square test over about 9,200 tokens per method giving p = 0.976, and greedy sequences matching exactly. Second, that speedup is a systems property, not an algorithmic one: a 0.5B draft paired with a 3B target reaches a measured 1.61x wall-clock speedup at K=6, while three of five tested configurations decelerate. The paper isolates the two causes—a draft whose per-step overhead exceeds a small target's entire decode step, and a quantized backend that executes 'parallel' verification serially for small batches—and concludes that the mathematical guarantee costs almost nothing while the practical payoff depends on measured runtime properties.

What carries the argument

The mechanism that carries the losslessness guarantee is the accept/reject walk: draft K tokens autoregressively, score all K+1 positions in a single target pass, accept the i-th draft token when a uniform draw is below min(1, p_i(x_i)/q_i(x_i)), and at the first rejection resample from the adjusted distribution p'_i(x) proportional to max(0, p_i(x) - q_i(x)). The speedup analysis rests on a second, empirically measured mechanism: the verify-batch scaling curve, i.e. how the cost of one batched target pass grows with K. The paper shows this curve is flat on one backend (5 tokens cost 1.20x one token) and nearly linear on another (51ms for 2 tokens climbing to 218.5ms for 7), and this single

What would settle it

Run the paper's equivalence gate on the quantized backend with the target-only baseline scored in a batch of five (the same shape the speculative path uses) instead of one position at a time, then compare with the one-at-a-time baseline over the same ~9,200 tokens per method; if the two-sample chi-square drops to p<0.01, or if direct batch-of-five versus batch-of-one target distributions over the paper's 100 prompts differ enough to flip sampling draws at T=1.0, the lossless-on-that-backend claim is falsified.

Watch

Extended reading notes

Core claim

The paper's central claim is that speculative decoding can be implemented so that it provably preserves the target model's output distribution, and that on a consumer laptop this losslessness is verified, not assumed: 50,000-trial synthetic tests, bit-exact greedy agreement on mock models, and a real-model two-sample chi-square over roughly 9,200 tokens per method (chi-square = 162.5, dof = 200, p = 0.976). On the same machine, the best draft/target pair delivers a measured 1.61x wall-clock speedup at speculation length 6 (with a plateau of 1.52–1.61x across K=2–6), while three of five configurations decelerate. The paper attributes the failures to two measured systems properties: a draft mo

Load-bearing premise

The load-bearing premise is that a target model's logits are the same whether a position is scored alone or in a batch of several positions; the paper measures this to fail on the quantized backend (logits shift by up to ~0.1), which is why its bit-exact greedy check had to run on CPU float32—if that batch-invariance failure is large in the sampling regime, the p=0.976 equivalence result would not certify losslessness on that backend.

Editorial extensions

If this is right

  • Any compliant speculative decoder is lossless: the exactness is analytic (Proposition 1) and empirically supported, so users do not need to re-audit output quality each time they turn the method on.
  • On consumer hardware, speedup exists but is bounded: a 0.5B draft against a 3B target reaches 1.61x at K=6, with a plateau across K=2–6, while three of five tested configurations decelerate.
  • Because acceptance decays with draft position (69.7% at K=1 to 37.8% at K=6 for the best pair), the optimal K is an interior plateau; the naive constant-acceptance model overestimates yield at large K.
  • A backend that verifies 'in parallel' by looping per position—verify cost growing linearly in batch size for batches of 2–7—will erase the advantage of speculation even when draft economics are favorable; implementations must measure verify-batch scaling before enabling the method.
  • Sampling overhead is negligible (2.2% of wall time), so the correctness-critical float32 sampling path can stay on the CPU without hurting performance.

Reading between the lines

Editorial extensions of the paper, not claims the author makes directly.

  • The paper's two measured conditions for speedup suggest a portable decision rule it does not quite state: profile the verify-batch scaling curve and the draft-step/target-step latency ratio before adopting speculative decoding; if either is unfavorable, expect a slowdown.
  • Because the quantized backend's logits are not batch-invariant (shifts up to ~0.1, enough to flip near-tie argmaxes), the p=0.976 equivalence result should not be read as certification of exact losslessness on that backend in the sampling regime; an equivalence test that matches batch shapes between paths would be the clean way to certify it.
  • The measured positional-acceptance decay makes an adaptive-K heuristic directly testable: shrink K when recent acceptance drops, harvesting the plateau while avoiding the costly tail the paper observes at K≥8.
  • The paper deliberately reports no numbers for its 8B-class CUDA configuration; running the provided script on a CUDA GPU would test whether the 'parallel verification is essential' conclusion is specific to the tested on-device backend or generalizes to server hardware.
Share X Bluesky LinkedIn Reddit HN

Editorial analysis

A structured set of objections, weighed in public.

Desk editor's note, referee report, and a circularity audit.

Referee Report

3 major / 4 minor

Summary. The paper presents a from-scratch, device-agnostic implementation of two-model speculative decoding with rejection sampling, and evaluates it on five draft/target/backend configurations on an Apple-silicon laptop. The central claims are: (i) the algorithm preserves the target distribution, verified analytically (Proposition 1) and by a three-level empirical gate, including a Level-3 two-sample chi-square test over about 9,200 real-model tokens per method (chi^2 = 162.5, dof = 200, p = 0.976) and exact greedy-sequence agreement; and (ii) on consumer hardware, speculative decoding speeds up only under specific systems conditions, with a best measured 1.61x wall-clock speedup at K=6 for a 0.5B q8_0 draft to 3B fp16 MPS target, while three of five configurations decelerate. The paper isolates two failure modes: draft-step framework overhead exceeding a small target's decode step, and quantized Metal backends executing 'parallel' verification serially at batch sizes 2-7. The manuscript is unusually transparent, with caveats, artifact links, and a clear separation of algorithmic guarantees from systems measurements.

Significance. If the empirical claims are valid, the paper would be a valuable systems-level anatomy of speculative decoding on consumer hardware. Its strengths include a genuinely from-scratch implementation with a frozen interface and KV-cache consistency tests, three validation levels, explicit CPU-float32 sampling arithmetic for reproducibility, and a clear demonstration that the quantized-Metal backend's batch-scaling behavior, not the algorithm, determines whether speculative decoding helps. The negative results (three of five configurations slower) are as informative as the positive one, and the reported artifacts and figure scripts are a model of reproducibility. However, the load-bearing statistical certificate for losslessness is not currently valid as stated. The Level-3 chi-square test pools autocorrelated and seed-paired tokens, and it is run on a backend where the paper itself measures that batched versus one-at-a-time evaluation changes logits. These issues do not call the analytic Proposition 1 into question, but they do undermine the specific claim that distribution equivalence was 'verified at three levels' on real models, and they require a change of protocol or a substantial

major comments (3)
  1. [§6.1, Figure 2, Eq. (5)] The Level-3 chi-square test does not have a valid null distribution as reported. The test pools 9,209 speculative and 9,214 baseline tokens drawn from 100 prompts under matched seeds. Tokens within a single prompt are strongly autocorrelated, and the seed-matching couples each speculative sequence with its baseline counterpart; the Pearson chi-square statistic assumes independent and identically distributed draws. The effective sample size is therefore far below 9,200, so p = 0.976 is not a calibrated probability. The same structural issue applies to the Level-2 mock-model test (20,950 tokens per method from 1,000 generations). To make the certificate valid, the authors should aggregate at the sequence or round level (for example, a permutation test on per-prompt summaries) or use a block bootstrap that respects within-sequence dependence. As written, the statistic is at best a descripti
  2. [§6.1, caveat 2; Table 2; Limitations (5)] The Level-3 sampled-leg equivalence test is run on the primary pair, whose target is a quantized-Metal llama.cpp model (Table 2). The speculative path verifies K drafts in one batched pass, while the baseline samples one token at a time. The paper itself states in §6.1 that on the quantized Metal backend, evaluating the same context with five tokens in a batch versus one at a time shifts logits by up to roughly 0.1, enough to flip near-tie argmaxes. This is a measured backend property, not an idle worry. Consequently, the speculative path may be preserving p_batched while the baseline samples p_sequential; the two paths may be drawing from different target distributions, so the chi-square test cannot certify losslessness of the implementation on that backend. The greedy leg was moved to fp32 CPU precisely because of this failure of batch-invariance, but the sampled leg was not. Moreover,
  3. [§6.1, 'Two honest caveats'] The caveats paragraph is incomplete and thus misleading. It discloses that the greedy leg requires fp32 CPU because of batch-shape sensitivity, but it does not state that the same batch-shape sensitivity applies to the primary pair used in the Level-3 sampled leg. Since the sampled leg is the one that produces the headline p = 0.976, the reader is left with the impression that the sampled-leg certificate is unaffected by the measured logit shifts. The caveats should be reorganized so that the batch-invariance limitation is stated as applying to the entire Level-3 real-model result, not only to the greedy leg. This is not a presentation nit; it changes what claim the experiment can support.
minor comments (4)
  1. [§3.2, 'Expected yield'] The statement that the geometric expression (1 - alpha^{K+1})/(1 - alpha) is an 'upper bound' when acceptance decays with draft position is not proved. The pooled acceptance rate alpha is not the right parameter for that comparison, and the later discussion (§7) uses a different computation (2.7 tokens per round versus the formula). Please provide a short derivation or rephrase to avoid an unsupported inequality.
  2. [§6.1, Level 2] The Level-2 mock-model test reports p = 0.029 and is described as 'above the 0.01 gate threshold and consistent with the null.' With about 20,950 tokens per method, p = 0.029 would conventionally be evidence against the null at the 0.05 level. Using an ad hoc 0.01 gate is acceptable if pre-registered, but here it is not explained. Please clarify the gate choice or report an effect-size measure.
  3. [Figure 2 and §6.1] The figure and text state 'dof = 200' with 201 bins. Please describe the binning procedure (how the union support was collapsed into 201 bins while keeping expected counts >= 5) and report whether any degrees-of-freedom correction was needed after binning.
  4. [Table 4 and §8] The abstract and conclusion call K=6 'the optimum' with 1.61x, but the same table and §6.2 describe a plateau of 1.52-1.61x across K=2-6 with overlapping standard deviations. The language 'optimum' is stronger than the data support; consider 'plateau maximum' or 'measured peak of a plateau.'

Circularity Check

0 steps flagged · score 0.0 of 10

No significant circularity: the paper's load-bearing claims are externally sourced mathematics plus fresh measurements, not fits or self-citations.

full rationale

The derivation chain is not circular. Proposition 1, the losslessness guarantee, is imported from the independent external references [2,9] (Leviathan et al., Chen et al.) and its proof sketch is a self-contained algebra of the rejection rule; it is not derived from this paper's own measurements, and the references are not self-citations. The three correctness gates are empirical comparisons: Level 1 compares simulated draws against analytic target distributions, Level 2 uses deterministic mock models, and Level 3 compares speculative samples to target-only samples on real models. The reported statistics (chi-square values, p-values, greedy sequence agreement, acceptance rates, wall-clock speedups) are measured outputs; no parameter is fit to force the claimed equivalence or speedup. The explanation of the K-optimum via measured positional acceptance decay is post-hoc interpretation of measured data rather than a derivation whose conclusion is identical to its input. The paper's own limitations—statistical resolution of roughly 9,200 tokens per method, the quantized-Metal batch-invariance caveat, and the plateau-style K=2-6 differences—are validity caveats about the evidence, not circular reasoning. There are no self-citations, no imported uniqueness theorem from the authors, and no renaming of a known result. Score 0.

Assumptions & free parameters 0 free parameters · 6 assumptions · 0 invented entities

No free parameters are fitted to produce the headline speedups; K and T are experimental controls. The only parameters entering the analysis are measured statistics (acceptance rate, latency), not fitted constants. No new entities are introduced; the adjusted resampling distribution (Eq 2) is part of the cited algorithm. The mathematics rests on the standard rejection-sampling theorem from [2,9] plus domain assumptions about tokenizer identity, full-vocabulary logits, and batch-invariant target logits on the verify backend.

assumptions (6)
  • standard math Rejection-sampling rule (Eqs. 1-2) yields target distribution exactly (Proposition 1, from Leviathan et al. [9] and Chen et al. [2]).
    Sec 3.2 proof sketch; imported from external references, not derived from this paper's data. This is the theoretical guarantee behind "lossless".
  • domain assumption Draft and target share one tokenizer/vocabulary, and temperature scaling is identical for both.
    Eq. (1) requires p_i(x_i)/q_i(x_i) over the same token space. Sec 4 ("One tokenizer") validates this for Qwen2.5 pairs and gives the TinyLlama/Llama-3 pair as a counterexample.
  • domain assumption llama.cpp is configured with logits_all=True so full-vocabulary logits are available at every drafted position.
    Sec 4 QuantizedModel: rejection sampling is impossible with top-k-truncated outputs; this runtime configuration is needed for the adjusted resampling distribution.
  • domain assumption Target logits are invariant to whether K+1 positions are scored in one batch or one position at a time.
    Needed for the Level-3 real-model equivalence gate; Sec 6.1 caveat 2 shows this is violated on quantized Metal (up to ~0.1 logit shift), so the sampled gate treats the violation as negligible. The paper routes the greedy leg to fp32 CPU instead.
  • domain assumption The benchmark's timing and prompt protocol capture representative single-stream latency on the tested machine.
    Sec 5 protocol: fixed vendored prompts, device synchronize before timer reads, pinned software versions; all claims are scoped to this machine (Sec 7 Limitation 1).
  • domain assumption Sampling arithmetic in CPU float32 with an explicit torch.Generator is sufficient to make the acceptance walk bit-reproducible and correct across backends.
    Sec 4 Numerics and reproducibility; this design choice is asserted and unit-tested, not formally verified.

how reviews work

0 comments
Cite this review

Pith. "Pith review of Lossless but Not Free: An Empirical Anatomy of Speculative Decoding on Consumer Hardware." pith.science (2026). https://pith.science/paper/7VDYNVR3

@misc{pith2026260717283,
  author       = {Pith},
  title        = {Pith review of: Lossless but Not Free: An Empirical Anatomy of Speculative Decoding on Consumer Hardware},
  year         = {2026},
  howpublished = {\url{https://pith.science/paper/7VDYNVR3}},
  note         = {Machine review of arXiv:2607.17283}
}
abstract

Single-stream autoregressive decoding of large language models is bound by memory bandwidth: each generated token requires one full forward pass through the target model, and successive passes cannot be parallelized. Speculative decoding restructures this computation: a small draft model proposes $K$ tokens autoregressively, the target model scores all of them in one batched pass, and a rejection-sampling rule provably preserves the target model's output distribution. We present a from-scratch, device-agnostic (CUDA/MPS/CPU) implementation and an empirical study across five draft/target backend configurations on a consumer Apple-silicon laptop. Distribution equivalence is verified at three levels, culminating in a two-sample test over roughly 9,200 real-model tokens per method ($\chi^2 = 162.5$, dof $= 200$, $p = 0.976$) and exact greedy-sequence agreement. The best configuration reaches a measured $1.61\times$ wall-clock speedup at $K=6$, on an acceptance profile declining from 69.7% at $K=1$ to 37.8% at the optimum, while three of five configurations decelerate, either because the draft fails to out-speed a small target or because the quantized Metal backend executes "parallel" verification serially, an effect we isolate and quantify. The failures are as instructive as the successes: speculative decoding pays off only when verification is genuinely batch-parallel and the draft/target latency gap is real.

Figures

Figures reproduced from arXiv: 2607.17283 by the authors.

Figure 1
Figure 1. Core draft–verify–accept loop and the two exit branches. The draft proposes [PITH_FULL_IMAGE:figures/full_fig_p005_1.png] view at source ↗
Figure 2
Figure 2. Token-frequency overlay for the top-200 tokens by combined count, speculative vs. target￾only, on a log scale, annotated with the two-sample test statistics (primary pair, 100 prompts × 100 tokens, T=1.0). The two curves are visually and statistically indistinguishable (p = 0.976). Level 2 — the full decoder on deterministic mock models. With draft and target imple￾mented as fixed stochastic matrices (vocabulary 48)… view at source ↗
Figure 3
Figure 3. (a) Main-run throughput (128 tokens, 28 prompts); speedup factors labeled. Only the two configurations with a Transformers-on-MPS target exceed 1.0×. (b) The K-sweep (96 tokens, 8 recorded prompts): mixed_3b peaks at K=6 (1.61×); the three llama.cpp-Metal-verifier configurations sit below break-even at every K. 6.2 Throughput, speedup, and the K-sweep [PITH_FULL_IMAGE:figures/full_fig_p009_3.png] view at source ↗
Figures from the paper (2 more)
Figure 4
Figure 4. Figure 4: Acceptance rate by draft position within [PITH_FULL_IMAGE:figures/full_fig_p010_4.png]
Figure 5
Figure 5. Figure 5: Per-token latency decomposition for the best configuration ( [PITH_FULL_IMAGE:figures/full_fig_p011_5.png]

Discussion (0). Continue with ORCID to comment.

Reference graph

Works this paper leans on

21 extracted references · 13 linked inside Pith

  1. [1]

    Lee, Deming Chen, and Tri Dao

    Tianle Cai, Yuhong Li, Zhengyang Geng, Hongwu Peng, Jason D. Lee, Deming Chen, and Tri Dao. Medusa: Simple llm inference acceleration framework with multiple decoding heads. InProceedings of the 41st International Conference on Machine Learning (ICML), volume 235 ofProceedings of Machine Learning Research, pages 5209–5235. PMLR, 2024. URL https://arxiv.or...

  2. [2]

    Accelerating large language model decoding with speculative sampling.arXiv preprint arXiv:2302.01318, 2023

    Charlie Chen, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre, and John Jumper. Accelerating large language model decoding with speculative sampling.arXiv preprint arXiv:2302.01318, 2023. URLhttps://arxiv.org/abs/2302.01318

  3. [3]

    Qlora: Efficient finetuning of quantized llms

    Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, and Luke Zettlemoyer. Qlora: Efficient finetuning of quantized llms. InAdvances in Neural Information Processing Systems (NeurIPS), volume 36, pages 10088–10115, 2023. URLhttps://arxiv.org/abs/2305.14314. 13

  4. [4]

    Gptq: Accurate post-training quantization for generative pre-trained transformers

    Elias Frantar, Saleh Ashkboos, Torsten Hoefler, and Dan Alistarh. Gptq: Accurate post-training quantization for generative pre-trained transformers. InThe Eleventh International Conference on Learning Representations (ICLR), 2023. URLhttps://arxiv.org/abs/2210.17323

  5. [5]

    llama.cpp: Llm inference in c/c++

    Georgi Gerganov and llama.cpp contributors. llama.cpp: Llm inference in c/c++. GitHub repository, 2023. URLhttps://github.com/ggml-org/llama.cpp. ggml tensor library and GGUF model format

  6. [6]

    The llama 3 herd of models.arXiv preprint arXiv:2407.21783, 2024

    Aaron Grattafiori et al. The llama 3 herd of models.arXiv preprint arXiv:2407.21783, 2024. URLhttps://arxiv.org/abs/2407.21783

  7. [7]

    Distilling the knowledge in a neural network

    Geoffrey Hinton, Oriol Vinyals, and Jeff Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015. URLhttps://arxiv.org/abs/1503.02531

  8. [8]

    Gonzalez, Hao Zhang, and Ion Stoica

    Woosuk Kwon, Zhuohan Li, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Hao Yu, Joseph E. Gonzalez, Hao Zhang, and Ion Stoica. Efficient memory management for large language model serving with pagedattention. InProceedings of the 29th Symposium on Operating Systems Principles (SOSP). ACM, 2023. URLhttps://arxiv.org/abs/2309.06180

Show all 21 references
  1. [9]

    Fast inference from transformers via speculative decoding

    Yaniv Leviathan, Matan Kalman, and Yossi Matias. Fast inference from transformers via speculative decoding. InProceedings of the 40th International Conference on Machine Learning (ICML), volume 202 ofProceedings of Machine Learning Research, pages 19274–19286. PMLR,

  2. [10]

    Awq: Activation-aware weight quantization for llm compression and acceleration

    Ji Lin, Jiaming Tang, Haotian Tang, Shang Yang, Wei-Ming Chen, Wei-Chen Wang, Guangxuan Xiao, Xingyu Dang, Chuang Gan, and Song Han. Awq: Activation-aware weight quantization for llm compression and acceleration. InProceedings of Machine Learning and Systems (MLSys),

  3. [11]

    Qwen2.5 technical report.arXiv preprint arXiv:2412.15115, 2024

    Qwen Team. Qwen2.5 technical report.arXiv preprint arXiv:2412.15115, 2024. URLhttps: //arxiv.org/abs/2412.15115

  4. [12]

    Qwen2.5-0.5b-instruct

    Qwen Team. Qwen2.5-0.5b-instruct. Hugging Face model card, 2024. URL https: //huggingface.co/Qwen/Qwen2.5-0.5B-Instruct

  5. [13]

    Qwen2.5-1.5b-instruct

    Qwen Team. Qwen2.5-1.5b-instruct. Hugging Face model card, 2024. URL https: //huggingface.co/Qwen/Qwen2.5-1.5B-Instruct

  6. [14]

    Qwen2.5-3b-instruct

    QwenTeam. Qwen2.5-3b-instruct. HuggingFacemodelcard, 2024. URLhttps://huggingface. co/Qwen/Qwen2.5-3B-Instruct

  7. [15]

    Qwen2.5-7b-instruct

    QwenTeam. Qwen2.5-7b-instruct. HuggingFacemodelcard, 2024. URLhttps://huggingface. co/Qwen/Qwen2.5-7B-Instruct

  8. [16]

    Blockwise parallel decoding for deep autoregressive models

    Mitchell Stern, Noam Shazeer, and Jakob Uszkoreit. Blockwise parallel decoding for deep autoregressive models. InAdvances in Neural Information Processing Systems (NeurIPS), volume 31, pages 10107–10116, 2018. URLhttps://arxiv.org/abs/1811.03115

  9. [17]

    Orca: A distributed serving system for transformer-based generative models

    Gyeong-In Yu, Joo Seong Jeong, Geon-Woo Kim, Soojeong Kim, and Byung-Gon Chun. Orca: A distributed serving system for transformer-based generative models. In16th USENIX Symposium on Operating Systems Design and Implementation (OSDI), pages 521–538. USENIX Association, 2022. UR...

  10. [18]

    Draft & verify: Lossless large language model acceleration via self-speculative decoding.arXiv preprint arXiv:2309.08168, 2023

    Jun Zhang, Jue Wang, Huan Li, Lidan Shou, Ke Chen, Gang Chen, and Sharad Mehrotra. Draft & verify: Lossless large language model acceleration via self-speculative decoding.arXiv preprint arXiv:2309.08168, 2023. URLhttps://arxiv.org/abs/2309.08168

  11. [19]

    Tinyllama: An open-source small language model.arXiv preprint arXiv:2401.02385, 2024

    Peiyuan Zhang, Guangtao Zeng, Tianduo Wang, and Wei Lu. Tinyllama: An open-source small language model.arXiv preprint arXiv:2401.02385, 2024. URLhttps://arxiv.org/abs/ 2401.02385. 15

  12. [2023]

    URLhttps://arxiv.org/abs/2211.17192

  13. [2024]

    URLhttps://arxiv.org/abs/2306.00978

Pith tools

Reviewed August 1, 2026 · model on record in the stance chip above.