From 2f147d2a30b466ede59a98f8e5e550542dfd4a45 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Sun, 11 Oct 2026 03:59:47 -0400 Subject: [PATCH 1/2] =?UTF-8?q?wai-vector:=20WOS1=20and=20WVG1=20with=20th?= =?UTF-8?q?e=20refusal=20order=20of=20=C2=A72.7,=20the=20clock,=20tracks,?= =?UTF-8?q?=20the=20interval=20check=20and=20the=20cost=20(D7-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reference crate of wai.graphics.vector (no_std + alloc, no dependencies; SHA-256 is wai-ops's, by #[path]): - WOS1 parsed with §2.1's load checks in order, and written; - WVG1 split (steps 1-3, nothing allocated before the exact length), the record pass (step 4), the cross-record checks (step 5(a)-(h)), the sets by digest with at most length + 1 bytes read (step 6), the glyphs (7), the interval check (8) and the per-frame cost (9); - the clock with the frame range by division, track evaluation, and placement; - the JSON authoring form, one member per field, packing back to the same bytes; - the CLI: check, cost, pack, unpack, vectors gen and verify; - a wasm32 module and verify.mjs for Node. The corpus wai/vector-conformance/ (arith, canonical, refusals, geometry, cost) with its README's provenance line and a sha256.json sidecar naming the div255 table; wai-vector.yml with native, wasip2, node and fuzz jobs. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-vector.yml | 215 + wai/vector-conformance/README.md | 81 + .../expected/arith/alpha.json | 1 + .../expected/arith/div255.json | 1 + .../expected/arith/half_up.json | 1 + .../expected/arith/interp.json | 1 + .../expected/arith/r_rat.json | 1 + .../expected/arith/unpremul.json | 1 + .../canonical/block-unreferenced.json | 1 + .../expected/canonical/cluster-empty.json | 1 + .../canonical/cluster-mid-character.json | 1 + .../canonical/cluster-past-string.json | 1 + .../expected/canonical/clusters-sum.json | 1 + .../expected/canonical/clusters.json | 1 + .../expected/canonical/every-table.json | 1 + .../canonical/group-not-contiguous.json | 1 + .../canonical/group-number-skips.json | 1 + .../canonical/group-split-by-ungrouped.json | 1 + .../expected/canonical/groups-in-order.json | 1 + .../expected/canonical/groups.json | 1 + .../expected/canonical/held.json | 1 + .../expected/canonical/minimal.json | 1 + .../expected/canonical/paint-duplicate.json | 1 + .../expected/canonical/paint-first-use.json | 1 + .../canonical/paint-unreferenced.json | 1 + .../path-alternative-decorative.json | 1 + .../expected/canonical/path-duplicate.json | 1 + .../canonical/ruby-mid-character.json | 1 + .../expected/canonical/ruby-names-itself.json | 1 + .../expected/canonical/ruby-past-string.json | 1 + .../expected/canonical/ruby.json | 1 + .../expected/canonical/set-duplicate.json | 1 + .../expected/canonical/shared.json | 1 + .../expected/canonical/sizes-rates.json | 1 + .../expected/canonical/table-duplicate.json | 1 + .../expected/canonical/table-first-use.json | 1 + .../canonical/table-unreferenced.json | 1 + .../expected/canonical/track-duplicate.json | 1 + .../expected/canonical/track-first-use.json | 1 + .../cost/attack-a-reused-full-canvas.json | 1 + .../expected/cost/attack-b-one-item.json | 1 + .../cost/attack-b-reused-cubic-path.json | 1 + .../cost/attack-c-full-canvas-glyphs.json | 1 + .../expected/cost/ceiling-plus-one.json | 1 + .../expected/cost/ceiling-stated-low.json | 1 + .../expected/cost/ceiling.json | 1 + .../expected/cost/group.json | 1 + .../cost/reused-path-stated-high.json | 1 + .../expected/cost/reused-path.json | 1 + .../expected/cost/touching-windows.json | 1 + .../expected/geometry/clip-over.json | 1 + .../expected/geometry/empty-glyph-edge.json | 1 + .../expected/geometry/empty-glyph-over.json | 1 + .../expected/geometry/groups-sum-over.json | 1 + .../expected/geometry/inactive-item-over.json | 1 + .../expected/geometry/second-size-over.json | 1 + .../expected/geometry/true-range-fits.json | 1 + .../expected/geometry/x-high-edge.json | 1 + .../expected/geometry/x-high-over.json | 1 + .../expected/geometry/x-low-edge.json | 1 + .../expected/geometry/x-low-over.json | 1 + .../expected/geometry/y-high-edge.json | 1 + .../expected/geometry/y-high-over.json | 1 + .../refusals/attack-d-2-held-sets.json | 1 + .../refusals/attack-d-3-held-sets.json | 1 + .../refusals/attack-d-64-held-sets.json | 1 + .../refusals/attack-e-duplicate-tracks.json | 1 + .../expected/refusals/rich.json | 1 + .../expected/refusals/s1-format.json | 1 + .../refusals/s1-magic-before-cap.json | 1 + .../expected/refusals/s1-magic.json | 1 + .../expected/refusals/s1-short.json | 1 + .../expected/refusals/s1-zero.json | 1 + .../refusals/s2-cap-before-length.json | 1 + .../refusals/s2-cap-before-range.json | 1 + .../expected/refusals/s2-cap-held_len.json | 1 + .../expected/refusals/s2-cap-inline_len.json | 1 + .../expected/refusals/s2-cap-n_clusters.json | 1 + .../expected/refusals/s2-cap-n_glyphs.json | 1 + .../expected/refusals/s2-cap-n_items.json | 1 + .../expected/refusals/s2-cap-n_keys.json | 1 + .../expected/refusals/s2-cap-n_paints.json | 1 + .../expected/refusals/s2-cap-n_paths.json | 1 + .../expected/refusals/s2-cap-n_rates.json | 1 + .../expected/refusals/s2-cap-n_sets.json | 1 + .../expected/refusals/s2-cap-n_sizes.json | 1 + .../expected/refusals/s2-cap-n_tables.json | 1 + .../refusals/s2-cap-path_contours.json | 1 + .../expected/refusals/s2-cap-path_points.json | 1 + .../expected/refusals/s2-cap-strings_len.json | 1 + .../expected/refusals/s2-exact-length.json | 1 + .../expected/refusals/s2-sets-total.json | 1 + .../expected/refusals/s3-trailing-byte.json | 1 + .../expected/refusals/s3-truncated.json | 1 + .../expected/refusals/s4-cluster-zero.json | 1 + .../expected/refusals/s4-design-h-large.json | 1 + .../refusals/s4-design-w-before-h.json | 1 + .../expected/refusals/s4-design-w-small.json | 1 + .../expected/refusals/s4-dur-over.json | 1 + .../expected/refusals/s4-dur-zero.json | 1 + .../expected/refusals/s4-glyph-x.json | 1 + .../expected/refusals/s4-glyph-y.json | 1 + .../expected/refusals/s4-glyph-zero.json | 1 + .../refusals/s4-header-before-record.json | 1 + .../refusals/s4-item-clusters-over.json | 1 + .../expected/refusals/s4-item-end-slot.json | 1 + .../refusals/s4-item-glyphs-path.json | 1 + .../refusals/s4-item-glyphs-run-over.json | 1 + .../refusals/s4-item-glyphs-run-zero.json | 1 + .../expected/refusals/s4-item-kind-four.json | 1 + .../refusals/s4-item-matrix-begin.json | 1 + .../refusals/s4-item-paint-begin.json | 1 + .../expected/refusals/s4-item-paint-end.json | 1 + .../expected/refusals/s4-item-ref-path.json | 1 + .../expected/refusals/s4-item-ref-set.json | 1 + .../refusals/s4-item-rule-before-zero2.json | 1 + .../refusals/s4-item-rule-no-clip.json | 1 + .../expected/refusals/s4-item-rule-path.json | 1 + .../expected/refusals/s4-item-rule-run.json | 1 + .../expected/refusals/s4-item-slot-range.json | 1 + .../refusals/s4-item-t-off-order.json | 1 + .../expected/refusals/s4-item-t-off-over.json | 1 + .../expected/refusals/s4-item-t-on.json | 1 + .../expected/refusals/s4-item-text-path.json | 1 + .../expected/refusals/s4-item-text-run.json | 1 + .../refusals/s4-item-unit-scale-clip.json | 1 + .../refusals/s4-item-unit-scale-over.json | 1 + .../refusals/s4-item-unit-scale-zero.json | 1 + .../expected/refusals/s4-item-zero10.json | 1 + .../refusals/s4-item-zero2-before-ref.json | 1 + .../expected/refusals/s4-item-zero2.json | 1 + .../expected/refusals/s4-item-zero42.json | 1 + .../refusals/s4-key-interp-before-sum.json | 1 + .../expected/refusals/s4-key-interp.json | 1 + .../expected/refusals/s4-key-t.json | 1 + .../expected/refusals/s4-key-zero.json | 1 + .../expected/refusals/s4-n-items-zero.json | 1 + .../expected/refusals/s4-n-rates-zero.json | 1 + .../expected/refusals/s4-n-sizes-zero.json | 1 + .../refusals/s4-paint-over-alpha.json | 1 + .../s4-path-contours-over-points.json | 1 + .../refusals/s4-path-n-contours-zero.json | 1 + .../refusals/s4-path-n-points-zero.json | 1 + .../expected/refusals/s4-path-point-tag.json | 1 + .../s4-path-points-limit-before-zero.json | 1 + .../refusals/s4-path-points-limit.json | 1 + .../expected/refusals/s4-path-zero.json | 1 + .../expected/refusals/s4-rate-den-zero.json | 1 + .../expected/refusals/s4-rate-gcd.json | 1 + .../expected/refusals/s4-rate-num-zero.json | 1 + .../expected/refusals/s4-rate-over-240.json | 1 + .../refusals/s4-rate-p-not-integral.json | 1 + .../refusals/s4-set-carriage-before-zero.json | 1 + .../expected/refusals/s4-set-carriage.json | 1 + .../refusals/s4-set-length-large.json | 1 + .../refusals/s4-set-length-small.json | 1 + .../refusals/s4-set-zero-before-length.json | 1 + .../expected/refusals/s4-set-zero.json | 1 + .../expected/refusals/s4-size-aspect.json | 1 + .../expected/refusals/s4-size-w-over-4x.json | 1 + .../expected/refusals/s4-size-w-small.json | 1 + .../refusals/s4-size-w-under-8th.json | 1 + .../expected/refusals/s4-t0-before-dur.json | 1 + .../expected/refusals/s4-t0-over.json | 1 + .../expected/refusals/s4-table-e0.json | 1 + .../expected/refusals/s4-table-e16.json | 1 + .../expected/refusals/s4-table-over.json | 1 + .../refusals/s4-tb-before-record.json | 1 + .../refusals/s4-tb-not-divisible.json | 1 + .../expected/refusals/s4-tb-over.json | 1 + .../expected/refusals/s4-tb-zero.json | 1 + .../expected/refusals/s4-text-dir.json | 1 + .../refusals/s4-text-lang-len-over.json | 1 + .../refusals/s4-text-lang-len-zero.json | 1 + .../expected/refusals/s4-text-mode.json | 1 + .../refusals/s4-text-purpose-zero.json | 1 + .../refusals/s4-text-ruby-len-zero.json | 1 + .../expected/refusals/s4-text-ruby-over.json | 1 + .../expected/refusals/s4-text-ruby-start.json | 1 + .../refusals/s4-text-str-len-over.json | 1 + .../refusals/s4-text-str-len-zero.json | 1 + .../expected/refusals/s4-track-kind-four.json | 1 + .../expected/refusals/s4-track-kind-zero.json | 1 + .../refusals/s4-track-n-keys-over.json | 1 + .../refusals/s4-track-n-keys-zero.json | 1 + .../expected/refusals/s4-track-zero.json | 1 + .../expected/refusals/s5a-clusters-sum.json | 1 + .../expected/refusals/s5a-glyphs-sum.json | 1 + .../expected/refusals/s5a-held-sum.json | 1 + .../expected/refusals/s5a-inline-sum.json | 1 + .../refusals/s5a-path-contours-sum.json | 1 + .../refusals/s5a-path-points-sum.json | 1 + .../expected/refusals/s5a-strings-sum.json | 1 + .../refusals/s5a-sum-before-typing.json | 1 + .../expected/refusals/s5a-track-keys-sum.json | 1 + .../expected/refusals/s5b-keys-order.json | 1 + .../refusals/s5b-last-key-interp.json | 1 + .../expected/refusals/s5b-rates-order.json | 1 + .../expected/refusals/s5b-sizes-equal.json | 1 + .../expected/refusals/s5b-sizes-order.json | 1 + .../expected/refusals/s5c-matrix-key.json | 1 + .../expected/refusals/s5c-opacity-key.json | 1 + .../expected/refusals/s5c-slot-kind.json | 1 + .../refusals/s5c-translation-key.json | 1 + .../refusals/s5c-typing-before-groups.json | 1 + .../expected/refusals/s5d-depth-five.json | 1 + .../expected/refusals/s5d-end-first.json | 1 + .../expected/refusals/s5d-open.json | 1 + .../expected/refusals/s5e-box.json | 1 + .../expected/refusals/s5e-ends-last.json | 1 + .../expected/refusals/s5e-ends-order.json | 1 + .../refusals/s5e-grammar-two-quads.json | 1 + .../expected/refusals/s5e-grammar.json | 1 + .../expected/refusals/s5f-string-c0.json | 1 + .../expected/refusals/s5f-string-c1.json | 1 + .../expected/refusals/s5f-string-del.json | 1 + .../expected/refusals/s5f-string-newline.json | 1 + .../refusals/s5f-string-overlong.json | 1 + .../refusals/s5f-string-surrogate.json | 1 + .../expected/refusals/s5f-string-utf8.json | 1 + .../refusals/s5f-tag-double-hyphen.json | 1 + .../refusals/s5f-tag-leading-hyphen.json | 1 + .../refusals/s5f-tag-trailing-hyphen.json | 1 + .../expected/refusals/s5f-tag-underscore.json | 1 + .../expected/refusals/s6-held-malformed.json | 1 + .../expected/refusals/s6-held-not-held.json | 1 + .../refusals/s6-held-one-byte-longer.json | 1 + .../expected/refusals/s6-held-shorter.json | 1 + .../expected/refusals/s6-inline-hash.json | 1 + .../refusals/s6-inline-malformed.json | 1 + .../refusals/s6-inline-points-limit.json | 1 + .../refusals/s6-inline-too-large.json | 1 + .../refusals/s6-order-held-first.json | 1 + .../refusals/s6-order-inline-first.json | 1 + .../expected/refusals/s7-before-geometry.json | 1 + .../expected/refusals/s7-glyph-missing.json | 1 + .../refusals/wos1-box-empty-glyph.json | 1 + .../expected/refusals/wos1-box.json | 1 + .../refusals/wos1-cap-before-length.json | 1 + .../expected/refusals/wos1-contours-cap.json | 1 + .../refusals/wos1-contours-over-points.json | 1 + .../expected/refusals/wos1-ends-last.json | 1 + .../expected/refusals/wos1-ends-order.json | 1 + .../expected/refusals/wos1-flags.json | 1 + .../expected/refusals/wos1-format.json | 1 + .../expected/refusals/wos1-gid-order.json | 1 + .../expected/refusals/wos1-glyph-zero.json | 1 + .../wos1-grammar-one-point-control.json | 1 + .../expected/refusals/wos1-grammar.json | 1 + .../expected/refusals/wos1-length.json | 1 + .../expected/refusals/wos1-magic.json | 1 + .../expected/refusals/wos1-n-glyphs-cap.json | 1 + .../expected/refusals/wos1-n-glyphs-zero.json | 1 + .../expected/refusals/wos1-notes-cap.json | 1 + .../expected/refusals/wos1-notes-utf8.json | 1 + .../expected/refusals/wos1-notes-zero.json | 1 + .../expected/refusals/wos1-points-16383.json | 1 + .../expected/refusals/wos1-points-16384.json | 1 + .../expected/refusals/wos1-points-cap.json | 1 + .../wos1-points-limit-before-gid-order.json | 1 + .../wos1-points-limit-before-zero.json | 1 + .../expected/refusals/wos1-points-limit.json | 1 + .../refusals/wos1-points-no-contour.json | 1 + .../expected/refusals/wos1-set-a.json | 1 + .../expected/refusals/wos1-short.json | 1 + .../expected/refusals/wos1-sums.json | 1 + .../expected/refusals/wos1-tag.json | 1 + .../wos1-zero-before-points-limit.json | 1 + .../wos1-zero-glyphs-before-points-cap.json | 1 + .../expected/refusals/wos1-zero.json | 1 + wai/vector-conformance/sets/synthetic-a.wos1 | Bin 0 -> 554 bytes wai/vector-conformance/sets/synthetic-b.wos1 | Bin 0 -> 374 bytes .../sets/synthetic-bad-notes.wos1 | Bin 0 -> 382 bytes wai/vector-conformance/sha256.json | 3 + .../vectors/arith/alpha.json | 1 + .../vectors/arith/div255.json | 1 + .../vectors/arith/half_up.json | 1 + .../vectors/arith/index.json | 8 + .../vectors/arith/interp.json | 1 + .../vectors/arith/r_rat.json | 1 + .../vectors/arith/unpremul.json | 1 + .../vectors/canonical/block-unreferenced.json | 43 + .../vectors/canonical/block-unreferenced.wvg1 | Bin 0 -> 934 bytes .../vectors/canonical/cluster-empty.json | 40 + .../vectors/canonical/cluster-empty.wvg1 | Bin 0 -> 853 bytes .../canonical/cluster-mid-character.json | 39 + .../canonical/cluster-mid-character.wvg1 | Bin 0 -> 841 bytes .../canonical/cluster-past-string.json | 39 + .../canonical/cluster-past-string.wvg1 | Bin 0 -> 841 bytes .../vectors/canonical/clusters-sum.json | 39 + .../vectors/canonical/clusters-sum.wvg1 | Bin 0 -> 841 bytes .../vectors/canonical/clusters.json | 39 + .../vectors/canonical/clusters.wvg1 | Bin 0 -> 841 bytes .../vectors/canonical/every-table.json | 133 + .../vectors/canonical/every-table.wvg1 | Bin 0 -> 2339 bytes .../canonical/group-not-contiguous.json | 43 + .../canonical/group-not-contiguous.wvg1 | Bin 0 -> 979 bytes .../vectors/canonical/group-number-skips.json | 43 + .../vectors/canonical/group-number-skips.wvg1 | Bin 0 -> 979 bytes .../canonical/group-split-by-ungrouped.json | 43 + .../canonical/group-split-by-ungrouped.wvg1 | Bin 0 -> 979 bytes .../vectors/canonical/groups-in-order.json | 43 + .../vectors/canonical/groups-in-order.wvg1 | Bin 0 -> 979 bytes .../vectors/canonical/groups.json | 68 + .../vectors/canonical/groups.wvg1 | Bin 0 -> 801 bytes .../vectors/canonical/held.json | 39 + .../vectors/canonical/held.wvg1 | Bin 0 -> 285 bytes .../vectors/canonical/index.json | 33 + .../vectors/canonical/minimal.json | 34 + .../vectors/canonical/minimal.wvg1 | Bin 0 -> 186 bytes .../vectors/canonical/paint-duplicate.json | 41 + .../vectors/canonical/paint-duplicate.wvg1 | Bin 0 -> 276 bytes .../vectors/canonical/paint-first-use.json | 41 + .../vectors/canonical/paint-first-use.wvg1 | Bin 0 -> 276 bytes .../vectors/canonical/paint-unreferenced.json | 41 + .../vectors/canonical/paint-unreferenced.wvg1 | Bin 0 -> 276 bytes .../path-alternative-decorative.json | 36 + .../path-alternative-decorative.wvg1 | Bin 0 -> 216 bytes .../vectors/canonical/path-duplicate.json | 46 + .../vectors/canonical/path-duplicate.wvg1 | Bin 0 -> 312 bytes .../vectors/canonical/ruby-mid-character.json | 43 + .../vectors/canonical/ruby-mid-character.wvg1 | Bin 0 -> 942 bytes .../vectors/canonical/ruby-names-itself.json | 43 + .../vectors/canonical/ruby-names-itself.wvg1 | Bin 0 -> 942 bytes .../vectors/canonical/ruby-past-string.json | 43 + .../vectors/canonical/ruby-past-string.wvg1 | Bin 0 -> 942 bytes .../vectors/canonical/ruby.json | 43 + .../vectors/canonical/ruby.wvg1 | Bin 0 -> 942 bytes .../vectors/canonical/set-duplicate.json | 44 + .../vectors/canonical/set-duplicate.wvg1 | Bin 0 -> 1528 bytes .../vectors/canonical/shared.json | 49 + .../vectors/canonical/shared.wvg1 | Bin 0 -> 409 bytes .../vectors/canonical/sizes-rates.json | 41 + .../vectors/canonical/sizes-rates.wvg1 | Bin 0 -> 242 bytes .../vectors/canonical/table-duplicate.json | 45 + .../vectors/canonical/table-duplicate.wvg1 | Bin 0 -> 386 bytes .../vectors/canonical/table-first-use.json | 45 + .../vectors/canonical/table-first-use.wvg1 | Bin 0 -> 386 bytes .../vectors/canonical/table-unreferenced.json | 45 + .../vectors/canonical/table-unreferenced.wvg1 | Bin 0 -> 386 bytes .../vectors/canonical/track-duplicate.json | 41 + .../vectors/canonical/track-duplicate.wvg1 | Bin 0 -> 274 bytes .../vectors/canonical/track-first-use.json | 41 + .../vectors/canonical/track-first-use.wvg1 | Bin 0 -> 274 bytes .../cost/attack-a-reused-full-canvas.json | 293 + .../cost/attack-a-reused-full-canvas.wvg1 | Bin 0 -> 12618 bytes .../vectors/cost/attack-b-one-item.json | 16411 +++++++++++++++ .../vectors/cost/attack-b-one-item.wvg1 | Bin 0 -> 82071 bytes .../cost/attack-b-reused-cubic-path.json | 16436 ++++++++++++++++ .../cost/attack-b-reused-cubic-path.wvg1 | Bin 0 -> 83271 bytes .../cost/attack-c-full-canvas-glyphs.json | 290 + .../cost/attack-c-full-canvas-glyphs.wvg1 | Bin 0 -> 3584 bytes .../vectors/cost/ceiling-plus-one.json | 298 + .../vectors/cost/ceiling-plus-one.wvg1 | Bin 0 -> 12440 bytes .../vectors/cost/ceiling-stated-low.json | 297 + .../vectors/cost/ceiling-stated-low.wvg1 | Bin 0 -> 12435 bytes .../vectors/cost/ceiling.json | 297 + .../vectors/cost/ceiling.wvg1 | Bin 0 -> 12435 bytes .../vectors/cost/group.json | 43 + .../vectors/cost/group.wvg1 | Bin 0 -> 372 bytes .../vectors/cost/index.json | 13 + .../vectors/cost/reused-path-stated-high.json | 38 + .../vectors/cost/reused-path-stated-high.wvg1 | Bin 0 -> 290 bytes .../vectors/cost/reused-path.json | 38 + .../vectors/cost/reused-path.wvg1 | Bin 0 -> 290 bytes .../vectors/cost/touching-windows.json | 36 + .../vectors/cost/touching-windows.wvg1 | Bin 0 -> 238 bytes .../vectors/geometry/clip-over.json | 45 + .../vectors/geometry/clip-over.wvg1 | Bin 0 -> 340 bytes .../vectors/geometry/empty-glyph-edge.json | 37 + .../vectors/geometry/empty-glyph-edge.wvg1 | Bin 0 -> 814 bytes .../vectors/geometry/empty-glyph-over.json | 37 + .../vectors/geometry/empty-glyph-over.wvg1 | Bin 0 -> 814 bytes .../vectors/geometry/groups-sum-over.json | 42 + .../vectors/geometry/groups-sum-over.wvg1 | Bin 0 -> 398 bytes .../vectors/geometry/inactive-item-over.json | 47 + .../vectors/geometry/inactive-item-over.wvg1 | Bin 0 -> 316 bytes .../vectors/geometry/index.json | 15 + .../vectors/geometry/second-size-over.json | 41 + .../vectors/geometry/second-size-over.wvg1 | Bin 0 -> 234 bytes .../vectors/geometry/true-range-fits.json | 44 + .../vectors/geometry/true-range-fits.wvg1 | Bin 0 -> 270 bytes .../vectors/geometry/x-high-edge.json | 40 + .../vectors/geometry/x-high-edge.wvg1 | Bin 0 -> 226 bytes .../vectors/geometry/x-high-over.json | 40 + .../vectors/geometry/x-high-over.wvg1 | Bin 0 -> 226 bytes .../vectors/geometry/x-low-edge.json | 40 + .../vectors/geometry/x-low-edge.wvg1 | Bin 0 -> 226 bytes .../vectors/geometry/x-low-over.json | 40 + .../vectors/geometry/x-low-over.wvg1 | Bin 0 -> 226 bytes .../vectors/geometry/y-high-edge.json | 40 + .../vectors/geometry/y-high-edge.wvg1 | Bin 0 -> 226 bytes .../vectors/geometry/y-high-over.json | 40 + .../vectors/geometry/y-high-over.wvg1 | Bin 0 -> 226 bytes .../refusals/attack-d-2-held-sets.json | 70 + .../refusals/attack-d-2-held-sets.wvg1 | Bin 0 -> 760 bytes .../refusals/attack-d-3-held-sets.json | 76 + .../refusals/attack-d-3-held-sets.wvg1 | Bin 0 -> 896 bytes .../refusals/attack-d-64-held-sets.json | 442 + .../refusals/attack-d-64-held-sets.wvg1 | Bin 0 -> 9192 bytes .../refusals/attack-e-duplicate-tracks.json | 2851 +++ .../refusals/attack-e-duplicate-tracks.wvg1 | Bin 0 -> 41098 bytes .../vectors/refusals/index.json | 209 + .../vectors/refusals/rich.json | 64 + .../vectors/refusals/rich.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s1-format.json | 34 + .../vectors/refusals/s1-format.wvg1 | Bin 0 -> 186 bytes .../vectors/refusals/s1-magic-before-cap.json | 3 + .../vectors/refusals/s1-magic-before-cap.wvg1 | Bin 0 -> 186 bytes .../vectors/refusals/s1-magic.json | 34 + .../vectors/refusals/s1-magic.wvg1 | Bin 0 -> 186 bytes .../vectors/refusals/s1-short.json | 3 + .../vectors/refusals/s1-short.wvg1 | Bin 0 -> 79 bytes .../vectors/refusals/s1-zero.json | 34 + .../vectors/refusals/s1-zero.wvg1 | Bin 0 -> 186 bytes .../refusals/s2-cap-before-length.json | 3 + .../refusals/s2-cap-before-length.wvg1 | Bin 0 -> 187 bytes .../vectors/refusals/s2-cap-before-range.json | 3 + .../vectors/refusals/s2-cap-before-range.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-held_len.json | 3 + .../vectors/refusals/s2-cap-held_len.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-inline_len.json | 3 + .../vectors/refusals/s2-cap-inline_len.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_clusters.json | 3 + .../vectors/refusals/s2-cap-n_clusters.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_glyphs.json | 3 + .../vectors/refusals/s2-cap-n_glyphs.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_items.json | 3 + .../vectors/refusals/s2-cap-n_items.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_keys.json | 3 + .../vectors/refusals/s2-cap-n_keys.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_paints.json | 3 + .../vectors/refusals/s2-cap-n_paints.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_paths.json | 3 + .../vectors/refusals/s2-cap-n_paths.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_rates.json | 3 + .../vectors/refusals/s2-cap-n_rates.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_sets.json | 3 + .../vectors/refusals/s2-cap-n_sets.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_sizes.json | 3 + .../vectors/refusals/s2-cap-n_sizes.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-n_tables.json | 3 + .../vectors/refusals/s2-cap-n_tables.wvg1 | Bin 0 -> 80 bytes .../refusals/s2-cap-path_contours.json | 3 + .../refusals/s2-cap-path_contours.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-path_points.json | 3 + .../vectors/refusals/s2-cap-path_points.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-cap-strings_len.json | 3 + .../vectors/refusals/s2-cap-strings_len.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-exact-length.json | 3 + .../vectors/refusals/s2-exact-length.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s2-sets-total.json | 3 + .../vectors/refusals/s2-sets-total.wvg1 | Bin 0 -> 80 bytes .../vectors/refusals/s3-trailing-byte.json | 3 + .../vectors/refusals/s3-trailing-byte.wvg1 | Bin 0 -> 187 bytes .../vectors/refusals/s3-truncated.json | 3 + .../vectors/refusals/s3-truncated.wvg1 | Bin 0 -> 185 bytes .../vectors/refusals/s4-cluster-zero.json | 64 + .../vectors/refusals/s4-cluster-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-design-h-large.json | 64 + .../vectors/refusals/s4-design-h-large.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-design-w-before-h.json | 64 + .../refusals/s4-design-w-before-h.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-design-w-small.json | 64 + .../vectors/refusals/s4-design-w-small.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-dur-over.json | 64 + .../vectors/refusals/s4-dur-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-dur-zero.json | 64 + .../vectors/refusals/s4-dur-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-glyph-x.json | 64 + .../vectors/refusals/s4-glyph-x.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-glyph-y.json | 64 + .../vectors/refusals/s4-glyph-y.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-glyph-zero.json | 64 + .../vectors/refusals/s4-glyph-zero.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-header-before-record.json | 64 + .../refusals/s4-header-before-record.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-clusters-over.json | 64 + .../refusals/s4-item-clusters-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-end-slot.json | 64 + .../vectors/refusals/s4-item-end-slot.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-glyphs-path.json | 64 + .../vectors/refusals/s4-item-glyphs-path.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-glyphs-run-over.json | 64 + .../refusals/s4-item-glyphs-run-over.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-glyphs-run-zero.json | 64 + .../refusals/s4-item-glyphs-run-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-kind-four.json | 64 + .../vectors/refusals/s4-item-kind-four.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-matrix-begin.json | 64 + .../refusals/s4-item-matrix-begin.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-paint-begin.json | 64 + .../vectors/refusals/s4-item-paint-begin.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-paint-end.json | 64 + .../vectors/refusals/s4-item-paint-end.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-ref-path.json | 64 + .../vectors/refusals/s4-item-ref-path.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-ref-set.json | 64 + .../vectors/refusals/s4-item-ref-set.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-rule-before-zero2.json | 64 + .../refusals/s4-item-rule-before-zero2.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-rule-no-clip.json | 64 + .../refusals/s4-item-rule-no-clip.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-rule-path.json | 64 + .../vectors/refusals/s4-item-rule-path.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-rule-run.json | 64 + .../vectors/refusals/s4-item-rule-run.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-slot-range.json | 64 + .../vectors/refusals/s4-item-slot-range.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-t-off-order.json | 64 + .../vectors/refusals/s4-item-t-off-order.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-t-off-over.json | 64 + .../vectors/refusals/s4-item-t-off-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-t-on.json | 64 + .../vectors/refusals/s4-item-t-on.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-text-path.json | 64 + .../vectors/refusals/s4-item-text-path.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-text-run.json | 64 + .../vectors/refusals/s4-item-text-run.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-unit-scale-clip.json | 64 + .../refusals/s4-item-unit-scale-clip.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-unit-scale-over.json | 64 + .../refusals/s4-item-unit-scale-over.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-unit-scale-zero.json | 64 + .../refusals/s4-item-unit-scale-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-zero10.json | 64 + .../vectors/refusals/s4-item-zero10.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-item-zero2-before-ref.json | 64 + .../refusals/s4-item-zero2-before-ref.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-zero2.json | 64 + .../vectors/refusals/s4-item-zero2.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-item-zero42.json | 64 + .../vectors/refusals/s4-item-zero42.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-key-interp-before-sum.json | 64 + .../refusals/s4-key-interp-before-sum.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-key-interp.json | 64 + .../vectors/refusals/s4-key-interp.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-key-t.json | 64 + .../vectors/refusals/s4-key-t.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-key-zero.json | 64 + .../vectors/refusals/s4-key-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-n-items-zero.json | 53 + .../vectors/refusals/s4-n-items-zero.wvg1 | Bin 0 -> 938 bytes .../vectors/refusals/s4-n-rates-zero.json | 62 + .../vectors/refusals/s4-n-rates-zero.wvg1 | Bin 0 -> 1170 bytes .../vectors/refusals/s4-n-sizes-zero.json | 62 + .../vectors/refusals/s4-n-sizes-zero.wvg1 | Bin 0 -> 1170 bytes .../vectors/refusals/s4-paint-over-alpha.json | 64 + .../vectors/refusals/s4-paint-over-alpha.wvg1 | Bin 0 -> 1178 bytes .../s4-path-contours-over-points.json | 64 + .../s4-path-contours-over-points.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-path-n-contours-zero.json | 64 + .../refusals/s4-path-n-contours-zero.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-path-n-points-zero.json | 64 + .../refusals/s4-path-n-points-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-path-point-tag.json | 64 + .../vectors/refusals/s4-path-point-tag.wvg1 | Bin 0 -> 1178 bytes .../s4-path-points-limit-before-zero.json | 64 + .../s4-path-points-limit-before-zero.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-path-points-limit.json | 64 + .../refusals/s4-path-points-limit.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-path-zero.json | 64 + .../vectors/refusals/s4-path-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-rate-den-zero.json | 64 + .../vectors/refusals/s4-rate-den-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-rate-gcd.json | 64 + .../vectors/refusals/s4-rate-gcd.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-rate-num-zero.json | 64 + .../vectors/refusals/s4-rate-num-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-rate-over-240.json | 64 + .../vectors/refusals/s4-rate-over-240.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-rate-p-not-integral.json | 64 + .../refusals/s4-rate-p-not-integral.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-set-carriage-before-zero.json | 64 + .../refusals/s4-set-carriage-before-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-set-carriage.json | 64 + .../vectors/refusals/s4-set-carriage.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-set-length-large.json | 64 + .../vectors/refusals/s4-set-length-large.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-set-length-small.json | 64 + .../vectors/refusals/s4-set-length-small.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-set-zero-before-length.json | 64 + .../refusals/s4-set-zero-before-length.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-set-zero.json | 64 + .../vectors/refusals/s4-set-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-size-aspect.json | 64 + .../vectors/refusals/s4-size-aspect.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-size-w-over-4x.json | 64 + .../vectors/refusals/s4-size-w-over-4x.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-size-w-small.json | 64 + .../vectors/refusals/s4-size-w-small.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-size-w-under-8th.json | 64 + .../vectors/refusals/s4-size-w-under-8th.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-t0-before-dur.json | 64 + .../vectors/refusals/s4-t0-before-dur.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-t0-over.json | 64 + .../vectors/refusals/s4-t0-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-table-e0.json | 64 + .../vectors/refusals/s4-table-e0.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-table-e16.json | 64 + .../vectors/refusals/s4-table-e16.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-table-over.json | 64 + .../vectors/refusals/s4-table-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-tb-before-record.json | 64 + .../vectors/refusals/s4-tb-before-record.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-tb-not-divisible.json | 64 + .../vectors/refusals/s4-tb-not-divisible.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-tb-over.json | 64 + .../vectors/refusals/s4-tb-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-tb-zero.json | 64 + .../vectors/refusals/s4-tb-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-text-dir.json | 64 + .../vectors/refusals/s4-text-dir.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-text-lang-len-over.json | 64 + .../refusals/s4-text-lang-len-over.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-text-lang-len-zero.json | 64 + .../refusals/s4-text-lang-len-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-text-mode.json | 64 + .../vectors/refusals/s4-text-mode.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-text-purpose-zero.json | 64 + .../refusals/s4-text-purpose-zero.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-text-ruby-len-zero.json | 64 + .../refusals/s4-text-ruby-len-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-text-ruby-over.json | 64 + .../vectors/refusals/s4-text-ruby-over.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-text-ruby-start.json | 64 + .../vectors/refusals/s4-text-ruby-start.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-text-str-len-over.json | 64 + .../refusals/s4-text-str-len-over.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-text-str-len-zero.json | 64 + .../refusals/s4-text-str-len-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-track-kind-four.json | 64 + .../vectors/refusals/s4-track-kind-four.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-track-kind-zero.json | 64 + .../vectors/refusals/s4-track-kind-zero.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-track-n-keys-over.json | 64 + .../refusals/s4-track-n-keys-over.wvg1 | Bin 0 -> 1178 bytes .../refusals/s4-track-n-keys-zero.json | 64 + .../refusals/s4-track-n-keys-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s4-track-zero.json | 64 + .../vectors/refusals/s4-track-zero.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5a-clusters-sum.json | 65 + .../vectors/refusals/s5a-clusters-sum.wvg1 | Bin 0 -> 1190 bytes .../vectors/refusals/s5a-glyphs-sum.json | 65 + .../vectors/refusals/s5a-glyphs-sum.wvg1 | Bin 0 -> 1190 bytes .../vectors/refusals/s5a-held-sum.json | 64 + .../vectors/refusals/s5a-held-sum.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5a-inline-sum.json | 64 + .../vectors/refusals/s5a-inline-sum.wvg1 | Bin 0 -> 1178 bytes .../refusals/s5a-path-contours-sum.json | 64 + .../refusals/s5a-path-contours-sum.wvg1 | Bin 0 -> 1180 bytes .../vectors/refusals/s5a-path-points-sum.json | 65 + .../vectors/refusals/s5a-path-points-sum.wvg1 | Bin 0 -> 1183 bytes .../vectors/refusals/s5a-strings-sum.json | 64 + .../vectors/refusals/s5a-strings-sum.wvg1 | Bin 0 -> 1179 bytes .../refusals/s5a-sum-before-typing.json | 64 + .../refusals/s5a-sum-before-typing.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5a-track-keys-sum.json | 65 + .../vectors/refusals/s5a-track-keys-sum.wvg1 | Bin 0 -> 1190 bytes .../vectors/refusals/s5b-keys-order.json | 64 + .../vectors/refusals/s5b-keys-order.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5b-last-key-interp.json | 64 + .../vectors/refusals/s5b-last-key-interp.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5b-rates-order.json | 65 + .../vectors/refusals/s5b-rates-order.wvg1 | Bin 0 -> 1186 bytes .../vectors/refusals/s5b-sizes-equal.json | 65 + .../vectors/refusals/s5b-sizes-equal.wvg1 | Bin 0 -> 1186 bytes .../vectors/refusals/s5b-sizes-order.json | 65 + .../vectors/refusals/s5b-sizes-order.wvg1 | Bin 0 -> 1186 bytes .../vectors/refusals/s5c-matrix-key.json | 64 + .../vectors/refusals/s5c-matrix-key.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5c-opacity-key.json | 64 + .../vectors/refusals/s5c-opacity-key.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5c-slot-kind.json | 64 + .../vectors/refusals/s5c-slot-kind.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5c-translation-key.json | 64 + .../vectors/refusals/s5c-translation-key.wvg1 | Bin 0 -> 1178 bytes .../refusals/s5c-typing-before-groups.json | 63 + .../refusals/s5c-typing-before-groups.wvg1 | Bin 0 -> 1130 bytes .../vectors/refusals/s5d-depth-five.json | 44 + .../vectors/refusals/s5d-depth-five.wvg1 | Bin 0 -> 666 bytes .../vectors/refusals/s5d-end-first.json | 65 + .../vectors/refusals/s5d-end-first.wvg1 | Bin 0 -> 1226 bytes .../vectors/refusals/s5d-open.json | 63 + .../vectors/refusals/s5d-open.wvg1 | Bin 0 -> 1130 bytes .../vectors/refusals/s5e-box.json | 64 + .../vectors/refusals/s5e-box.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5e-ends-last.json | 64 + .../vectors/refusals/s5e-ends-last.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5e-ends-order.json | 36 + .../vectors/refusals/s5e-ends-order.wvg1 | Bin 0 -> 198 bytes .../refusals/s5e-grammar-two-quads.json | 64 + .../refusals/s5e-grammar-two-quads.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5e-grammar.json | 64 + .../vectors/refusals/s5e-grammar.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5f-string-c0.json | 64 + .../vectors/refusals/s5f-string-c0.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5f-string-c1.json | 64 + .../vectors/refusals/s5f-string-c1.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5f-string-del.json | 64 + .../vectors/refusals/s5f-string-del.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s5f-string-newline.json | 64 + .../vectors/refusals/s5f-string-newline.wvg1 | Bin 0 -> 1179 bytes .../vectors/refusals/s5f-string-overlong.json | 64 + .../vectors/refusals/s5f-string-overlong.wvg1 | Bin 0 -> 1178 bytes .../refusals/s5f-string-surrogate.json | 64 + .../refusals/s5f-string-surrogate.wvg1 | Bin 0 -> 1180 bytes .../vectors/refusals/s5f-string-utf8.json | 64 + .../vectors/refusals/s5f-string-utf8.wvg1 | Bin 0 -> 1178 bytes .../refusals/s5f-tag-double-hyphen.json | 64 + .../refusals/s5f-tag-double-hyphen.wvg1 | Bin 0 -> 1182 bytes .../refusals/s5f-tag-leading-hyphen.json | 64 + .../refusals/s5f-tag-leading-hyphen.wvg1 | Bin 0 -> 1179 bytes .../refusals/s5f-tag-trailing-hyphen.json | 64 + .../refusals/s5f-tag-trailing-hyphen.wvg1 | Bin 0 -> 1179 bytes .../vectors/refusals/s5f-tag-underscore.json | 64 + .../vectors/refusals/s5f-tag-underscore.wvg1 | Bin 0 -> 1181 bytes .../vectors/refusals/s6-held-malformed.json | 64 + .../vectors/refusals/s6-held-malformed.wvg1 | Bin 0 -> 624 bytes .../vectors/refusals/s6-held-not-held.json | 64 + .../vectors/refusals/s6-held-not-held.wvg1 | Bin 0 -> 624 bytes .../refusals/s6-held-one-byte-longer.json | 64 + .../refusals/s6-held-one-byte-longer.wvg1 | Bin 0 -> 624 bytes .../vectors/refusals/s6-held-shorter.json | 64 + .../vectors/refusals/s6-held-shorter.wvg1 | Bin 0 -> 624 bytes .../vectors/refusals/s6-inline-hash.json | 64 + .../vectors/refusals/s6-inline-hash.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s6-inline-malformed.json | 64 + .../vectors/refusals/s6-inline-malformed.wvg1 | Bin 0 -> 1178 bytes .../refusals/s6-inline-points-limit.json | 64 + .../refusals/s6-inline-points-limit.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s6-inline-too-large.json | 64 + .../vectors/refusals/s6-inline-too-large.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s6-order-held-first.json | 70 + .../vectors/refusals/s6-order-held-first.wvg1 | Bin 0 -> 1314 bytes .../refusals/s6-order-inline-first.json | 70 + .../refusals/s6-order-inline-first.wvg1 | Bin 0 -> 1314 bytes .../vectors/refusals/s7-before-geometry.json | 64 + .../vectors/refusals/s7-before-geometry.wvg1 | Bin 0 -> 1178 bytes .../vectors/refusals/s7-glyph-missing.json | 64 + .../vectors/refusals/s7-glyph-missing.wvg1 | Bin 0 -> 1178 bytes .../refusals/wos1-box-empty-glyph.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-box.wos1 | Bin 0 -> 554 bytes .../refusals/wos1-cap-before-length.wos1 | Bin 0 -> 555 bytes .../vectors/refusals/wos1-contours-cap.wos1 | Bin 0 -> 554 bytes .../refusals/wos1-contours-over-points.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-ends-last.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-ends-order.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-flags.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-format.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-gid-order.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-glyph-zero.wos1 | Bin 0 -> 554 bytes .../wos1-grammar-one-point-control.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-grammar.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-length.wos1 | Bin 0 -> 555 bytes .../vectors/refusals/wos1-magic.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-n-glyphs-cap.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-n-glyphs-zero.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-notes-cap.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-notes-utf8.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-notes-zero.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-points-16383.wos1 | Bin 0 -> 82187 bytes .../vectors/refusals/wos1-points-16384.wos1 | Bin 0 -> 82192 bytes .../vectors/refusals/wos1-points-cap.wos1 | Bin 0 -> 554 bytes .../wos1-points-limit-before-gid-order.wos1 | Bin 0 -> 554 bytes .../wos1-points-limit-before-zero.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-points-limit.wos1 | Bin 0 -> 554 bytes .../refusals/wos1-points-no-contour.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-set-a.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-short.wos1 | Bin 0 -> 31 bytes .../vectors/refusals/wos1-sums.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-tag.wos1 | Bin 0 -> 554 bytes .../wos1-zero-before-points-limit.wos1 | Bin 0 -> 554 bytes .../wos1-zero-glyphs-before-points-cap.wos1 | Bin 0 -> 554 bytes .../vectors/refusals/wos1-zero.wos1 | Bin 0 -> 554 bytes wai/wai-vector/Cargo.lock | 7 + wai/wai-vector/Cargo.toml | 40 + wai/wai-vector/fuzz/seeds/every-table.wvg1 | Bin 0 -> 2339 bytes wai/wai-vector/fuzz/seeds/set-a.wos1 | Bin 0 -> 554 bytes wai/wai-vector/src/arith.rs | 122 + wai/wai-vector/src/bin/wai-vector.rs | 178 + wai/wai-vector/src/bounds.rs | 105 + wai/wai-vector/src/clock.rs | 38 + wai/wai-vector/src/form.rs | 486 + wai/wai-vector/src/json.rs | 406 + wai/wai-vector/src/lib.rs | 39 + wai/wai-vector/src/place.rs | 334 + wai/wai-vector/src/refuse.rs | 79 + wai/wai-vector/src/scene.rs | 420 + wai/wai-vector/src/sha256.rs | 7 + wai/wai-vector/src/track.rs | 46 + wai/wai-vector/src/vectors.rs | 279 + wai/wai-vector/src/vectors/arith_vectors.rs | 256 + wai/wai-vector/src/vectors/canonical.rs | 381 + wai/wai-vector/src/vectors/cost.rs | 163 + wai/wai-vector/src/vectors/geometry.rs | 121 + wai/wai-vector/src/vectors/refusals.rs | 590 + wai/wai-vector/src/vectors/sets.rs | 100 + wai/wai-vector/src/wos1.rs | 380 + wai/wai-vector/src/wvg1.rs | 1392 ++ wai/wai-vector/tests/arith.rs | 79 + wai/wai-vector/tests/canonical.rs | 84 + wai/wai-vector/tests/clock_track.rs | 101 + wai/wai-vector/tests/corpus.rs | 52 + wai/wai-vector/tests/fuzz_smoke.rs | 103 + wai/wai-vector/tests/geometry_cost.rs | 135 + wai/wai-vector/tests/held_sets.rs | 58 + wai/wai-vector/tests/peak_alloc.rs | 72 + wai/wai-vector/tests/refusal_order.rs | 135 + wai/wai-vector/wasm/Cargo.lock | 14 + wai/wai-vector/wasm/Cargo.toml | 20 + wai/wai-vector/wasm/src/lib.rs | 87 + wai/wai-vector/wasm/verify.mjs | 71 + 813 files changed, 56971 insertions(+) create mode 100644 .github/workflows/wai-vector.yml create mode 100644 wai/vector-conformance/README.md create mode 100644 wai/vector-conformance/expected/arith/alpha.json create mode 100644 wai/vector-conformance/expected/arith/div255.json create mode 100644 wai/vector-conformance/expected/arith/half_up.json create mode 100644 wai/vector-conformance/expected/arith/interp.json create mode 100644 wai/vector-conformance/expected/arith/r_rat.json create mode 100644 wai/vector-conformance/expected/arith/unpremul.json create mode 100644 wai/vector-conformance/expected/canonical/block-unreferenced.json create mode 100644 wai/vector-conformance/expected/canonical/cluster-empty.json create mode 100644 wai/vector-conformance/expected/canonical/cluster-mid-character.json create mode 100644 wai/vector-conformance/expected/canonical/cluster-past-string.json create mode 100644 wai/vector-conformance/expected/canonical/clusters-sum.json create mode 100644 wai/vector-conformance/expected/canonical/clusters.json create mode 100644 wai/vector-conformance/expected/canonical/every-table.json create mode 100644 wai/vector-conformance/expected/canonical/group-not-contiguous.json create mode 100644 wai/vector-conformance/expected/canonical/group-number-skips.json create mode 100644 wai/vector-conformance/expected/canonical/group-split-by-ungrouped.json create mode 100644 wai/vector-conformance/expected/canonical/groups-in-order.json create mode 100644 wai/vector-conformance/expected/canonical/groups.json create mode 100644 wai/vector-conformance/expected/canonical/held.json create mode 100644 wai/vector-conformance/expected/canonical/minimal.json create mode 100644 wai/vector-conformance/expected/canonical/paint-duplicate.json create mode 100644 wai/vector-conformance/expected/canonical/paint-first-use.json create mode 100644 wai/vector-conformance/expected/canonical/paint-unreferenced.json create mode 100644 wai/vector-conformance/expected/canonical/path-alternative-decorative.json create mode 100644 wai/vector-conformance/expected/canonical/path-duplicate.json create mode 100644 wai/vector-conformance/expected/canonical/ruby-mid-character.json create mode 100644 wai/vector-conformance/expected/canonical/ruby-names-itself.json create mode 100644 wai/vector-conformance/expected/canonical/ruby-past-string.json create mode 100644 wai/vector-conformance/expected/canonical/ruby.json create mode 100644 wai/vector-conformance/expected/canonical/set-duplicate.json create mode 100644 wai/vector-conformance/expected/canonical/shared.json create mode 100644 wai/vector-conformance/expected/canonical/sizes-rates.json create mode 100644 wai/vector-conformance/expected/canonical/table-duplicate.json create mode 100644 wai/vector-conformance/expected/canonical/table-first-use.json create mode 100644 wai/vector-conformance/expected/canonical/table-unreferenced.json create mode 100644 wai/vector-conformance/expected/canonical/track-duplicate.json create mode 100644 wai/vector-conformance/expected/canonical/track-first-use.json create mode 100644 wai/vector-conformance/expected/cost/attack-a-reused-full-canvas.json create mode 100644 wai/vector-conformance/expected/cost/attack-b-one-item.json create mode 100644 wai/vector-conformance/expected/cost/attack-b-reused-cubic-path.json create mode 100644 wai/vector-conformance/expected/cost/attack-c-full-canvas-glyphs.json create mode 100644 wai/vector-conformance/expected/cost/ceiling-plus-one.json create mode 100644 wai/vector-conformance/expected/cost/ceiling-stated-low.json create mode 100644 wai/vector-conformance/expected/cost/ceiling.json create mode 100644 wai/vector-conformance/expected/cost/group.json create mode 100644 wai/vector-conformance/expected/cost/reused-path-stated-high.json create mode 100644 wai/vector-conformance/expected/cost/reused-path.json create mode 100644 wai/vector-conformance/expected/cost/touching-windows.json create mode 100644 wai/vector-conformance/expected/geometry/clip-over.json create mode 100644 wai/vector-conformance/expected/geometry/empty-glyph-edge.json create mode 100644 wai/vector-conformance/expected/geometry/empty-glyph-over.json create mode 100644 wai/vector-conformance/expected/geometry/groups-sum-over.json create mode 100644 wai/vector-conformance/expected/geometry/inactive-item-over.json create mode 100644 wai/vector-conformance/expected/geometry/second-size-over.json create mode 100644 wai/vector-conformance/expected/geometry/true-range-fits.json create mode 100644 wai/vector-conformance/expected/geometry/x-high-edge.json create mode 100644 wai/vector-conformance/expected/geometry/x-high-over.json create mode 100644 wai/vector-conformance/expected/geometry/x-low-edge.json create mode 100644 wai/vector-conformance/expected/geometry/x-low-over.json create mode 100644 wai/vector-conformance/expected/geometry/y-high-edge.json create mode 100644 wai/vector-conformance/expected/geometry/y-high-over.json create mode 100644 wai/vector-conformance/expected/refusals/attack-d-2-held-sets.json create mode 100644 wai/vector-conformance/expected/refusals/attack-d-3-held-sets.json create mode 100644 wai/vector-conformance/expected/refusals/attack-d-64-held-sets.json create mode 100644 wai/vector-conformance/expected/refusals/attack-e-duplicate-tracks.json create mode 100644 wai/vector-conformance/expected/refusals/rich.json create mode 100644 wai/vector-conformance/expected/refusals/s1-format.json create mode 100644 wai/vector-conformance/expected/refusals/s1-magic-before-cap.json create mode 100644 wai/vector-conformance/expected/refusals/s1-magic.json create mode 100644 wai/vector-conformance/expected/refusals/s1-short.json create mode 100644 wai/vector-conformance/expected/refusals/s1-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-before-length.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-before-range.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-held_len.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-inline_len.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_clusters.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_glyphs.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_items.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_keys.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_paints.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_paths.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_rates.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_sets.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_sizes.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-n_tables.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-path_contours.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-path_points.json create mode 100644 wai/vector-conformance/expected/refusals/s2-cap-strings_len.json create mode 100644 wai/vector-conformance/expected/refusals/s2-exact-length.json create mode 100644 wai/vector-conformance/expected/refusals/s2-sets-total.json create mode 100644 wai/vector-conformance/expected/refusals/s3-trailing-byte.json create mode 100644 wai/vector-conformance/expected/refusals/s3-truncated.json create mode 100644 wai/vector-conformance/expected/refusals/s4-cluster-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-design-h-large.json create mode 100644 wai/vector-conformance/expected/refusals/s4-design-w-before-h.json create mode 100644 wai/vector-conformance/expected/refusals/s4-design-w-small.json create mode 100644 wai/vector-conformance/expected/refusals/s4-dur-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-dur-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-glyph-x.json create mode 100644 wai/vector-conformance/expected/refusals/s4-glyph-y.json create mode 100644 wai/vector-conformance/expected/refusals/s4-glyph-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-header-before-record.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-clusters-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-end-slot.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-glyphs-path.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-glyphs-run-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-glyphs-run-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-kind-four.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-matrix-begin.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-paint-begin.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-paint-end.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-ref-path.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-ref-set.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-rule-before-zero2.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-rule-no-clip.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-rule-path.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-rule-run.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-slot-range.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-t-off-order.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-t-off-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-t-on.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-text-path.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-text-run.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-unit-scale-clip.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-unit-scale-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-unit-scale-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-zero10.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-zero2-before-ref.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-zero2.json create mode 100644 wai/vector-conformance/expected/refusals/s4-item-zero42.json create mode 100644 wai/vector-conformance/expected/refusals/s4-key-interp-before-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s4-key-interp.json create mode 100644 wai/vector-conformance/expected/refusals/s4-key-t.json create mode 100644 wai/vector-conformance/expected/refusals/s4-key-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-n-items-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-n-rates-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-n-sizes-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-paint-over-alpha.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-contours-over-points.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-n-contours-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-n-points-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-point-tag.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-points-limit-before-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-points-limit.json create mode 100644 wai/vector-conformance/expected/refusals/s4-path-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-rate-den-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-rate-gcd.json create mode 100644 wai/vector-conformance/expected/refusals/s4-rate-num-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-rate-over-240.json create mode 100644 wai/vector-conformance/expected/refusals/s4-rate-p-not-integral.json create mode 100644 wai/vector-conformance/expected/refusals/s4-set-carriage-before-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-set-carriage.json create mode 100644 wai/vector-conformance/expected/refusals/s4-set-length-large.json create mode 100644 wai/vector-conformance/expected/refusals/s4-set-length-small.json create mode 100644 wai/vector-conformance/expected/refusals/s4-set-zero-before-length.json create mode 100644 wai/vector-conformance/expected/refusals/s4-set-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-size-aspect.json create mode 100644 wai/vector-conformance/expected/refusals/s4-size-w-over-4x.json create mode 100644 wai/vector-conformance/expected/refusals/s4-size-w-small.json create mode 100644 wai/vector-conformance/expected/refusals/s4-size-w-under-8th.json create mode 100644 wai/vector-conformance/expected/refusals/s4-t0-before-dur.json create mode 100644 wai/vector-conformance/expected/refusals/s4-t0-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-table-e0.json create mode 100644 wai/vector-conformance/expected/refusals/s4-table-e16.json create mode 100644 wai/vector-conformance/expected/refusals/s4-table-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-tb-before-record.json create mode 100644 wai/vector-conformance/expected/refusals/s4-tb-not-divisible.json create mode 100644 wai/vector-conformance/expected/refusals/s4-tb-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-tb-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-dir.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-lang-len-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-lang-len-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-mode.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-purpose-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-ruby-len-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-ruby-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-ruby-start.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-str-len-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-text-str-len-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-track-kind-four.json create mode 100644 wai/vector-conformance/expected/refusals/s4-track-kind-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-track-n-keys-over.json create mode 100644 wai/vector-conformance/expected/refusals/s4-track-n-keys-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s4-track-zero.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-clusters-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-glyphs-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-held-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-inline-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-path-contours-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-path-points-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-strings-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-sum-before-typing.json create mode 100644 wai/vector-conformance/expected/refusals/s5a-track-keys-sum.json create mode 100644 wai/vector-conformance/expected/refusals/s5b-keys-order.json create mode 100644 wai/vector-conformance/expected/refusals/s5b-last-key-interp.json create mode 100644 wai/vector-conformance/expected/refusals/s5b-rates-order.json create mode 100644 wai/vector-conformance/expected/refusals/s5b-sizes-equal.json create mode 100644 wai/vector-conformance/expected/refusals/s5b-sizes-order.json create mode 100644 wai/vector-conformance/expected/refusals/s5c-matrix-key.json create mode 100644 wai/vector-conformance/expected/refusals/s5c-opacity-key.json create mode 100644 wai/vector-conformance/expected/refusals/s5c-slot-kind.json create mode 100644 wai/vector-conformance/expected/refusals/s5c-translation-key.json create mode 100644 wai/vector-conformance/expected/refusals/s5c-typing-before-groups.json create mode 100644 wai/vector-conformance/expected/refusals/s5d-depth-five.json create mode 100644 wai/vector-conformance/expected/refusals/s5d-end-first.json create mode 100644 wai/vector-conformance/expected/refusals/s5d-open.json create mode 100644 wai/vector-conformance/expected/refusals/s5e-box.json create mode 100644 wai/vector-conformance/expected/refusals/s5e-ends-last.json create mode 100644 wai/vector-conformance/expected/refusals/s5e-ends-order.json create mode 100644 wai/vector-conformance/expected/refusals/s5e-grammar-two-quads.json create mode 100644 wai/vector-conformance/expected/refusals/s5e-grammar.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-c0.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-c1.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-del.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-newline.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-overlong.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-surrogate.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-string-utf8.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-tag-double-hyphen.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-tag-leading-hyphen.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-tag-trailing-hyphen.json create mode 100644 wai/vector-conformance/expected/refusals/s5f-tag-underscore.json create mode 100644 wai/vector-conformance/expected/refusals/s6-held-malformed.json create mode 100644 wai/vector-conformance/expected/refusals/s6-held-not-held.json create mode 100644 wai/vector-conformance/expected/refusals/s6-held-one-byte-longer.json create mode 100644 wai/vector-conformance/expected/refusals/s6-held-shorter.json create mode 100644 wai/vector-conformance/expected/refusals/s6-inline-hash.json create mode 100644 wai/vector-conformance/expected/refusals/s6-inline-malformed.json create mode 100644 wai/vector-conformance/expected/refusals/s6-inline-points-limit.json create mode 100644 wai/vector-conformance/expected/refusals/s6-inline-too-large.json create mode 100644 wai/vector-conformance/expected/refusals/s6-order-held-first.json create mode 100644 wai/vector-conformance/expected/refusals/s6-order-inline-first.json create mode 100644 wai/vector-conformance/expected/refusals/s7-before-geometry.json create mode 100644 wai/vector-conformance/expected/refusals/s7-glyph-missing.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-box-empty-glyph.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-box.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-cap-before-length.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-contours-cap.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-contours-over-points.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-ends-last.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-ends-order.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-flags.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-format.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-gid-order.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-glyph-zero.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-grammar-one-point-control.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-grammar.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-length.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-magic.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-n-glyphs-cap.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-n-glyphs-zero.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-notes-cap.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-notes-utf8.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-notes-zero.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-16383.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-16384.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-cap.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-limit-before-gid-order.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-limit-before-zero.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-limit.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-points-no-contour.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-set-a.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-short.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-sums.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-tag.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-zero-before-points-limit.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-zero-glyphs-before-points-cap.json create mode 100644 wai/vector-conformance/expected/refusals/wos1-zero.json create mode 100644 wai/vector-conformance/sets/synthetic-a.wos1 create mode 100644 wai/vector-conformance/sets/synthetic-b.wos1 create mode 100644 wai/vector-conformance/sets/synthetic-bad-notes.wos1 create mode 100644 wai/vector-conformance/sha256.json create mode 100644 wai/vector-conformance/vectors/arith/alpha.json create mode 100644 wai/vector-conformance/vectors/arith/div255.json create mode 100644 wai/vector-conformance/vectors/arith/half_up.json create mode 100644 wai/vector-conformance/vectors/arith/index.json create mode 100644 wai/vector-conformance/vectors/arith/interp.json create mode 100644 wai/vector-conformance/vectors/arith/r_rat.json create mode 100644 wai/vector-conformance/vectors/arith/unpremul.json create mode 100644 wai/vector-conformance/vectors/canonical/block-unreferenced.json create mode 100644 wai/vector-conformance/vectors/canonical/block-unreferenced.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/cluster-empty.json create mode 100644 wai/vector-conformance/vectors/canonical/cluster-empty.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/cluster-mid-character.json create mode 100644 wai/vector-conformance/vectors/canonical/cluster-mid-character.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/cluster-past-string.json create mode 100644 wai/vector-conformance/vectors/canonical/cluster-past-string.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/clusters-sum.json create mode 100644 wai/vector-conformance/vectors/canonical/clusters-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/clusters.json create mode 100644 wai/vector-conformance/vectors/canonical/clusters.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/every-table.json create mode 100644 wai/vector-conformance/vectors/canonical/every-table.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/group-not-contiguous.json create mode 100644 wai/vector-conformance/vectors/canonical/group-not-contiguous.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/group-number-skips.json create mode 100644 wai/vector-conformance/vectors/canonical/group-number-skips.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.json create mode 100644 wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/groups-in-order.json create mode 100644 wai/vector-conformance/vectors/canonical/groups-in-order.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/groups.json create mode 100644 wai/vector-conformance/vectors/canonical/groups.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/held.json create mode 100644 wai/vector-conformance/vectors/canonical/held.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/index.json create mode 100644 wai/vector-conformance/vectors/canonical/minimal.json create mode 100644 wai/vector-conformance/vectors/canonical/minimal.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/paint-duplicate.json create mode 100644 wai/vector-conformance/vectors/canonical/paint-duplicate.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/paint-first-use.json create mode 100644 wai/vector-conformance/vectors/canonical/paint-first-use.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/paint-unreferenced.json create mode 100644 wai/vector-conformance/vectors/canonical/paint-unreferenced.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/path-alternative-decorative.json create mode 100644 wai/vector-conformance/vectors/canonical/path-alternative-decorative.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/path-duplicate.json create mode 100644 wai/vector-conformance/vectors/canonical/path-duplicate.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/ruby-mid-character.json create mode 100644 wai/vector-conformance/vectors/canonical/ruby-mid-character.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/ruby-names-itself.json create mode 100644 wai/vector-conformance/vectors/canonical/ruby-names-itself.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/ruby-past-string.json create mode 100644 wai/vector-conformance/vectors/canonical/ruby-past-string.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/ruby.json create mode 100644 wai/vector-conformance/vectors/canonical/ruby.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/set-duplicate.json create mode 100644 wai/vector-conformance/vectors/canonical/set-duplicate.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/shared.json create mode 100644 wai/vector-conformance/vectors/canonical/shared.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/sizes-rates.json create mode 100644 wai/vector-conformance/vectors/canonical/sizes-rates.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/table-duplicate.json create mode 100644 wai/vector-conformance/vectors/canonical/table-duplicate.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/table-first-use.json create mode 100644 wai/vector-conformance/vectors/canonical/table-first-use.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/table-unreferenced.json create mode 100644 wai/vector-conformance/vectors/canonical/table-unreferenced.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/track-duplicate.json create mode 100644 wai/vector-conformance/vectors/canonical/track-duplicate.wvg1 create mode 100644 wai/vector-conformance/vectors/canonical/track-first-use.json create mode 100644 wai/vector-conformance/vectors/canonical/track-first-use.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.json create mode 100644 wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/attack-b-one-item.json create mode 100644 wai/vector-conformance/vectors/cost/attack-b-one-item.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.json create mode 100644 wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.json create mode 100644 wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/ceiling-plus-one.json create mode 100644 wai/vector-conformance/vectors/cost/ceiling-plus-one.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/ceiling-stated-low.json create mode 100644 wai/vector-conformance/vectors/cost/ceiling-stated-low.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/ceiling.json create mode 100644 wai/vector-conformance/vectors/cost/ceiling.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/group.json create mode 100644 wai/vector-conformance/vectors/cost/group.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/index.json create mode 100644 wai/vector-conformance/vectors/cost/reused-path-stated-high.json create mode 100644 wai/vector-conformance/vectors/cost/reused-path-stated-high.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/reused-path.json create mode 100644 wai/vector-conformance/vectors/cost/reused-path.wvg1 create mode 100644 wai/vector-conformance/vectors/cost/touching-windows.json create mode 100644 wai/vector-conformance/vectors/cost/touching-windows.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/clip-over.json create mode 100644 wai/vector-conformance/vectors/geometry/clip-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/empty-glyph-edge.json create mode 100644 wai/vector-conformance/vectors/geometry/empty-glyph-edge.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/empty-glyph-over.json create mode 100644 wai/vector-conformance/vectors/geometry/empty-glyph-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/groups-sum-over.json create mode 100644 wai/vector-conformance/vectors/geometry/groups-sum-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/inactive-item-over.json create mode 100644 wai/vector-conformance/vectors/geometry/inactive-item-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/index.json create mode 100644 wai/vector-conformance/vectors/geometry/second-size-over.json create mode 100644 wai/vector-conformance/vectors/geometry/second-size-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/true-range-fits.json create mode 100644 wai/vector-conformance/vectors/geometry/true-range-fits.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/x-high-edge.json create mode 100644 wai/vector-conformance/vectors/geometry/x-high-edge.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/x-high-over.json create mode 100644 wai/vector-conformance/vectors/geometry/x-high-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/x-low-edge.json create mode 100644 wai/vector-conformance/vectors/geometry/x-low-edge.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/x-low-over.json create mode 100644 wai/vector-conformance/vectors/geometry/x-low-over.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/y-high-edge.json create mode 100644 wai/vector-conformance/vectors/geometry/y-high-edge.wvg1 create mode 100644 wai/vector-conformance/vectors/geometry/y-high-over.json create mode 100644 wai/vector-conformance/vectors/geometry/y-high-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.json create mode 100644 wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.json create mode 100644 wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.json create mode 100644 wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.json create mode 100644 wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/index.json create mode 100644 wai/vector-conformance/vectors/refusals/rich.json create mode 100644 wai/vector-conformance/vectors/refusals/rich.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s1-format.json create mode 100644 wai/vector-conformance/vectors/refusals/s1-format.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s1-magic-before-cap.json create mode 100644 wai/vector-conformance/vectors/refusals/s1-magic-before-cap.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s1-magic.json create mode 100644 wai/vector-conformance/vectors/refusals/s1-magic.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s1-short.json create mode 100644 wai/vector-conformance/vectors/refusals/s1-short.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s1-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s1-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-before-length.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-before-length.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-before-range.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-before-range.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-held_len.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-held_len.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-inline_len.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-inline_len.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_items.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_items.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_keys.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_keys.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_paints.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_paints.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_paths.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_paths.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_rates.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_rates.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_sets.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_sets.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_tables.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-n_tables.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-path_contours.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-path_contours.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-path_points.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-path_points.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-strings_len.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-cap-strings_len.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-exact-length.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-exact-length.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s2-sets-total.json create mode 100644 wai/vector-conformance/vectors/refusals/s2-sets-total.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s3-trailing-byte.json create mode 100644 wai/vector-conformance/vectors/refusals/s3-trailing-byte.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s3-truncated.json create mode 100644 wai/vector-conformance/vectors/refusals/s3-truncated.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-cluster-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-cluster-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-design-h-large.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-design-h-large.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-design-w-before-h.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-design-w-before-h.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-design-w-small.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-design-w-small.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-dur-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-dur-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-dur-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-dur-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-glyph-x.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-glyph-x.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-glyph-y.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-glyph-y.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-glyph-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-glyph-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-header-before-record.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-header-before-record.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-clusters-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-clusters-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-end-slot.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-end-slot.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-glyphs-path.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-glyphs-path.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-kind-four.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-kind-four.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-matrix-begin.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-matrix-begin.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-paint-begin.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-paint-begin.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-paint-end.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-paint-end.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-ref-path.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-ref-path.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-ref-set.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-ref-set.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-before-zero2.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-before-zero2.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-path.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-path.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-run.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-rule-run.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-slot-range.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-slot-range.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-t-off-order.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-t-off-order.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-t-off-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-t-off-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-t-on.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-t-on.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-text-path.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-text-path.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-text-run.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-text-run.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-unit-scale-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-unit-scale-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero10.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero10.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero2.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero2.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero42.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-item-zero42.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-interp.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-interp.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-t.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-t.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-key-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-n-items-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-n-items-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-n-rates-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-n-rates-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-n-points-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-n-points-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-point-tag.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-point-tag.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-points-limit.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-points-limit.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-path-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-den-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-den-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-gcd.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-gcd.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-num-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-num-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-over-240.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-over-240.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-carriage.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-carriage.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-length-large.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-length-large.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-length-small.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-length-small.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-set-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-aspect.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-aspect.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-w-small.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-w-small.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-t0-before-dur.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-t0-before-dur.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-t0-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-t0-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-table-e0.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-table-e0.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-table-e16.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-table-e16.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-table-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-table-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-before-record.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-before-record.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-tb-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-dir.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-dir.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-lang-len-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-lang-len-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-mode.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-mode.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-purpose-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-purpose-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-ruby-len-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-ruby-len-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-ruby-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-ruby-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-ruby-start.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-ruby-start.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-str-len-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-str-len-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-kind-four.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-kind-four.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-kind-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-kind-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-zero.json create mode 100644 wai/vector-conformance/vectors/refusals/s4-track-zero.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-clusters-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-clusters-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-held-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-held-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-inline-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-inline-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-path-points-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-path-points-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-strings-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-strings-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.json create mode 100644 wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5b-keys-order.json create mode 100644 wai/vector-conformance/vectors/refusals/s5b-keys-order.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5b-last-key-interp.json create mode 100644 wai/vector-conformance/vectors/refusals/s5b-last-key-interp.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5b-rates-order.json create mode 100644 wai/vector-conformance/vectors/refusals/s5b-rates-order.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5b-sizes-equal.json create mode 100644 wai/vector-conformance/vectors/refusals/s5b-sizes-equal.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5b-sizes-order.json create mode 100644 wai/vector-conformance/vectors/refusals/s5b-sizes-order.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5c-matrix-key.json create mode 100644 wai/vector-conformance/vectors/refusals/s5c-matrix-key.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5c-opacity-key.json create mode 100644 wai/vector-conformance/vectors/refusals/s5c-opacity-key.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5c-slot-kind.json create mode 100644 wai/vector-conformance/vectors/refusals/s5c-slot-kind.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5c-translation-key.json create mode 100644 wai/vector-conformance/vectors/refusals/s5c-translation-key.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.json create mode 100644 wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5d-depth-five.json create mode 100644 wai/vector-conformance/vectors/refusals/s5d-depth-five.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5d-end-first.json create mode 100644 wai/vector-conformance/vectors/refusals/s5d-end-first.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5d-open.json create mode 100644 wai/vector-conformance/vectors/refusals/s5d-open.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5e-box.json create mode 100644 wai/vector-conformance/vectors/refusals/s5e-box.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5e-ends-last.json create mode 100644 wai/vector-conformance/vectors/refusals/s5e-ends-last.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5e-ends-order.json create mode 100644 wai/vector-conformance/vectors/refusals/s5e-ends-order.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.json create mode 100644 wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5e-grammar.json create mode 100644 wai/vector-conformance/vectors/refusals/s5e-grammar.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-c0.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-c0.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-c1.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-c1.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-del.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-del.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-newline.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-newline.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-overlong.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-overlong.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-surrogate.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-surrogate.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-utf8.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-string-utf8.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-underscore.json create mode 100644 wai/vector-conformance/vectors/refusals/s5f-tag-underscore.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-malformed.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-malformed.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-not-held.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-not-held.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-shorter.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-held-shorter.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-hash.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-hash.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-malformed.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-malformed.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-points-limit.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-points-limit.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-too-large.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-inline-too-large.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-order-held-first.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-order-held-first.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s6-order-inline-first.json create mode 100644 wai/vector-conformance/vectors/refusals/s6-order-inline-first.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s7-before-geometry.json create mode 100644 wai/vector-conformance/vectors/refusals/s7-before-geometry.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/s7-glyph-missing.json create mode 100644 wai/vector-conformance/vectors/refusals/s7-glyph-missing.wvg1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-box-empty-glyph.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-box.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-cap-before-length.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-contours-cap.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-contours-over-points.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-ends-last.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-ends-order.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-flags.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-format.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-gid-order.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-glyph-zero.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-grammar-one-point-control.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-grammar.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-length.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-magic.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-n-glyphs-cap.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-n-glyphs-zero.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-notes-cap.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-notes-utf8.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-notes-zero.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-16383.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-16384.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-cap.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-limit-before-gid-order.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-limit-before-zero.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-limit.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-points-no-contour.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-set-a.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-short.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-sums.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-tag.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-zero-before-points-limit.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-zero-glyphs-before-points-cap.wos1 create mode 100644 wai/vector-conformance/vectors/refusals/wos1-zero.wos1 create mode 100644 wai/wai-vector/Cargo.lock create mode 100644 wai/wai-vector/Cargo.toml create mode 100644 wai/wai-vector/fuzz/seeds/every-table.wvg1 create mode 100644 wai/wai-vector/fuzz/seeds/set-a.wos1 create mode 100644 wai/wai-vector/src/arith.rs create mode 100644 wai/wai-vector/src/bin/wai-vector.rs create mode 100644 wai/wai-vector/src/bounds.rs create mode 100644 wai/wai-vector/src/clock.rs create mode 100644 wai/wai-vector/src/form.rs create mode 100644 wai/wai-vector/src/json.rs create mode 100644 wai/wai-vector/src/lib.rs create mode 100644 wai/wai-vector/src/place.rs create mode 100644 wai/wai-vector/src/refuse.rs create mode 100644 wai/wai-vector/src/scene.rs create mode 100644 wai/wai-vector/src/sha256.rs create mode 100644 wai/wai-vector/src/track.rs create mode 100644 wai/wai-vector/src/vectors.rs create mode 100644 wai/wai-vector/src/vectors/arith_vectors.rs create mode 100644 wai/wai-vector/src/vectors/canonical.rs create mode 100644 wai/wai-vector/src/vectors/cost.rs create mode 100644 wai/wai-vector/src/vectors/geometry.rs create mode 100644 wai/wai-vector/src/vectors/refusals.rs create mode 100644 wai/wai-vector/src/vectors/sets.rs create mode 100644 wai/wai-vector/src/wos1.rs create mode 100644 wai/wai-vector/src/wvg1.rs create mode 100644 wai/wai-vector/tests/arith.rs create mode 100644 wai/wai-vector/tests/canonical.rs create mode 100644 wai/wai-vector/tests/clock_track.rs create mode 100644 wai/wai-vector/tests/corpus.rs create mode 100644 wai/wai-vector/tests/fuzz_smoke.rs create mode 100644 wai/wai-vector/tests/geometry_cost.rs create mode 100644 wai/wai-vector/tests/held_sets.rs create mode 100644 wai/wai-vector/tests/peak_alloc.rs create mode 100644 wai/wai-vector/tests/refusal_order.rs create mode 100644 wai/wai-vector/wasm/Cargo.lock create mode 100644 wai/wai-vector/wasm/Cargo.toml create mode 100644 wai/wai-vector/wasm/src/lib.rs create mode 100644 wai/wai-vector/wasm/verify.mjs diff --git a/.github/workflows/wai-vector.yml b/.github/workflows/wai-vector.yml new file mode 100644 index 000000000..757afb377 --- /dev/null +++ b/.github/workflows/wai-vector.yml @@ -0,0 +1,215 @@ +name: wai-vector vector graphics + +# The vector graphics capability (wai/extensions/graphics-vector.md), checked on every +# fabric leg the corpus has today. Every leg recomputes every expected file of +# wai/vector-conformance/ from its vector and the committed sets, and requires the +# committed bytes: +# +# - Linux x86_64, Linux arm64 and macOS arm64, natively, debug and release: the unit +# tests, the refusal-order, canonical, clock, track, geometry, cost and held-set +# tests, the corpus tests, and `wai-vector vectors verify`, which also regenerates +# the whole corpus and converts every payload's authoring form back to its bytes; +# - WASI (wasm32-wasip2) under wasmtime, a 32-bit target: the same tests and the same +# `vectors verify`; +# - a browser's engine (wasm32-unknown-unknown) under Node: the recomputation of +# every expected file and every authoring form; +# - the fuzz leg: the corpus-seeded fuzz of the WOS1 and WVG1 parsers at depth, the +# peak-allocation test and the duplicate-detection comparison count. +# +# There is no Windows leg: the Windows runner has been offline since 2026-08-28. + +# One run per branch at a time. A push supersedes the run before it. +# +# There is one `macos` runner and it is the dev Mac, so every macOS job in this repo +# queues on it; only the newest commit's verdict is wanted, so older runs are +# cancelled. `cancel-in-progress: true` also applies to `main`, which advances by +# merge commits whose tree contains the commits before them. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + paths: + - 'wai/wai-vector/**' + # SHA-256 is wai-ops's, included by #[path]. + - 'wai/wai-ops/src/sha256.rs' + - 'wai/vector-conformance/**' + - 'wai/tools/wai_vector_*.py' + # The text the crate and the corpus are held to. + - 'wai/extensions/graphics-vector.md' + - '.github/workflows/wai-vector.yml' + push: + branches: + - main + paths: + - 'wai/wai-vector/**' + - 'wai/wai-ops/src/sha256.rs' + - 'wai/vector-conformance/**' + - 'wai/tools/wai_vector_*.py' + - 'wai/extensions/graphics-vector.md' + - '.github/workflows/wai-vector.yml' + +jobs: + native: + name: ${{ matrix.label }} + runs-on: ${{ matrix.os }} + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + include: + - { os: linux, label: linux-x86_64 } + - { os: linux-arm64, label: linux-aarch64 } + - { os: macos, label: macos-arm64 } + steps: + - uses: actions/checkout@v4 + + # The docker images ship no Rust; the macOS host has it, but launchd's PATH omits + # ~/.cargo/bin. + - name: Install Rust 1.98.0 + shell: bash + run: | + export PATH="$HOME/.cargo/bin:$PATH" + command -v rustup >/dev/null 2>&1 || \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0 + rustup toolchain install 1.98.0 --profile minimal + rustup default 1.98.0 + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + + # Debug builds check every arithmetic operation for overflow, so a bound the + # text states that the code exceeds panics here. + - name: Every test, debug + working-directory: wai/wai-vector + shell: bash + run: cargo test --locked + + - name: Every test, release + working-directory: wai/wai-vector + shell: bash + run: cargo test --locked --release + + - name: The corpus regenerated, every expected file recomputed + working-directory: wai/wai-vector + shell: bash + run: cargo run --locked --release --features std --bin wai-vector -- vectors verify .. + + wasip2: + name: wasm32-wasip2 (wasmtime) + runs-on: linux + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - name: Install Rust 1.98.0 with the wasm32-wasip2 target + shell: bash + run: | + export PATH="$HOME/.cargo/bin:$PATH" + command -v rustup >/dev/null 2>&1 || \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0 + rustup toolchain install 1.98.0 --profile minimal + rustup default 1.98.0 + rustup target add wasm32-wasip2 + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + + - name: Install wasmtime 38.0.3 + shell: bash + run: | + set -euo pipefail + v=38.0.3 + curl --proto '=https' --tlsv1.2 -sSfL -o "$RUNNER_TEMP/wasmtime.tar.xz" \ + "https://github.com/bytecodealliance/wasmtime/releases/download/v$v/wasmtime-v$v-x86_64-linux.tar.xz" + tar -C "$RUNNER_TEMP" -xf "$RUNNER_TEMP/wasmtime.tar.xz" + echo "$RUNNER_TEMP/wasmtime-v$v-x86_64-linux" >> "$GITHUB_PATH" + + # The tests read committed files through CARGO_MANIFEST_DIR/.., so the wai + # directory is preopened at its own absolute path. + - name: Every test, under WASI + working-directory: wai/wai-vector + shell: bash + run: | + set -euo pipefail + W=$(cd .. && pwd) + CARGO_TARGET_WASM32_WASIP2_RUNNER="wasmtime run --dir $W::$W" \ + cargo test --locked --release --target wasm32-wasip2 + + - name: Build the tool for wasm32-wasip2 + working-directory: wai/wai-vector + shell: bash + run: cargo build --locked --release --features std --target wasm32-wasip2 --bin wai-vector + + - name: The corpus regenerated, every expected file recomputed, under WASI + working-directory: wai + shell: bash + run: | + set -euo pipefail + wasmtime --version + wasmtime run --dir .::/wai wai-vector/target/wasm32-wasip2/release/wai-vector.wasm vectors verify /wai + + node: + name: wasm32 under Node + runs-on: linux + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - name: Install Rust 1.98.0 with the wasm32 target + shell: bash + run: | + export PATH="$HOME/.cargo/bin:$PATH" + command -v rustup >/dev/null 2>&1 || \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0 + rustup toolchain install 1.98.0 --profile minimal + rustup default 1.98.0 + rustup target add wasm32-unknown-unknown + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + + - uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Build the recomputation for wasm32-unknown-unknown + working-directory: wai/wai-vector/wasm + shell: bash + run: cargo build --locked --release --target wasm32-unknown-unknown + + - name: Every expected file and authoring form recomputed under Node + working-directory: wai/wai-vector/wasm + shell: bash + run: node verify.mjs target/wasm32-unknown-unknown/release/wai_vector_wasm.wasm ../../vector-conformance + + fuzz: + name: fuzz, peak allocation, comparison count + runs-on: linux + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - name: Install Rust 1.98.0 + shell: bash + run: | + export PATH="$HOME/.cargo/bin:$PATH" + command -v rustup >/dev/null 2>&1 || \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0 + rustup toolchain install 1.98.0 --profile minimal + rustup default 1.98.0 + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + + # Every corpus vector and every file under fuzz/seeds/ as a seed, 2,000 + # mutations each: no input panics, and every accepted input writes back to + # its own bytes. + - name: Corpus-seeded fuzz at depth + working-directory: wai/wai-vector + shell: bash + env: + WAI_VECTOR_FUZZ_ITERS: '2000' + run: cargo test --locked --release --test fuzz_smoke -- --nocapture + + - name: Peak allocation and the duplicate-detection comparison count + working-directory: wai/wai-vector + shell: bash + run: cargo test --locked --release --test peak_alloc --test canonical -- --nocapture + + - name: Every workflow declares a concurrency group + shell: bash + run: bash scripts/check-workflow-concurrency.sh diff --git a/wai/vector-conformance/README.md b/wai/vector-conformance/README.md new file mode 100644 index 000000000..ff9b6f2f4 --- /dev/null +++ b/wai/vector-conformance/README.md @@ -0,0 +1,81 @@ +# vector-conformance — vector graphics + +Vectors for `wai.graphics.vector` +([`extensions/graphics-vector.md`](../extensions/graphics-vector.md)): the `WOS1` +outline set and the `WVG1` payload with the order in which a sink refuses them (§2), +and the arithmetic a sink loads with: the clock, track evaluation, the load-time +interval check and the per-frame cost (§3.1–§3.4). The capability is a Draft and is +not registered; this corpus precedes its registration. + +**Provenance.** Generated here by `wai-vector vectors gen` from formulas: every +payload, outline set and arithmetic input is integers and text written in this +repository, with no media and no font. The outline sets under `sets/` and inside the +payloads are drawn from formulas in `wai-vector/src/vectors/sets.rs`, and each set's +notes state that it was generated here and is licensed Apache-2.0. All text in the +blocks is written here. + +**Equivalence.** A sink conforms on this corpus when, for every payload, it reports the +expected file's `code`: the first refusal §2.7 gives, or `accepted`; and for every +accepted payload it computes the same `SIZE` costs (§3.4(b)), the same `text_hash` and +block identities (§2.11), and the same ticks per frame and frame range for each rate +(§3.1, §2.7). An outline-set parser conforms when it reports §2.1's first code for +every `.wos1` vector. + +## Layout + +- `sets/.wos1` — the outline sets the payloads hold as held sets. A held `SET` + record finds its set here by SHA-256; a digest none of these files has is not held. +- `vectors//.wvg1` — a payload, with its JSON authoring form (§2.12) beside + it as `.json`. The form has one member per field, zero fields included, and + converts back to the same bytes (`wai-vector pack`). +- `vectors//.wos1` — an outline set checked on its own (§2.1). +- `vectors/arith/.json` — an arithmetic input: an operation and its cases. +- `vectors//index.json` — what each vector pins. +- `expected//.json` — the result recomputed from the vector and `sets/` + alone, keys in ascending order, no whitespace: + - a refusal: `{"code": …}`; + - an accepted payload: `instr` (its SHA-256), `text_hash`, `blocks` (each block's + identity, in reading order), `sizes` (`[w, h, cost]`) and `rates` + (`[num, den, P, first frame, last frame]`; the range is empty when the first + exceeds the last); + - an arithmetic input: its results, or the SHA-256 of a whole table. +- `sha256.json` — the digest sidecar SPEC §7, *Digests*, asks of a corpus: each entry + names its buffer and states its SHA-256. + +## Groups + +- `arith` — `div255` over every input; both coverage quantisers over every `v` in + `[−2^18, 2^18]`; the straight-alpha channel over every `c ≤ A`; `R_rat` and + `R_half_up` at ties of both signs and at the driver's widths; track evaluation at + spans of `2^31 − 1` ticks, value steps of `2^23` and tables that are not monotone. +- `canonical` — accepted payloads of every structure, each of which writes back to its + own bytes, and one refusal per canonical rule (§2.5): first-reference order, + duplicates and unreferenced entries in each pool, group numbering and contiguity, + ruby links, clusters, and a decorative path alternative. +- `refusals` — a payload or outline set per code and per check of §2.7 and §2.1, and + pairs of faults whose code pins the order: steps in order, fields in offset order + within a record, the record pass before any cross-table check, each set's checks + before the next set's. Held sets come from `sets/`, through a resolver that refuses a + digest it does not hold and reads at most `length + 1` bytes. +- `geometry` — the interval check (§3.4(a)) accepted with an end at `2^22 − 1` and + refused at `2^22` on each axis, at a second listed size, for an item never active, + for a clip, for enclosing groups' translations and for a glyph with no points; and a + document whose true range fits and whose interval does not, refused. +- `cost` — a document whose cost is exactly `2^32 − 1` (accepted), one at `2^32` + (`too_large`), stated costs off by one (`payload_malformed`), a reused path counted + per use, windows that touch counted once, a group's cost, and three shapes that + exceed the ceiling by reusing a full-canvas path, a path of 16,381 points and a + full-canvas glyph. + +## Regenerating and verifying + +```sh +cd wai/wai-vector +cargo run --release --features std --bin wai-vector -- vectors gen .. +cargo run --release --features std --bin wai-vector -- vectors verify .. +``` + +`vectors verify` regenerates every file and requires the committed bytes, then +recomputes every expected file from its vector and `sets/` alone, and converts every +payload's authoring form back to its bytes. `wai-vector/wasm/verify.mjs` recomputes the +expected files under a browser's WebAssembly engine with Node. diff --git a/wai/vector-conformance/expected/arith/alpha.json b/wai/vector-conformance/expected/arith/alpha.json new file mode 100644 index 000000000..311d11937 --- /dev/null +++ b/wai/vector-conformance/expected/arith/alpha.json @@ -0,0 +1 @@ +{"domain":[-262144,262144],"evenodd_sha256":"0b3646da52243b26b5665dd2b260b0ea77d4b8aece6a83c64759e2517154185d","nonzero_sha256":"d118d056a7c14e3ccaa7fa01f053d916afc9c99e1861d72ef158e410974f324a","op":"alpha","probes":[[-262144,255,0],[-131073,255,255],[-131072,255,255],[-65536,128,128],[-257,0,0],[-256,0,0],[-1,0,0],[0,0,0],[1,0,0],[256,0,0],[257,0,0],[65536,128,128],[131071,255,255],[131072,255,255],[131073,255,255],[196608,255,128],[262143,255,0],[262144,255,0]]} diff --git a/wai/vector-conformance/expected/arith/div255.json b/wai/vector-conformance/expected/arith/div255.json new file mode 100644 index 000000000..80d3d6a4b --- /dev/null +++ b/wai/vector-conformance/expected/arith/div255.json @@ -0,0 +1 @@ +{"count":65026,"first_x_of_each_value":[0,128,383,638,893,1148,1403,1658,1913,2168,2423,2678,2933,3188,3443,3698,3953,4208,4463,4718,4973,5228,5483,5738,5993,6248,6503,6758,7013,7268,7523,7778,8033,8288,8543,8798,9053,9308,9563,9818,10073,10328,10583,10838,11093,11348,11603,11858,12113,12368,12623,12878,13133,13388,13643,13898,14153,14408,14663,14918,15173,15428,15683,15938,16193,16448,16703,16958,17213,17468,17723,17978,18233,18488,18743,18998,19253,19508,19763,20018,20273,20528,20783,21038,21293,21548,21803,22058,22313,22568,22823,23078,23333,23588,23843,24098,24353,24608,24863,25118,25373,25628,25883,26138,26393,26648,26903,27158,27413,27668,27923,28178,28433,28688,28943,29198,29453,29708,29963,30218,30473,30728,30983,31238,31493,31748,32003,32258,32513,32768,33023,33278,33533,33788,34043,34298,34553,34808,35063,35318,35573,35828,36083,36338,36593,36848,37103,37358,37613,37868,38123,38378,38633,38888,39143,39398,39653,39908,40163,40418,40673,40928,41183,41438,41693,41948,42203,42458,42713,42968,43223,43478,43733,43988,44243,44498,44753,45008,45263,45518,45773,46028,46283,46538,46793,47048,47303,47558,47813,48068,48323,48578,48833,49088,49343,49598,49853,50108,50363,50618,50873,51128,51383,51638,51893,52148,52403,52658,52913,53168,53423,53678,53933,54188,54443,54698,54953,55208,55463,55718,55973,56228,56483,56738,56993,57248,57503,57758,58013,58268,58523,58778,59033,59288,59543,59798,60053,60308,60563,60818,61073,61328,61583,61838,62093,62348,62603,62858,63113,63368,63623,63878,64133,64388,64643,64898],"op":"div255","sha256":"1d58ac892356b3da45331270a22885cd5724224f31a4d9dd43c258f9fae3e03d"} diff --git a/wai/vector-conformance/expected/arith/half_up.json b/wai/vector-conformance/expected/arith/half_up.json new file mode 100644 index 000000000..89229c8ba --- /dev/null +++ b/wai/vector-conformance/expected/arith/half_up.json @@ -0,0 +1 @@ +{"op":"half_up","values":[-140737488355328,140737488355327,-70368744210432,70368744210432,-32769,-32768,-32767,-1,0,1,32767,32768,65535,65536,131071,-70368744177664,70368744177664,-35184372105216,35184372105216,-16384,-16384,-16383,0,0,1,16384,16384,32768,32768,65536,-2147483648,2147483648,-1073741824,1073741825,-1,0,0,0,0,0,0,1,1,1,2,-1073741824,1073741824,-536870912,536870912,0,0,0,0,0,0,0,0,0,1,1]} diff --git a/wai/vector-conformance/expected/arith/interp.json b/wai/vector-conformance/expected/arith/interp.json new file mode 100644 index 000000000..0b362740a --- /dev/null +++ b/wai/vector-conformance/expected/arith/interp.json @@ -0,0 +1 @@ +{"op":"interp","values":[[-4194304,-4194304,-4194304,-4194304,-4194304,-4194304,-4194304,-4194304,-4194304,-4194304,-4194304,-4194296,-4194288,-4194288,-4194288,-4194187,-4194187,0,4194304,4194304,4194304],[4194304,4194304,4194304,4194304,4194304,4194304,4194304,4194304,4194304,4194304,4194304,4194296,4194288,4194288,4194288,4194187,4194187,0,-4194304,-4194304,-4194304],[-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,-1048576,0,1048544,1048576,1048576],[1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,1048576,-1048576,-1048576,-1048576],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,255,255],[255,255,255,255,255,255,255,170,85,0,0,8,17,17,17,17,17,17,17,17,17],[0,0,0,0,1,18,18,18,18,18,19,358,752,752,753,5376,5376,5376,5376,5376,5376]]} diff --git a/wai/vector-conformance/expected/arith/r_rat.json b/wai/vector-conformance/expected/arith/r_rat.json new file mode 100644 index 000000000..992d22e74 --- /dev/null +++ b/wai/vector-conformance/expected/arith/r_rat.json @@ -0,0 +1 @@ +{"op":"r_rat","values":[-600,-593,-586,-579,-572,-565,-558,-551,-544,-537,-530,-523,-516,-509,-502,-495,-488,-481,-474,-467,-460,-453,-446,-439,-432,-425,-418,-411,-404,-397,-390,-383,-376,-369,-362,-355,-348,-341,-334,-327,-320,-313,-306,-299,-292,-285,-278,-271,-264,-257,-250,-243,-236,-229,-222,-215,-208,-201,-194,-187,-180,-173,-166,-159,-152,-145,-138,-131,-124,-117,-110,-103,-96,-89,-82,-75,-68,-61,-54,-47,-40,-33,-26,-19,-12,-5,2,9,16,23,30,37,44,51,58,65,72,79,86,93,100,107,114,121,128,135,142,149,156,163,170,177,184,191,198,205,212,219,226,233,240,247,254,261,268,275,282,289,296,303,310,317,324,331,338,345,352,359,366,373,380,387,394,401,408,415,422,429,436,443,450,457,464,471,478,485,492,499,506,513,520,527,534,541,548,555,562,569,576,583,590,597,0,0,-300,-296,-293,-289,-286,-282,-279,-275,-272,-268,-265,-261,-258,-254,-251,-247,-244,-240,-237,-233,-230,-226,-223,-219,-216,-212,-209,-205,-202,-198,-195,-191,-188,-184,-181,-177,-174,-170,-167,-163,-160,-156,-153,-149,-146,-142,-139,-135,-132,-128,-125,-121,-118,-114,-111,-107,-104,-100,-97,-93,-90,-86,-83,-79,-76,-72,-69,-65,-62,-58,-55,-51,-48,-44,-41,-37,-34,-30,-27,-23,-20,-16,-13,-9,-6,-2,1,5,8,12,15,19,22,26,29,33,36,40,43,47,50,54,57,61,64,68,71,75,78,82,85,89,92,96,99,103,106,110,113,117,120,124,127,131,134,138,141,145,148,152,155,159,162,166,169,173,176,180,183,187,190,194,197,201,204,208,211,215,218,222,225,229,232,236,239,243,246,250,253,257,260,264,267,271,274,278,281,285,288,292,295,299,1,0,-200,-198,-195,-193,-191,-188,-186,-184,-181,-179,-177,-174,-172,-170,-167,-165,-163,-160,-158,-156,-153,-151,-149,-146,-144,-142,-139,-137,-135,-132,-130,-128,-125,-123,-121,-118,-116,-114,-111,-109,-107,-104,-102,-100,-97,-95,-93,-90,-88,-86,-83,-81,-79,-76,-74,-72,-69,-67,-65,-62,-60,-58,-55,-53,-51,-48,-46,-44,-41,-39,-37,-34,-32,-30,-27,-25,-23,-20,-18,-16,-13,-11,-9,-6,-4,-2,1,3,5,8,10,12,15,17,19,22,24,26,29,31,33,36,38,40,43,45,47,50,52,54,57,59,61,64,66,68,71,73,75,78,80,82,85,87,89,92,94,96,99,101,103,106,108,110,113,115,117,120,122,124,127,129,131,134,136,138,141,143,145,148,150,152,155,157,159,162,164,166,169,171,173,176,178,180,183,185,187,190,192,194,197,199,0,0,-150,-148,-146,-145,-143,-141,-139,-138,-136,-134,-132,-131,-129,-127,-125,-124,-122,-120,-118,-117,-115,-113,-111,-110,-108,-106,-104,-103,-101,-99,-97,-96,-94,-92,-90,-89,-87,-85,-83,-82,-80,-78,-76,-75,-73,-71,-69,-68,-66,-64,-62,-61,-59,-57,-55,-54,-52,-50,-48,-47,-45,-43,-41,-40,-38,-36,-34,-33,-31,-29,-27,-26,-24,-22,-20,-19,-17,-15,-13,-12,-10,-8,-6,-5,-3,-1,1,2,4,6,8,9,11,13,15,16,18,20,22,23,25,27,29,30,32,34,36,37,39,41,43,44,46,48,50,51,53,55,57,58,60,62,64,65,67,69,71,72,74,76,78,79,81,83,85,86,88,90,92,93,95,97,99,100,102,104,106,107,109,111,113,114,116,118,120,121,123,125,127,128,130,132,134,135,137,139,141,142,144,146,148,149,1,0,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,0,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,288230376151711743,-288230376151711743,288230376151711742,-288230376151711742,144115188075855872,-144115188075855872,0,0,1,-1,96076792050570581,-96076792050570581,96076792050570581,-96076792050570581,48038396025285291,-48038396025285291,0,0,1,-1,274877906944,-274877906944,274877906944,-274877906944,137438953473,-137438953472,1,0,1,0,1073741824,-1073741824,1073741824,-1073741824,536870913,-536870912,1,0,1,0,1073741828,-1073741828,1073741828,-1073741828,536870915,-536870915,0,0,1,-1,1073741824,-1073741824,1073741824,-1073741824,536870913,-536870912,1,0,1,0]} diff --git a/wai/vector-conformance/expected/arith/unpremul.json b/wai/vector-conformance/expected/arith/unpremul.json new file mode 100644 index 000000000..38a18e6a3 --- /dev/null +++ b/wai/vector-conformance/expected/arith/unpremul.json @@ -0,0 +1 @@ +{"count":32896,"op":"unpremul","sha256":"81911e611d05dad4d6d52e317c248a274316f9c49feac40c4cd1f01d4b554378"} diff --git a/wai/vector-conformance/expected/canonical/block-unreferenced.json b/wai/vector-conformance/expected/canonical/block-unreferenced.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/block-unreferenced.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/cluster-empty.json b/wai/vector-conformance/expected/canonical/cluster-empty.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/cluster-empty.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/cluster-mid-character.json b/wai/vector-conformance/expected/canonical/cluster-mid-character.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/cluster-mid-character.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/cluster-past-string.json b/wai/vector-conformance/expected/canonical/cluster-past-string.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/cluster-past-string.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/clusters-sum.json b/wai/vector-conformance/expected/canonical/clusters-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/clusters-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/clusters.json b/wai/vector-conformance/expected/canonical/clusters.json new file mode 100644 index 000000000..107130766 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/clusters.json @@ -0,0 +1 @@ +{"blocks":["8b6e90bf71714b636bd29b4089b594255393450929c4bc84d7ae6a5bff71ff6b"],"code":"accepted","instr":"5baf0de2e5eecf99985ac03bb8adc6be74693f7f58e54385d77f6d7480fef8a3","rates":[[25,1,4800,0,24]],"sizes":[[640,360,245664]],"text_hash":"c66d8bc0477b682ad11bf39bb4f18f686f7d70e9a3387c01fa0cf9e77d1e2fb2"} diff --git a/wai/vector-conformance/expected/canonical/every-table.json b/wai/vector-conformance/expected/canonical/every-table.json new file mode 100644 index 000000000..c8fb228eb --- /dev/null +++ b/wai/vector-conformance/expected/canonical/every-table.json @@ -0,0 +1 @@ +{"blocks":["c39edc93a03811ced7369970f4abac2efc4af33bace4ecae55c73f0da6097dc6","220301ac6ae41e0288e68bb9b9873d837731b35fdf5eddc32b71697bdcb58423","4945d802da2fbb68f3e726d726375e774435c17a41f19ee263c64849105aa959","df3754865ae3e67ae21473954a4a396ad3f6565ceb39d95b2992440484ad3489","9b5ef783d1744cb2b6a3f33d055c7f83ceafa6f21e4d596014708c2e1cefa4a4","f958d696c00609b90bec50e50dc799ceb4d4f691b42e0b88f2885a12329d7a21"],"code":"accepted","instr":"e361b1463d8c2b5e408bbb7ba8c74bdc1b06855ceba01348c5482d7a1f97879a","rates":[[24000,1001,5005,0,23],[25,1,4800,0,24],[60,1,2000,0,59]],"sizes":[[320,180,362339],[640,360,1111403],[1280,720,4090170]],"text_hash":"8e393a193101f2b27a4ff8711982c01b88405b833cfef9ff8e2dea121f9f87cf"} diff --git a/wai/vector-conformance/expected/canonical/group-not-contiguous.json b/wai/vector-conformance/expected/canonical/group-not-contiguous.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/group-not-contiguous.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/group-number-skips.json b/wai/vector-conformance/expected/canonical/group-number-skips.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/group-number-skips.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/group-split-by-ungrouped.json b/wai/vector-conformance/expected/canonical/group-split-by-ungrouped.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/group-split-by-ungrouped.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/groups-in-order.json b/wai/vector-conformance/expected/canonical/groups-in-order.json new file mode 100644 index 000000000..91c0ae030 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/groups-in-order.json @@ -0,0 +1 @@ +{"blocks":["621e4d7b8298eccc9a7064872192109d9ccfa13a442235357a3bb05a3861badd","621e4d7b8298eccc9a7064872192109d9ccfa13a442235357a3bb05a3861badd","621e4d7b8298eccc9a7064872192109d9ccfa13a442235357a3bb05a3861badd"],"code":"accepted","instr":"b076007c6c68343618a7e1db5a5936e275923bcb22ab99a4906441785045e1b6","rates":[[25,1,4800,0,24]],"sizes":[[640,360,245472]],"text_hash":"d4962217761b5a16438607e1911a51dfad16db53ce9c5c22b8450d0e0ff356be"} diff --git a/wai/vector-conformance/expected/canonical/groups.json b/wai/vector-conformance/expected/canonical/groups.json new file mode 100644 index 000000000..48f229923 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/groups.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"fc2cf4f46b278feba74f52ce7fd1da48640c8e10c27a8e35f5256c48ea288322","rates":[[25,1,4800,0,24]],"sizes":[[640,360,1174940]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/canonical/held.json b/wai/vector-conformance/expected/canonical/held.json new file mode 100644 index 000000000..93918a1ab --- /dev/null +++ b/wai/vector-conformance/expected/canonical/held.json @@ -0,0 +1 @@ +{"blocks":["597ed60752f540c0722f4e97c8acd94acb47f44c5bc2373d536df6f592889c2d"],"code":"accepted","instr":"8b350ec149c4b31f628aa4981f9a7eab5215c44b4eaeedec2d1bac0949461d3b","rates":[[25,1,4800,0,24]],"sizes":[[640,360,248358]],"text_hash":"28b2cb2c17fb08ed69f2e7c24e9cad35f1c582935c935c0c6492afcbfc01f884"} diff --git a/wai/vector-conformance/expected/canonical/minimal.json b/wai/vector-conformance/expected/canonical/minimal.json new file mode 100644 index 000000000..0a515a0bc --- /dev/null +++ b/wai/vector-conformance/expected/canonical/minimal.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"85cd4f00b547885c5d27d226449ff1ebfee20035de92a3fffee935f78a6901ca","rates":[[25,1,4800,0,24]],"sizes":[[640,360,235605]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/canonical/paint-duplicate.json b/wai/vector-conformance/expected/canonical/paint-duplicate.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/paint-duplicate.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/paint-first-use.json b/wai/vector-conformance/expected/canonical/paint-first-use.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/paint-first-use.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/paint-unreferenced.json b/wai/vector-conformance/expected/canonical/paint-unreferenced.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/paint-unreferenced.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/path-alternative-decorative.json b/wai/vector-conformance/expected/canonical/path-alternative-decorative.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/path-alternative-decorative.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/path-duplicate.json b/wai/vector-conformance/expected/canonical/path-duplicate.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/path-duplicate.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/ruby-mid-character.json b/wai/vector-conformance/expected/canonical/ruby-mid-character.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/ruby-mid-character.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/ruby-names-itself.json b/wai/vector-conformance/expected/canonical/ruby-names-itself.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/ruby-names-itself.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/ruby-past-string.json b/wai/vector-conformance/expected/canonical/ruby-past-string.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/ruby-past-string.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/ruby.json b/wai/vector-conformance/expected/canonical/ruby.json new file mode 100644 index 000000000..c593f5f60 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/ruby.json @@ -0,0 +1 @@ +{"blocks":["4945d802da2fbb68f3e726d726375e774435c17a41f19ee263c64849105aa959","06861e0fa3ebbdcf8a61591543447c7e912c42423c37d2abcc035bfdd8ed09d6"],"code":"accepted","instr":"24f1e087af92a3b23efc8df85529d491a808513aba7eebd4a517cb6ad21d7e07","rates":[[25,1,4800,0,24]],"sizes":[[640,360,258277]],"text_hash":"929a513fffcf2add8a1ee9a8069ed0650f463ac3383774a7e1a0a5b7e3df0f82"} diff --git a/wai/vector-conformance/expected/canonical/set-duplicate.json b/wai/vector-conformance/expected/canonical/set-duplicate.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/set-duplicate.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/shared.json b/wai/vector-conformance/expected/canonical/shared.json new file mode 100644 index 000000000..cfa728fe9 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/shared.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"dbce5f4f333e49f5afc0066390fc9a06a3087a76fd04d7c5d6c9977cde721581","rates":[[25,1,4800,0,24]],"sizes":[[640,360,275766]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/canonical/sizes-rates.json b/wai/vector-conformance/expected/canonical/sizes-rates.json new file mode 100644 index 000000000..c3f70df9a --- /dev/null +++ b/wai/vector-conformance/expected/canonical/sizes-rates.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"43a21665b2c925ddc394faafa5bfc008e40ea4be6356d1bb2e5097f8821363b7","rates":[[24000,1001,5005,0,23],[24,1,5000,0,23],[25,1,4800,0,24],[120,1,1000,0,119]],"sizes":[[80,45,7969],[320,180,64705],[640,360,245505],[1280,720,967705],[2560,1440,3854505]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/canonical/table-duplicate.json b/wai/vector-conformance/expected/canonical/table-duplicate.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/table-duplicate.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/table-first-use.json b/wai/vector-conformance/expected/canonical/table-first-use.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/table-first-use.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/table-unreferenced.json b/wai/vector-conformance/expected/canonical/table-unreferenced.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/table-unreferenced.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/track-duplicate.json b/wai/vector-conformance/expected/canonical/track-duplicate.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/track-duplicate.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/canonical/track-first-use.json b/wai/vector-conformance/expected/canonical/track-first-use.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/canonical/track-first-use.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/cost/attack-a-reused-full-canvas.json b/wai/vector-conformance/expected/cost/attack-a-reused-full-canvas.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/cost/attack-a-reused-full-canvas.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/cost/attack-b-one-item.json b/wai/vector-conformance/expected/cost/attack-b-one-item.json new file mode 100644 index 000000000..ac439033e --- /dev/null +++ b/wai/vector-conformance/expected/cost/attack-b-one-item.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"00feb531b82e797d6213aa0d757bd51b987f33be639432a73265ee22e5a0edb8","rates":[[25,1,4800,0,24]],"sizes":[[4096,4096,184521728]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/cost/attack-b-reused-cubic-path.json b/wai/vector-conformance/expected/cost/attack-b-reused-cubic-path.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/cost/attack-b-reused-cubic-path.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/cost/attack-c-full-canvas-glyphs.json b/wai/vector-conformance/expected/cost/attack-c-full-canvas-glyphs.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/cost/attack-c-full-canvas-glyphs.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/cost/ceiling-plus-one.json b/wai/vector-conformance/expected/cost/ceiling-plus-one.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/cost/ceiling-plus-one.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/cost/ceiling-stated-low.json b/wai/vector-conformance/expected/cost/ceiling-stated-low.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/cost/ceiling-stated-low.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/cost/ceiling.json b/wai/vector-conformance/expected/cost/ceiling.json new file mode 100644 index 000000000..332bfea77 --- /dev/null +++ b/wai/vector-conformance/expected/cost/ceiling.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"e2e0f6a8d4bab69cf6ee8dee7a473f90c9850b60ae2301518e2eada1aca8a632","rates":[[25,1,4800,0,24]],"sizes":[[4096,4096,4294967295]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/cost/group.json b/wai/vector-conformance/expected/cost/group.json new file mode 100644 index 000000000..61a397a01 --- /dev/null +++ b/wai/vector-conformance/expected/cost/group.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"bf7c08c1d3ea1cb45c9a20d6ef7d681871bf2e3c39ff1d71ddfc6de506881ba4","rates":[[25,1,4800,0,24]],"sizes":[[640,360,474960]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/cost/reused-path-stated-high.json b/wai/vector-conformance/expected/cost/reused-path-stated-high.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/cost/reused-path-stated-high.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/cost/reused-path.json b/wai/vector-conformance/expected/cost/reused-path.json new file mode 100644 index 000000000..40199e88b --- /dev/null +++ b/wai/vector-conformance/expected/cost/reused-path.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"2277ff822d6748c359104726ef47f60a33de896f7dc6e43eb83ff31f8dd6ac75","rates":[[25,1,4800,0,24]],"sizes":[[640,360,243315]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/cost/touching-windows.json b/wai/vector-conformance/expected/cost/touching-windows.json new file mode 100644 index 000000000..7bc299f59 --- /dev/null +++ b/wai/vector-conformance/expected/cost/touching-windows.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"332dd704c16fbe41004019fe4baafecc7044029bad416a48067dda3a83d9c226","rates":[[25,1,4800,0,24]],"sizes":[[640,360,234705]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/geometry/clip-over.json b/wai/vector-conformance/expected/geometry/clip-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/clip-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/empty-glyph-edge.json b/wai/vector-conformance/expected/geometry/empty-glyph-edge.json new file mode 100644 index 000000000..72e570c13 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/empty-glyph-edge.json @@ -0,0 +1 @@ +{"blocks":["e0be3f241db4ab4dce7ad7c219d27f6974df2aa929b7727e11b3cb237371fc38"],"code":"accepted","instr":"a089c2fda9658564d4551a4892e78ef4aab9dc577c38d65ac83606d349705b24","rates":[[25,1,4800,0,24]],"sizes":[[640,360,235352]],"text_hash":"58a80b410735ddf0be5afcc769fbeb5535cffdd5f43cd536ce5abe1d96c92591"} diff --git a/wai/vector-conformance/expected/geometry/empty-glyph-over.json b/wai/vector-conformance/expected/geometry/empty-glyph-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/empty-glyph-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/groups-sum-over.json b/wai/vector-conformance/expected/geometry/groups-sum-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/groups-sum-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/inactive-item-over.json b/wai/vector-conformance/expected/geometry/inactive-item-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/inactive-item-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/second-size-over.json b/wai/vector-conformance/expected/geometry/second-size-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/second-size-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/true-range-fits.json b/wai/vector-conformance/expected/geometry/true-range-fits.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/true-range-fits.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/x-high-edge.json b/wai/vector-conformance/expected/geometry/x-high-edge.json new file mode 100644 index 000000000..a56d35838 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/x-high-edge.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"03551dd38d4a8fcc59e98a7a69026ae1feb69da51ec0b7dfc0abc7753be4bb08","rates":[[25,1,4800,0,24]],"sizes":[[640,360,234500]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/geometry/x-high-over.json b/wai/vector-conformance/expected/geometry/x-high-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/x-high-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/x-low-edge.json b/wai/vector-conformance/expected/geometry/x-low-edge.json new file mode 100644 index 000000000..fce6a85de --- /dev/null +++ b/wai/vector-conformance/expected/geometry/x-low-edge.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"3e3660be2075858bf8b1c9fcebbfb51515a1b34ce84c1d76c505d7e411fa78b9","rates":[[25,1,4800,0,24]],"sizes":[[640,360,234500]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/geometry/x-low-over.json b/wai/vector-conformance/expected/geometry/x-low-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/x-low-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/geometry/y-high-edge.json b/wai/vector-conformance/expected/geometry/y-high-edge.json new file mode 100644 index 000000000..633ac9f06 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/y-high-edge.json @@ -0,0 +1 @@ +{"blocks":[],"code":"accepted","instr":"7a8e0687fb9a6b97e5446c627b5ed378158e7c10fff4decbce92edcacde513b7","rates":[[25,1,4800,0,24]],"sizes":[[640,360,234500]],"text_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/wai/vector-conformance/expected/geometry/y-high-over.json b/wai/vector-conformance/expected/geometry/y-high-over.json new file mode 100644 index 000000000..9d1986074 --- /dev/null +++ b/wai/vector-conformance/expected/geometry/y-high-over.json @@ -0,0 +1 @@ +{"code":"geometry_range"} diff --git a/wai/vector-conformance/expected/refusals/attack-d-2-held-sets.json b/wai/vector-conformance/expected/refusals/attack-d-2-held-sets.json new file mode 100644 index 000000000..006f619fb --- /dev/null +++ b/wai/vector-conformance/expected/refusals/attack-d-2-held-sets.json @@ -0,0 +1 @@ +{"code":"outline_not_held"} diff --git a/wai/vector-conformance/expected/refusals/attack-d-3-held-sets.json b/wai/vector-conformance/expected/refusals/attack-d-3-held-sets.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/attack-d-3-held-sets.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/attack-d-64-held-sets.json b/wai/vector-conformance/expected/refusals/attack-d-64-held-sets.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/attack-d-64-held-sets.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/attack-e-duplicate-tracks.json b/wai/vector-conformance/expected/refusals/attack-e-duplicate-tracks.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/attack-e-duplicate-tracks.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/rich.json b/wai/vector-conformance/expected/refusals/rich.json new file mode 100644 index 000000000..8f9846901 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/rich.json @@ -0,0 +1 @@ +{"blocks":["430c5d5bd8d301e1a0c4b4a15861857efceb9834cc436caa0bb0e9250fac9096"],"code":"accepted","instr":"f4459b2d437e0c0ac79a60d654610acd87050588501de3050abe746682f3d78e","rates":[[25,1,4800,0,24]],"sizes":[[640,360,498549]],"text_hash":"31835df51e63024e66c580c5f829c3084845ee7d58bf07b29a2cc5a13242150d"} diff --git a/wai/vector-conformance/expected/refusals/s1-format.json b/wai/vector-conformance/expected/refusals/s1-format.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s1-format.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s1-magic-before-cap.json b/wai/vector-conformance/expected/refusals/s1-magic-before-cap.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s1-magic-before-cap.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s1-magic.json b/wai/vector-conformance/expected/refusals/s1-magic.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s1-magic.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s1-short.json b/wai/vector-conformance/expected/refusals/s1-short.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s1-short.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s1-zero.json b/wai/vector-conformance/expected/refusals/s1-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s1-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-before-length.json b/wai/vector-conformance/expected/refusals/s2-cap-before-length.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-before-length.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-before-range.json b/wai/vector-conformance/expected/refusals/s2-cap-before-range.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-before-range.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-held_len.json b/wai/vector-conformance/expected/refusals/s2-cap-held_len.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-held_len.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-inline_len.json b/wai/vector-conformance/expected/refusals/s2-cap-inline_len.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-inline_len.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_clusters.json b/wai/vector-conformance/expected/refusals/s2-cap-n_clusters.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_clusters.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_glyphs.json b/wai/vector-conformance/expected/refusals/s2-cap-n_glyphs.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_glyphs.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_items.json b/wai/vector-conformance/expected/refusals/s2-cap-n_items.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_items.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_keys.json b/wai/vector-conformance/expected/refusals/s2-cap-n_keys.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_keys.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_paints.json b/wai/vector-conformance/expected/refusals/s2-cap-n_paints.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_paints.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_paths.json b/wai/vector-conformance/expected/refusals/s2-cap-n_paths.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_paths.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_rates.json b/wai/vector-conformance/expected/refusals/s2-cap-n_rates.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_rates.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_sets.json b/wai/vector-conformance/expected/refusals/s2-cap-n_sets.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_sets.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_sizes.json b/wai/vector-conformance/expected/refusals/s2-cap-n_sizes.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_sizes.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-n_tables.json b/wai/vector-conformance/expected/refusals/s2-cap-n_tables.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-n_tables.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-path_contours.json b/wai/vector-conformance/expected/refusals/s2-cap-path_contours.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-path_contours.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-path_points.json b/wai/vector-conformance/expected/refusals/s2-cap-path_points.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-path_points.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-cap-strings_len.json b/wai/vector-conformance/expected/refusals/s2-cap-strings_len.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-cap-strings_len.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-exact-length.json b/wai/vector-conformance/expected/refusals/s2-exact-length.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-exact-length.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s2-sets-total.json b/wai/vector-conformance/expected/refusals/s2-sets-total.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s2-sets-total.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s3-trailing-byte.json b/wai/vector-conformance/expected/refusals/s3-trailing-byte.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s3-trailing-byte.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s3-truncated.json b/wai/vector-conformance/expected/refusals/s3-truncated.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s3-truncated.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-cluster-zero.json b/wai/vector-conformance/expected/refusals/s4-cluster-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-cluster-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-design-h-large.json b/wai/vector-conformance/expected/refusals/s4-design-h-large.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-design-h-large.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-design-w-before-h.json b/wai/vector-conformance/expected/refusals/s4-design-w-before-h.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-design-w-before-h.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-design-w-small.json b/wai/vector-conformance/expected/refusals/s4-design-w-small.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-design-w-small.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-dur-over.json b/wai/vector-conformance/expected/refusals/s4-dur-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-dur-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-dur-zero.json b/wai/vector-conformance/expected/refusals/s4-dur-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-dur-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-glyph-x.json b/wai/vector-conformance/expected/refusals/s4-glyph-x.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-glyph-x.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-glyph-y.json b/wai/vector-conformance/expected/refusals/s4-glyph-y.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-glyph-y.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-glyph-zero.json b/wai/vector-conformance/expected/refusals/s4-glyph-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-glyph-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-header-before-record.json b/wai/vector-conformance/expected/refusals/s4-header-before-record.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-header-before-record.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-clusters-over.json b/wai/vector-conformance/expected/refusals/s4-item-clusters-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-clusters-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-end-slot.json b/wai/vector-conformance/expected/refusals/s4-item-end-slot.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-end-slot.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-glyphs-path.json b/wai/vector-conformance/expected/refusals/s4-item-glyphs-path.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-glyphs-path.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-glyphs-run-over.json b/wai/vector-conformance/expected/refusals/s4-item-glyphs-run-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-glyphs-run-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-glyphs-run-zero.json b/wai/vector-conformance/expected/refusals/s4-item-glyphs-run-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-glyphs-run-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-kind-four.json b/wai/vector-conformance/expected/refusals/s4-item-kind-four.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-kind-four.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-matrix-begin.json b/wai/vector-conformance/expected/refusals/s4-item-matrix-begin.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-matrix-begin.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-paint-begin.json b/wai/vector-conformance/expected/refusals/s4-item-paint-begin.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-paint-begin.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-paint-end.json b/wai/vector-conformance/expected/refusals/s4-item-paint-end.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-paint-end.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-ref-path.json b/wai/vector-conformance/expected/refusals/s4-item-ref-path.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-ref-path.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-ref-set.json b/wai/vector-conformance/expected/refusals/s4-item-ref-set.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-ref-set.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-rule-before-zero2.json b/wai/vector-conformance/expected/refusals/s4-item-rule-before-zero2.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-rule-before-zero2.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-rule-no-clip.json b/wai/vector-conformance/expected/refusals/s4-item-rule-no-clip.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-rule-no-clip.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-rule-path.json b/wai/vector-conformance/expected/refusals/s4-item-rule-path.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-rule-path.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-rule-run.json b/wai/vector-conformance/expected/refusals/s4-item-rule-run.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-rule-run.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-slot-range.json b/wai/vector-conformance/expected/refusals/s4-item-slot-range.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-slot-range.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-t-off-order.json b/wai/vector-conformance/expected/refusals/s4-item-t-off-order.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-t-off-order.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-t-off-over.json b/wai/vector-conformance/expected/refusals/s4-item-t-off-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-t-off-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-t-on.json b/wai/vector-conformance/expected/refusals/s4-item-t-on.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-t-on.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-text-path.json b/wai/vector-conformance/expected/refusals/s4-item-text-path.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-text-path.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-text-run.json b/wai/vector-conformance/expected/refusals/s4-item-text-run.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-text-run.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-unit-scale-clip.json b/wai/vector-conformance/expected/refusals/s4-item-unit-scale-clip.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-unit-scale-clip.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-unit-scale-over.json b/wai/vector-conformance/expected/refusals/s4-item-unit-scale-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-unit-scale-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-unit-scale-zero.json b/wai/vector-conformance/expected/refusals/s4-item-unit-scale-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-unit-scale-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-zero10.json b/wai/vector-conformance/expected/refusals/s4-item-zero10.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-zero10.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-zero2-before-ref.json b/wai/vector-conformance/expected/refusals/s4-item-zero2-before-ref.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-zero2-before-ref.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-zero2.json b/wai/vector-conformance/expected/refusals/s4-item-zero2.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-zero2.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-item-zero42.json b/wai/vector-conformance/expected/refusals/s4-item-zero42.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-item-zero42.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-key-interp-before-sum.json b/wai/vector-conformance/expected/refusals/s4-key-interp-before-sum.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-key-interp-before-sum.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-key-interp.json b/wai/vector-conformance/expected/refusals/s4-key-interp.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-key-interp.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-key-t.json b/wai/vector-conformance/expected/refusals/s4-key-t.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-key-t.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-key-zero.json b/wai/vector-conformance/expected/refusals/s4-key-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-key-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-n-items-zero.json b/wai/vector-conformance/expected/refusals/s4-n-items-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-n-items-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-n-rates-zero.json b/wai/vector-conformance/expected/refusals/s4-n-rates-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-n-rates-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-n-sizes-zero.json b/wai/vector-conformance/expected/refusals/s4-n-sizes-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-n-sizes-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-paint-over-alpha.json b/wai/vector-conformance/expected/refusals/s4-paint-over-alpha.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-paint-over-alpha.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-contours-over-points.json b/wai/vector-conformance/expected/refusals/s4-path-contours-over-points.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-contours-over-points.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-n-contours-zero.json b/wai/vector-conformance/expected/refusals/s4-path-n-contours-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-n-contours-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-n-points-zero.json b/wai/vector-conformance/expected/refusals/s4-path-n-points-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-n-points-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-point-tag.json b/wai/vector-conformance/expected/refusals/s4-path-point-tag.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-point-tag.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-points-limit-before-zero.json b/wai/vector-conformance/expected/refusals/s4-path-points-limit-before-zero.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-points-limit-before-zero.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-points-limit.json b/wai/vector-conformance/expected/refusals/s4-path-points-limit.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-points-limit.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/s4-path-zero.json b/wai/vector-conformance/expected/refusals/s4-path-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-path-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-rate-den-zero.json b/wai/vector-conformance/expected/refusals/s4-rate-den-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-rate-den-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-rate-gcd.json b/wai/vector-conformance/expected/refusals/s4-rate-gcd.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-rate-gcd.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-rate-num-zero.json b/wai/vector-conformance/expected/refusals/s4-rate-num-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-rate-num-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-rate-over-240.json b/wai/vector-conformance/expected/refusals/s4-rate-over-240.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-rate-over-240.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-rate-p-not-integral.json b/wai/vector-conformance/expected/refusals/s4-rate-p-not-integral.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-rate-p-not-integral.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-set-carriage-before-zero.json b/wai/vector-conformance/expected/refusals/s4-set-carriage-before-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-set-carriage-before-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-set-carriage.json b/wai/vector-conformance/expected/refusals/s4-set-carriage.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-set-carriage.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-set-length-large.json b/wai/vector-conformance/expected/refusals/s4-set-length-large.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-set-length-large.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-set-length-small.json b/wai/vector-conformance/expected/refusals/s4-set-length-small.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-set-length-small.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-set-zero-before-length.json b/wai/vector-conformance/expected/refusals/s4-set-zero-before-length.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-set-zero-before-length.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-set-zero.json b/wai/vector-conformance/expected/refusals/s4-set-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-set-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s4-size-aspect.json b/wai/vector-conformance/expected/refusals/s4-size-aspect.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-size-aspect.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-size-w-over-4x.json b/wai/vector-conformance/expected/refusals/s4-size-w-over-4x.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-size-w-over-4x.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-size-w-small.json b/wai/vector-conformance/expected/refusals/s4-size-w-small.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-size-w-small.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-size-w-under-8th.json b/wai/vector-conformance/expected/refusals/s4-size-w-under-8th.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-size-w-under-8th.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-t0-before-dur.json b/wai/vector-conformance/expected/refusals/s4-t0-before-dur.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-t0-before-dur.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-t0-over.json b/wai/vector-conformance/expected/refusals/s4-t0-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-t0-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-table-e0.json b/wai/vector-conformance/expected/refusals/s4-table-e0.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-table-e0.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-table-e16.json b/wai/vector-conformance/expected/refusals/s4-table-e16.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-table-e16.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-table-over.json b/wai/vector-conformance/expected/refusals/s4-table-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-table-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-tb-before-record.json b/wai/vector-conformance/expected/refusals/s4-tb-before-record.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-tb-before-record.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-tb-not-divisible.json b/wai/vector-conformance/expected/refusals/s4-tb-not-divisible.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-tb-not-divisible.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-tb-over.json b/wai/vector-conformance/expected/refusals/s4-tb-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-tb-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-tb-zero.json b/wai/vector-conformance/expected/refusals/s4-tb-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-tb-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-dir.json b/wai/vector-conformance/expected/refusals/s4-text-dir.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-dir.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-lang-len-over.json b/wai/vector-conformance/expected/refusals/s4-text-lang-len-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-lang-len-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-lang-len-zero.json b/wai/vector-conformance/expected/refusals/s4-text-lang-len-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-lang-len-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-mode.json b/wai/vector-conformance/expected/refusals/s4-text-mode.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-mode.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-purpose-zero.json b/wai/vector-conformance/expected/refusals/s4-text-purpose-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-purpose-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-ruby-len-zero.json b/wai/vector-conformance/expected/refusals/s4-text-ruby-len-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-ruby-len-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-ruby-over.json b/wai/vector-conformance/expected/refusals/s4-text-ruby-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-ruby-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-ruby-start.json b/wai/vector-conformance/expected/refusals/s4-text-ruby-start.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-ruby-start.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-str-len-over.json b/wai/vector-conformance/expected/refusals/s4-text-str-len-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-str-len-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-text-str-len-zero.json b/wai/vector-conformance/expected/refusals/s4-text-str-len-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-text-str-len-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-track-kind-four.json b/wai/vector-conformance/expected/refusals/s4-track-kind-four.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-track-kind-four.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-track-kind-zero.json b/wai/vector-conformance/expected/refusals/s4-track-kind-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-track-kind-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-track-n-keys-over.json b/wai/vector-conformance/expected/refusals/s4-track-n-keys-over.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-track-n-keys-over.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-track-n-keys-zero.json b/wai/vector-conformance/expected/refusals/s4-track-n-keys-zero.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-track-n-keys-zero.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s4-track-zero.json b/wai/vector-conformance/expected/refusals/s4-track-zero.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s4-track-zero.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-clusters-sum.json b/wai/vector-conformance/expected/refusals/s5a-clusters-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-clusters-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-glyphs-sum.json b/wai/vector-conformance/expected/refusals/s5a-glyphs-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-glyphs-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-held-sum.json b/wai/vector-conformance/expected/refusals/s5a-held-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-held-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-inline-sum.json b/wai/vector-conformance/expected/refusals/s5a-inline-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-inline-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-path-contours-sum.json b/wai/vector-conformance/expected/refusals/s5a-path-contours-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-path-contours-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-path-points-sum.json b/wai/vector-conformance/expected/refusals/s5a-path-points-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-path-points-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-strings-sum.json b/wai/vector-conformance/expected/refusals/s5a-strings-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-strings-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-sum-before-typing.json b/wai/vector-conformance/expected/refusals/s5a-sum-before-typing.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-sum-before-typing.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5a-track-keys-sum.json b/wai/vector-conformance/expected/refusals/s5a-track-keys-sum.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5a-track-keys-sum.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5b-keys-order.json b/wai/vector-conformance/expected/refusals/s5b-keys-order.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5b-keys-order.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5b-last-key-interp.json b/wai/vector-conformance/expected/refusals/s5b-last-key-interp.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5b-last-key-interp.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5b-rates-order.json b/wai/vector-conformance/expected/refusals/s5b-rates-order.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5b-rates-order.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5b-sizes-equal.json b/wai/vector-conformance/expected/refusals/s5b-sizes-equal.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5b-sizes-equal.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5b-sizes-order.json b/wai/vector-conformance/expected/refusals/s5b-sizes-order.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5b-sizes-order.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5c-matrix-key.json b/wai/vector-conformance/expected/refusals/s5c-matrix-key.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5c-matrix-key.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s5c-opacity-key.json b/wai/vector-conformance/expected/refusals/s5c-opacity-key.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5c-opacity-key.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s5c-slot-kind.json b/wai/vector-conformance/expected/refusals/s5c-slot-kind.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5c-slot-kind.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s5c-translation-key.json b/wai/vector-conformance/expected/refusals/s5c-translation-key.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5c-translation-key.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s5c-typing-before-groups.json b/wai/vector-conformance/expected/refusals/s5c-typing-before-groups.json new file mode 100644 index 000000000..03af551ba --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5c-typing-before-groups.json @@ -0,0 +1 @@ +{"code":"field_range"} diff --git a/wai/vector-conformance/expected/refusals/s5d-depth-five.json b/wai/vector-conformance/expected/refusals/s5d-depth-five.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5d-depth-five.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5d-end-first.json b/wai/vector-conformance/expected/refusals/s5d-end-first.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5d-end-first.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5d-open.json b/wai/vector-conformance/expected/refusals/s5d-open.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5d-open.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5e-box.json b/wai/vector-conformance/expected/refusals/s5e-box.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5e-box.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5e-ends-last.json b/wai/vector-conformance/expected/refusals/s5e-ends-last.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5e-ends-last.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5e-ends-order.json b/wai/vector-conformance/expected/refusals/s5e-ends-order.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5e-ends-order.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5e-grammar-two-quads.json b/wai/vector-conformance/expected/refusals/s5e-grammar-two-quads.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5e-grammar-two-quads.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5e-grammar.json b/wai/vector-conformance/expected/refusals/s5e-grammar.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5e-grammar.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-c0.json b/wai/vector-conformance/expected/refusals/s5f-string-c0.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-c0.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-c1.json b/wai/vector-conformance/expected/refusals/s5f-string-c1.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-c1.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-del.json b/wai/vector-conformance/expected/refusals/s5f-string-del.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-del.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-newline.json b/wai/vector-conformance/expected/refusals/s5f-string-newline.json new file mode 100644 index 000000000..c35df09c9 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-newline.json @@ -0,0 +1 @@ +{"blocks":["b966fa6063be058b0e41edf2b535cda77995e188b7ee9070c1eed32371567fac"],"code":"accepted","instr":"70b2e542e164775fa859a120881b44f82abaf8ed3c160d4ea5ba5a7cb31c349c","rates":[[25,1,4800,0,24]],"sizes":[[640,360,498549]],"text_hash":"8ba4d3c23f5e960740931f4316089cefa54b3205fbe264ff7de77b9ccb3020fa"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-overlong.json b/wai/vector-conformance/expected/refusals/s5f-string-overlong.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-overlong.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-surrogate.json b/wai/vector-conformance/expected/refusals/s5f-string-surrogate.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-surrogate.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-string-utf8.json b/wai/vector-conformance/expected/refusals/s5f-string-utf8.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-string-utf8.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-tag-double-hyphen.json b/wai/vector-conformance/expected/refusals/s5f-tag-double-hyphen.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-tag-double-hyphen.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-tag-leading-hyphen.json b/wai/vector-conformance/expected/refusals/s5f-tag-leading-hyphen.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-tag-leading-hyphen.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-tag-trailing-hyphen.json b/wai/vector-conformance/expected/refusals/s5f-tag-trailing-hyphen.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-tag-trailing-hyphen.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s5f-tag-underscore.json b/wai/vector-conformance/expected/refusals/s5f-tag-underscore.json new file mode 100644 index 000000000..aca015774 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s5f-tag-underscore.json @@ -0,0 +1 @@ +{"code":"payload_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s6-held-malformed.json b/wai/vector-conformance/expected/refusals/s6-held-malformed.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-held-malformed.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s6-held-not-held.json b/wai/vector-conformance/expected/refusals/s6-held-not-held.json new file mode 100644 index 000000000..006f619fb --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-held-not-held.json @@ -0,0 +1 @@ +{"code":"outline_not_held"} diff --git a/wai/vector-conformance/expected/refusals/s6-held-one-byte-longer.json b/wai/vector-conformance/expected/refusals/s6-held-one-byte-longer.json new file mode 100644 index 000000000..0d47f91ff --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-held-one-byte-longer.json @@ -0,0 +1 @@ +{"code":"outline_mismatch"} diff --git a/wai/vector-conformance/expected/refusals/s6-held-shorter.json b/wai/vector-conformance/expected/refusals/s6-held-shorter.json new file mode 100644 index 000000000..0d47f91ff --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-held-shorter.json @@ -0,0 +1 @@ +{"code":"outline_mismatch"} diff --git a/wai/vector-conformance/expected/refusals/s6-inline-hash.json b/wai/vector-conformance/expected/refusals/s6-inline-hash.json new file mode 100644 index 000000000..0d47f91ff --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-inline-hash.json @@ -0,0 +1 @@ +{"code":"outline_mismatch"} diff --git a/wai/vector-conformance/expected/refusals/s6-inline-malformed.json b/wai/vector-conformance/expected/refusals/s6-inline-malformed.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-inline-malformed.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s6-inline-points-limit.json b/wai/vector-conformance/expected/refusals/s6-inline-points-limit.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-inline-points-limit.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/s6-inline-too-large.json b/wai/vector-conformance/expected/refusals/s6-inline-too-large.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-inline-too-large.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/s6-order-held-first.json b/wai/vector-conformance/expected/refusals/s6-order-held-first.json new file mode 100644 index 000000000..006f619fb --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-order-held-first.json @@ -0,0 +1 @@ +{"code":"outline_not_held"} diff --git a/wai/vector-conformance/expected/refusals/s6-order-inline-first.json b/wai/vector-conformance/expected/refusals/s6-order-inline-first.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s6-order-inline-first.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/s7-before-geometry.json b/wai/vector-conformance/expected/refusals/s7-before-geometry.json new file mode 100644 index 000000000..29f203433 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s7-before-geometry.json @@ -0,0 +1 @@ +{"code":"glyph_missing"} diff --git a/wai/vector-conformance/expected/refusals/s7-glyph-missing.json b/wai/vector-conformance/expected/refusals/s7-glyph-missing.json new file mode 100644 index 000000000..29f203433 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/s7-glyph-missing.json @@ -0,0 +1 @@ +{"code":"glyph_missing"} diff --git a/wai/vector-conformance/expected/refusals/wos1-box-empty-glyph.json b/wai/vector-conformance/expected/refusals/wos1-box-empty-glyph.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-box-empty-glyph.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-box.json b/wai/vector-conformance/expected/refusals/wos1-box.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-box.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-cap-before-length.json b/wai/vector-conformance/expected/refusals/wos1-cap-before-length.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-cap-before-length.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/wos1-contours-cap.json b/wai/vector-conformance/expected/refusals/wos1-contours-cap.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-contours-cap.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/wos1-contours-over-points.json b/wai/vector-conformance/expected/refusals/wos1-contours-over-points.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-contours-over-points.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-ends-last.json b/wai/vector-conformance/expected/refusals/wos1-ends-last.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-ends-last.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-ends-order.json b/wai/vector-conformance/expected/refusals/wos1-ends-order.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-ends-order.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-flags.json b/wai/vector-conformance/expected/refusals/wos1-flags.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-flags.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-format.json b/wai/vector-conformance/expected/refusals/wos1-format.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-format.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-gid-order.json b/wai/vector-conformance/expected/refusals/wos1-gid-order.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-gid-order.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-glyph-zero.json b/wai/vector-conformance/expected/refusals/wos1-glyph-zero.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-glyph-zero.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-grammar-one-point-control.json b/wai/vector-conformance/expected/refusals/wos1-grammar-one-point-control.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-grammar-one-point-control.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-grammar.json b/wai/vector-conformance/expected/refusals/wos1-grammar.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-grammar.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-length.json b/wai/vector-conformance/expected/refusals/wos1-length.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-length.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-magic.json b/wai/vector-conformance/expected/refusals/wos1-magic.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-magic.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-n-glyphs-cap.json b/wai/vector-conformance/expected/refusals/wos1-n-glyphs-cap.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-n-glyphs-cap.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/wos1-n-glyphs-zero.json b/wai/vector-conformance/expected/refusals/wos1-n-glyphs-zero.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-n-glyphs-zero.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-notes-cap.json b/wai/vector-conformance/expected/refusals/wos1-notes-cap.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-notes-cap.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/wos1-notes-utf8.json b/wai/vector-conformance/expected/refusals/wos1-notes-utf8.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-notes-utf8.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-notes-zero.json b/wai/vector-conformance/expected/refusals/wos1-notes-zero.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-notes-zero.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-16383.json b/wai/vector-conformance/expected/refusals/wos1-points-16383.json new file mode 100644 index 000000000..4b446d38b --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-16383.json @@ -0,0 +1 @@ +{"code":"accepted","glyphs":1,"points":16383,"sha256":"0c9126523393a6dc4af5b3010c1421988227a78177e8ef88459da4fdc3e839c5"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-16384.json b/wai/vector-conformance/expected/refusals/wos1-points-16384.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-16384.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-cap.json b/wai/vector-conformance/expected/refusals/wos1-points-cap.json new file mode 100644 index 000000000..3ea4e21b8 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-cap.json @@ -0,0 +1 @@ +{"code":"too_large"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-limit-before-gid-order.json b/wai/vector-conformance/expected/refusals/wos1-points-limit-before-gid-order.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-limit-before-gid-order.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-limit-before-zero.json b/wai/vector-conformance/expected/refusals/wos1-points-limit-before-zero.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-limit-before-zero.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-limit.json b/wai/vector-conformance/expected/refusals/wos1-points-limit.json new file mode 100644 index 000000000..3c5ef5a5c --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-limit.json @@ -0,0 +1 @@ +{"code":"points_limit"} diff --git a/wai/vector-conformance/expected/refusals/wos1-points-no-contour.json b/wai/vector-conformance/expected/refusals/wos1-points-no-contour.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-points-no-contour.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-set-a.json b/wai/vector-conformance/expected/refusals/wos1-set-a.json new file mode 100644 index 000000000..9382bf9da --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-set-a.json @@ -0,0 +1 @@ +{"code":"accepted","glyphs":8,"points":33,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} diff --git a/wai/vector-conformance/expected/refusals/wos1-short.json b/wai/vector-conformance/expected/refusals/wos1-short.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-short.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-sums.json b/wai/vector-conformance/expected/refusals/wos1-sums.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-sums.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-tag.json b/wai/vector-conformance/expected/refusals/wos1-tag.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-tag.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-zero-before-points-limit.json b/wai/vector-conformance/expected/refusals/wos1-zero-before-points-limit.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-zero-before-points-limit.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-zero-glyphs-before-points-cap.json b/wai/vector-conformance/expected/refusals/wos1-zero-glyphs-before-points-cap.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-zero-glyphs-before-points-cap.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/expected/refusals/wos1-zero.json b/wai/vector-conformance/expected/refusals/wos1-zero.json new file mode 100644 index 000000000..5304d0cb6 --- /dev/null +++ b/wai/vector-conformance/expected/refusals/wos1-zero.json @@ -0,0 +1 @@ +{"code":"outline_malformed"} diff --git a/wai/vector-conformance/sets/synthetic-a.wos1 b/wai/vector-conformance/sets/synthetic-a.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..4881114df32fb60f289fe4127cdb8aa2462f16ab GIT binary patch literal 554 zcmZurJx{|h5IrX;g@_+<>}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic}=dk#q0fz4v^3ado7CYd3yy(6;a@vwuo~f{f=iEZ1)=O!%-g;)02k`E8sr?riZL z#_1N`VI1>$Cbh>%{DJ*fUGYny%O~R;LA6j4%-3=qW80a8Ly`T?dg|mGdg}5Wp3`_S z9EpYOsUkc3jLT}2Y!s>no{2qoTrcYBBf)h4D~YDjJ`%BuGFfX&UJ9!&Tgkh@lrtLo zg$WZ1y6Ts?w~ec4cu$608K}m)1wNL#|3Fo+4%?qc=5g%o49C{ZnrZ3tsjkSd@^oHS z6Y3ui4)gqaqCMIsOtm5O6xbowai{(27ZJRtMY+Vfi)Q~dKS(izfB*mh literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/sets/synthetic-b.wos1 b/wai/vector-conformance/sets/synthetic-b.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..100a5cdb29cde18c4e7d6f4ed46a0aae6ac4668c GIT binary patch literal 374 zcmY*T%T9za6ukwFhK;{)SF-{#vY&+s8xs>38eKEY9ccpXq%9hL$A9u4{00+@rwkk0 zl+(j`+`c|O-6|sbP8FrV8=Qz=IB_ZL3t&a{`~ytEuUEcFh%UjSKkAXEbVUgmR5zx3`haS*)-U4 z#*_IxzdStNNFl^mE=3N!!b$jvla|Cj1JxhlZ_omqpQ7YE9)YMBDm3O-o3JA zuOhd!pXgng>Wy`Do=y-5IvuN yEzz~wSc=Kv`RIZ{{q(=Sy{Sa#Hl-yZts{&<$u(%XR5 zY?{EFNT;yZU@HEdG3aPOb7rWE9u;Zaib9i>c}#O%(v(L9CHQoR8&TSNPH~at=q`gC z$F)2g;98as%6??Rej1bJ%=z^w?osPTdo~Oo_fmsdS@cs)XsBQ&n_5w)8Vf<>w4Rxi o>4zsd+jzG?j$3NOy_7nkoO1|W73@e+Lrq+!+@zUCF53?O0{_Ry{{R30 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/cluster-empty.json b/wai/vector-conformance/vectors/canonical/cluster-empty.json new file mode 100644 index 000000000..eece020a2 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/cluster-empty.json @@ -0,0 +1,40 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":1,"n_tracks":0,"n_paths":0,"n_items":1,"n_keys":0,"n_glyphs":3,"n_clusters":4,"path_contours":0,"path_points":0,"strings_len":7,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":245664} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":5} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":3,"n_clusters":4,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,0,9000], +[1,0,4096,9000], +[1,0,8192,9000] +], +"clusters":[ +[1,0,0,2], +[1,0,2,1], +[0,0,3,0], +[1,0,3,2] +], +"strings":"frété", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/cluster-empty.wvg1 b/wai/vector-conformance/vectors/canonical/cluster-empty.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..84e163daebd46cf828eabc3507ea4a88171df34e GIT binary patch literal 853 zcmZuuziSjh6n?w2$?0Mtf`yHYSSWILsD)T0g%A+oL_tl`uDf%0i+8(WW==VhB1MYp z)Y49{%3q<7#xjTs79!EsGL5J4{NBuMxC7tpym>#r@6GJm>g{U*5xx7!+MnBDH-Hc? z7O#l}?8rsDs^Pd2&IDj`@9VdM&cWtB-dywK#`E6h!H3TFw==K4?_7HM>&@MR&d<%y zj}E_{&3=42I=}ROB4{3L0lmywiI}qcSr=(CC%&qh_438(+^30-Z8>A3oY}a(I$<93 zah$n1*VcQxc5ip>-UIhkbb|P!3)p;q!v3G|^YL?KG#VcQFT~<{_FG5@Z^c#{2je0;`47qLm|89IS`ajvyn%7#cJl;YIi(1AL5mvEMA<1#NiDecz)MR*4) zlD=9t!@_oz&C^B_n{uF2wcJsK(uq}>d_0uTlDzR$rMA@4A4VcC+q&$_cB%V=USi^2 zo~iFZrs~XpvSL66$H#f2z*j`>JX_N($Yn?*pg|u9u)kbM@zz^p!oAQp8$UA6* cSq4R>G+am$;@xhTnKK-*NRc9) zv9uGc@>eLNu?(Vug-EouOk*^j-<#c)JMf!*Gw+-C-uK?l%JQA79ud9$AbWXk`h5=| zS%PvW3gC;?Xu!Gb*Q`9H_SKt!7C@y=Omd!Fe?Hhac;DOndgkS~t&1;yzP@|V`?2xq z(czb~>G#ja=Wf261T-r)huZ0WLB+~h=V>wnBm?!Vmo8NPX`+8VPx)1DJ)?9MU;2sP z)qA^kZ+GS11NS_1g5;y~FgZWM{s(!o5P_7oj}D>dV@ba74gvw<(>w&1->ld-mJs;M5=Ai8^@~aGooZv=TBY?KdDLb5kA<)uI{a zwy$iKwBpDVBb}(lp30SutxEavnAhX1^;9Lc&|Dsd5$CQhhTJXma5RWbG{_Q_qw>~T zob*-eTKh^AJ?v+Oi;*2K literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/cluster-past-string.json b/wai/vector-conformance/vectors/canonical/cluster-past-string.json new file mode 100644 index 000000000..b44283145 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/cluster-past-string.json @@ -0,0 +1,39 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":1,"n_tracks":0,"n_paths":0,"n_items":1,"n_keys":0,"n_glyphs":3,"n_clusters":3,"path_contours":0,"path_points":0,"strings_len":7,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":245664} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":5} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":3,"n_clusters":3,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,0,9000], +[1,0,4096,9000], +[1,0,8192,9000] +], +"clusters":[ +[1,0,0,2], +[1,0,2,1], +[1,0,3,3] +], +"strings":"frété", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/cluster-past-string.wvg1 b/wai/vector-conformance/vectors/canonical/cluster-past-string.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..bec731a063875ab42198850edcebcaadf2fe65fd GIT binary patch literal 841 zcmZutziSjh6n^_7IbAG7u&|LQ7K+>*Y9SV;5CjoU6x1Z`x;uBbc()s7=9D8ADN>|U zOFO|Te}zIC%OEOPh(ueEZ@8o5YgKYve)NE*be}b zPf+hf5o}o=4Hy?f&+1chU%iRw6sY9Ml9)$Vo(a*`{{8de>1*#M5zUJ&Aa}N2G-Y+Ki!_-7f&t&_`Lk2|IMF|wXKchuHHr79*#3=O zy|Zn1wpZ@lbK{{SBtM|xRK8Y9Jfg^%{mdD`oOz&R+mlix< z1edlvj)I9kL2noHmytB^#qJRi@&GA}ZR^0v)OS*xIHKbG8Z9q!;rZOF>B{ME< zU)dsSrHQFVI#WwMRVtlYmGi?fKS_($W0l!TbA1?wpS!vma<|gM(I7R+pvY8-%o~|?Tblrzh4-xMs`q?ijA^Ra;a14qGT%(TCG*4fc$t~v(2|G!|$XGdKs0u(#TO< USK*EnHLA(WN}Hl88D-naUyr=Dv;Y7A literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/clusters-sum.json b/wai/vector-conformance/vectors/canonical/clusters-sum.json new file mode 100644 index 000000000..bd31b5b12 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/clusters-sum.json @@ -0,0 +1,39 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":1,"n_tracks":0,"n_paths":0,"n_items":1,"n_keys":0,"n_glyphs":3,"n_clusters":3,"path_contours":0,"path_points":0,"strings_len":7,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":245664} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":5} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":3,"n_clusters":3,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,0,9000], +[1,0,4096,9000], +[1,0,8192,9000] +], +"clusters":[ +[1,0,0,2], +[1,0,2,1], +[2,0,3,2] +], +"strings":"frété", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/clusters-sum.wvg1 b/wai/vector-conformance/vectors/canonical/clusters-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..fb20d926bfba7e7d624b9df76227a7a20100c0ce GIT binary patch literal 841 zcmZutziSjh6n^_7IbAG7u&|LQ7D~7~)IuywAqYV@Q7|TH*WJ0h#k<`wGp8J}NRc94 zw6qhf@>eLNu?!&*EJPAp%QQyg`Mud&xdY$s%zNLw_kHipEH5qG^oZ!=zU-x6_q!g9 zz%3TRqv2HeSh!5EdZ&eCYgPzz!@8v%UQ2iF+P8L-NxVEb#|e|1){A5Q&sFPmZDOi9SJZ7w<1mQo|Rzp#$(>(iq$3iIXYMq&c<1>a6bF8ByJP{EIdMw*jum zy`|1;h4)WgvA5!n8D2^_6M00i*WRn&J_qOi_)gTxyM&7zP0C7>NoltRDVdw{xUc5T zFt=T0v!oG6rWoi%&39C;bZk}1&xZUm&KfUNVhhcsGmJd9bO32%W}m=StvQ`SUStuN`+Rdg~=d4oYrje1Ix%eX@gk?d8#xx WipwtClBP!0c}Z!L6*;4AGx`gU#J02m literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/clusters.json b/wai/vector-conformance/vectors/canonical/clusters.json new file mode 100644 index 000000000..afdc929d2 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/clusters.json @@ -0,0 +1,39 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":1,"n_tracks":0,"n_paths":0,"n_items":1,"n_keys":0,"n_glyphs":3,"n_clusters":3,"path_contours":0,"path_points":0,"strings_len":7,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":245664} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":5} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":3,"n_clusters":3,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,0,9000], +[1,0,4096,9000], +[1,0,8192,9000] +], +"clusters":[ +[1,0,0,2], +[1,0,2,1], +[1,0,3,2] +], +"strings":"frété", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/clusters.wvg1 b/wai/vector-conformance/vectors/canonical/clusters.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..11a10e45fe847d9c83bb38127e601f53d8333a5f GIT binary patch literal 841 zcmZutziSjh6n^_7IbAG7u&|LQ7D~7~)IuywAqYV@Q7|TH*WJ0h#k<`wGp8J}NRc94 zw6qhf@>eLNu?!&*EJPAp%QQyg`Mud&xdXr1nfJbV?|tv>EH5qG^oZ!=zMQ39_q!fI zvIONx6u_5Vp$2EpuUKiN_T7hoE`ds&Y{_|kd#ks0xYt?#cH!;O#o~*RPKK^F;rAp74OC5<>T#Xu)&zN2!bW2;hrHsqIa)_9>3TWBtgVZ^zui$1pt-5>N~6ZNu0<*2;3 z8Yf-VxYfK7MT_0ca51pGELUulg_0{BOJ_M-$R{IZ7|CqPnAZE W;<5|3q^VJLUQ*g*Mb2p3jQ#?Rhqki- literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/every-table.json b/wai/vector-conformance/vectors/canonical/every-table.json new file mode 100644 index 000000000..d50991321 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/every-table.json @@ -0,0 +1,133 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":3,"n_rates":3,"n_sets":2,"n_tables":2,"n_paints":4,"n_texts":6,"n_tracks":5,"n_paths":3,"n_items":11,"n_keys":10,"n_glyphs":17,"n_clusters":18,"path_contours":4,"path_points":17,"strings_len":56,"inline_len":554,"held_len":374,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":320,"h":180,"cost":362339}, +{"w":640,"h":360,"cost":1111403}, +{"w":1280,"h":720,"cost":4090170} +], +"rates":[ +{"num":24000,"den":1001}, +{"num":25,"den":1}, +{"num":60,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"}, +{"carriage":0,"zero@1":[0,0,0],"length":374,"sha256":"32c21dbbd02fc491367cd7c5bd3727141d810aaecd16204ccd08b71819372b7d"} +], +"tables":[ +[0,300,1200,2700,4800,7500,10800,14700,19200,24300,30000,36300,43200,50700,58800,62000,65536], +[0,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536,65536] +], +"paints":[ +[30,60,200,255], +[20,160,60,255], +[200,30,30,255], +[128,128,128,128] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,-25600,2,[0,0,0]], +[60000,0,0,[0,0,0]], +[0,0,1,[0,0,0]], +[24000,255,0,[0,0,0]], +[96000,255,3,[0,0,0]], +[120000,0,0,[0,0,0]], +[0,0,2,[0,0,0]], +[120000,6554,0,[0,0,0]], +[0,2560,0,[0,0,0]], +[0,200,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":30000,"ymax":20000}, +{"n_contours":2,"n_points":8,"zero@4":0,"xmin":0,"ymin":-2000,"xmax":9000,"ymax":5000}, +{"n_contours":1,"n_points":5,"zero@4":0,"xmin":-31271,"ymin":5000,"xmax":28820,"ymax":32135} +], +"path_ends":[3,3,7,4], +"path_points":[ +[0,0,0], +[30000,0,0], +[30000,20000,0], +[0,20000,0], +[0,0,0], +[3000,0,1], +[3000,3000,0], +[0,3000,1], +[4000,0,0], +[7000,-2000,2], +[9000,5000,2], +[6000,3000,0], +[20000,5000,0], +[28820,32135,0], +[5735,15365,0], +[-31271,15365,0], +[11180,32135,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":1,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":5}, +{"purpose":3,"dir":0,"lang_len":5,"mode":0,"group":1,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":9}, +{"purpose":5,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":6}, +{"purpose":6,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":3,"ruby_start":0,"ruby_len":6,"str_len":9}, +{"purpose":7,"dir":1,"lang_len":3,"mode":1,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":3}, +{"purpose":9,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":8} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":262144,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":5,"n_clusters":5,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":1,"zero@10":0,"n_glyphs":4,"n_clusters":5,"t_on":0,"t_off":120000,"unit_scale":786432,"m00":65535,"m01":2,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":3,"op":4,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":2,"text":2,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":2,"text":3,"zero@10":0,"n_glyphs":3,"n_clusters":3,"t_on":0,"t_off":120000,"unit_scale":196608,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":4,"zero@10":0,"n_glyphs":3,"n_clusters":3,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":1,"zero@2":0,"ref":1,"paint":3,"text":5,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":12000,"t_off":108000,"unit_scale":131072,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":2,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":196608,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,8000,12800], +[2,0,12096,12800], +[3,0,16192,12800], +[4,0,20288,12800], +[5,0,24384,12800], +[1,0,8000,30000], +[3,0,16000,30000], +[5,0,24000,30000], +[1,0,32000,30000], +[2,0,40000,40000], +[3,0,52000,40000], +[5,0,40000,30000], +[5,0,46000,30000], +[5,0,52000,30000], +[1,0,100000,20000], +[3,0,100000,20000], +[5,0,100000,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,2,1], +[1,0,3,1], +[1,0,4,1], +[1,0,0,3], +[1,0,3,1], +[1,0,4,2], +[1,0,6,0], +[0,0,6,3], +[1,0,0,3], +[1,0,3,3], +[1,0,0,3], +[1,0,3,3], +[1,0,6,3], +[1,0,0,1], +[1,0,1,1], +[1,0,2,1] +], +"strings":"enTITLEen-GBSub-titleja漢字jaかんじundABCenWordmark", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/every-table.wvg1 b/wai/vector-conformance/vectors/canonical/every-table.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..473f5d14d87d8f06a81f91099449c8d0b3811743 GIT binary patch literal 2339 zcmbVNU1%It6h1SvyJ@xoZBwg760i8s(kAJehqg*uw^b>{H5D40y!f--ohH+4X2Z^G zOK1y;RJ)*}MZq8X5EQ|ODg^}#Dg;ppXd#F{^g*AF87|F z`lpU)n_|9>ysEbqHvOt{X;9XZGAQq+#)CIb^0IwSzFgE#Icuk>pkRXoqYBg z+AT`*(ElnMZwDV{W6UqWa)hZNR%tF^1FTG1k9ZoAWWk@S9VaJ6O|>ta_rKO}`)MvnGynDLago459j22a-}hj?!K@3tY<`~RoVYOm zc)m;5pS=xqy<`;0ZZtY8%id#j)|%aIbk>o5%;>CwvAi3^Pi`|hF}%R^>;B-AMP2is zL<}bJ>NBHjPWXtSe)^pSofykA{gk8c9%HReyw!Cs*p!PWb6X$dtrymaN8pz%6huu4O?5XbSj)S=5AISgs!D|=Zdg(xZ ze(LG@CtjGJdbt`Fx9_;u4+qPY;#j^iI=Fj}{^R3!j(7idOvSmYP*&9#t^A6R~3c~TE?7)*?%c16<| zACpTiVSQcBmOB0cANpO6d3u34L<-`ZT;jf~8te?YjR>bG@R1%G#`DgRKV0Rt{po5_ zO|Lh!ro#v`gO$o$3#eGPg!wUlYcvtYBYqqdy7TF%T&)!Rt;2rkSMsr6RQo2>p?uJN z&@aU0iZUWn*jM{2}J6#Nj8+sE^T5x={)CzDPOj0BM?SL0F;`YQ5c zFzL_+br7nUh>Aa6jsnn6T+7*`cEt+&nmR%)cqRM_Vti$?s2r0v$db+GT(=?5bh{O4F0Qo<7%c}*q@rnPqB|n^7v`?F{qar_Q21_9PQS?7gCMC$Uaxdbu4JiYB;hqE{5jR zihQgtE{~}$ZhfPz&?Jl{BhiCR=()ooiVEQL6RA qG)Zfj#?yGdHP zfp2qe2OE{X6sCAx^(^GiCcR%j_;86c!YE5H&u+eIukLL&*S?&8x4%C9=KK5md(CgF z+fNR6FD3^&N0(KD8RNP{xtRN=Nf@3m*IDA7#?#|P-)Z=Tv3~*J z+_cjt{@dFlA0Ieh)Hn^|{q2*UbMNBA$M#3T8ITvQ@RIX0uYZ|{47iX$e{jeX_4A?$28j{O?gyMf=_$+B1&t|DK4@c-C>aH zxSVGlT+Z@Nw;h?VoyMfOb8aPyTU5JIzZQn`t<+%FE!wFjG*mE?Z9S$=H5P)%X(cl$ o)Avqt*706}T({JQwRCktIrk8{DcF#qhN`$gxk)pPJhmSG2Eq&1ZvX%Q literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.json b/wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.json new file mode 100644 index 000000000..5ace7d452 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.json @@ -0,0 +1,43 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":3,"n_tracks":0,"n_paths":0,"n_items":3,"n_keys":0,"n_glyphs":3,"n_clusters":3,"path_contours":0,"path_points":0,"strings_len":9,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":245472} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":1,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":1}, +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":1}, +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":1,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":1} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":1,"n_clusters":1,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":1,"zero@10":0,"n_glyphs":1,"n_clusters":1,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":2,"zero@10":0,"n_glyphs":1,"n_clusters":1,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,5000,10000], +[1,0,5000,15000], +[1,0,5000,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,0,1], +[1,0,0,1] +], +"strings":"enAenAenA", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.wvg1 b/wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..a1dcffabff2cffb925cd26d64d90181efe7c016e GIT binary patch literal 979 zcmb7BziSjh6n?Y2$(hAM6bqX$Rsp#?)Ivm(A|QxxQ9(`8uDg@F#k<+Cv!@)fNRi^Y zXcue$53#fiqJo8Jw6#p*X*}OIlhF%W=-Zt)@5lGP_hx2g`Pv0RL@!=LyL~h02o@3) z+L+U1J#Qm1!|PmNA-@!AKRyrX3`f9-12>1gY zev1!fu1dv$KuiVK!(SE1eVm&+k~}j z8DLH@Decyn3UiZAdTPN8bk$K+o;H%$6#X()3vH!UnN%v1_XhG|k~bcxv?@yJHX}JN z*UF+N*NU>&?oCAfng1*xkA6wFDap z@@>xTWTVnYVS?9H&q97~=>53u()r{O7cxbhxA{tq6y|AGf^{{qpu zN%sxlZ{7ao%Ngfm8aD&H-+iU0-8=tq*8V6uLwM;5FPwY4{$v<3;6g(E!67Sn`~Z)* z!3Ce|qjA9T*hqbhV|=6%Kh7}*Ep37$@bfhXI~DNxRN*IJ9YhIA5az8vurw|QacTr* zt}1Q~sVW|Qqcz`d94>$YIME319$T2JLYxCVdu$ux#gQldv)?^SYUypkdbSNP zXPA_BDolmBNk<(uWqP`3sUnSQQE0Mm9;>OQ(khP%mB_`Od>*B>XDTkTT)M+ZuFIu7 z>&T@n?{wRd3EOF`G!Oz!k literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/groups.json b/wai/vector-conformance/vectors/canonical/groups.json new file mode 100644 index 000000000..ef063e13d --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/groups.json @@ -0,0 +1,68 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":2,"n_texts":0,"n_tracks":3,"n_paths":4,"n_items":10,"n_keys":3,"n_glyphs":0,"n_clusters":0,"path_contours":4,"path_points":17,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":1174940} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[20,160,60,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,256,0,[0,0,0]], +[0,250,0,[0,0,0]], +[0,128,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":2560,"ymax":2560}, +{"n_contours":1,"n_points":5,"zero@4":0,"xmin":63,"ymin":0,"xmax":2497,"ymax":2315}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":0,"xmax":2816,"ymax":2560}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":1280,"ymin":0,"xmax":3840,"ymax":2560} +], +"path_ends":[3,4,3,3], +"path_points":[ +[0,0,0], +[2560,0,0], +[2560,2560,0], +[0,2560,0], +[1280,0,0], +[2032,2315,0], +[63,885,0], +[2497,885,0], +[528,2315,0], +[256,0,0], +[2816,0,0], +[2816,2560,0], +[256,2560,0], +[1280,0,0], +[3840,0,0], +[3840,2560,0], +[1280,2560,0] +], +"texts":[], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":1,"zero@2":0,"ref":1,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":0,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":2,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":2,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":131072,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":3,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/groups.wvg1 b/wai/vector-conformance/vectors/canonical/groups.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ca545c377abdaa24614ce459aca7de43119f8351 GIT binary patch literal 801 zcmcIiu?@mN4D=^KD4!xkqM^wS^hhb$09IfDdIq6j6zCX$HIS%jo;y3AL;(p22}iO2 z&i;G*lkH}`bRu%T(OWzuJLdos;8Zg48ksfA5UL19k$aE#N*3U$c&+O&Kdl0_h{rD| zBXuG2Y$L;=T|4y9nHTS5qOgI#&lyrYW}F5iwLzsG(;}Bf_9^7x zW(lBn3N;uc3E}kIk{o0SRRu7>NSoPZI%O>r0((=#!ZMMFm*3Y@Yp6$!A&wu*c=NpA qXvxQZjP3VWb=>!^KkSFQtiGEg9`+^vyWW0M_S!cxzJHtfxBg#@m9shVpP7LPW;B>aw~rZW vJH)MQ4F6F8L@UV74q*lc1wV*eJCq@8u(&aT4N?sfL&qQ&fW%Vs9Gx5i`8q4W literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/index.json b/wai/vector-conformance/vectors/canonical/index.json new file mode 100644 index 000000000..a35241c8d --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/index.json @@ -0,0 +1,33 @@ +{ +"block-unreferenced":"rule 4: a block no run or path names -> payload_malformed", +"cluster-empty":"rule 5: a cluster with no glyph and no byte -> payload_malformed", +"cluster-mid-character":"rule 5: a cluster ending inside a character -> payload_malformed", +"cluster-past-string":"rule 5: a cluster past its block's string -> payload_malformed", +"clusters":"rule 5: clusters on character boundaries covering a run: accepted", +"clusters-sum":"rule 5: glyph counts that do not sum to n_glyphs -> payload_malformed", +"every-table":"every table in use: inline and held sets, easing tables, all three track kinds, curves, groups with a clip, ruby, a vertical block, inserted and zero-glyph clusters: accepted", +"group-not-contiguous":"rule 4: groups [1, 2, 1] -> payload_malformed", +"group-number-skips":"rule 4: the first group is numbered 2 -> payload_malformed", +"group-split-by-ungrouped":"rule 4: groups [1, 0, 1] -> payload_malformed", +"groups":"groups nested four deep, clips under both rules, translations and opacities on groups: accepted", +"groups-in-order":"rule 4: group numbers in order of first use, each group contiguous: accepted", +"held":"a run from a held set, obtained by its SHA-256 and exact length: accepted", +"minimal":"one path fill, the smallest payload: accepted", +"paint-duplicate":"rule 3: two equal paints -> payload_malformed", +"paint-first-use":"rule 2: paints first referenced out of order -> payload_malformed", +"paint-unreferenced":"rule 2: a paint no item references -> payload_malformed", +"path-alternative-decorative":"step 5(h): a path whose text alternative is a decorative block -> payload_malformed", +"path-duplicate":"rule 3: two paths with equal records, ends and points -> payload_malformed", +"ruby":"rule 4: a ruby block annotating the first character of an earlier block: accepted", +"ruby-mid-character":"rule 4: a ruby range starting inside a character -> payload_malformed", +"ruby-names-itself":"rule 4: a ruby link to its own block -> payload_malformed", +"ruby-past-string":"rule 4: a ruby range past the base block's string -> payload_malformed", +"set-duplicate":"rule 3: two sets with one SHA-256 -> payload_malformed", +"shared":"one path, one paint and one track each used by several items, each pool holding an entry once, in first-reference order: accepted", +"sizes-rates":"five sizes from 1/8 to 4 times the design width and four rates, each ascending: accepted", +"table-duplicate":"rule 3: two equal easing tables -> payload_malformed", +"table-first-use":"rule 2: easing tables first referenced out of order -> payload_malformed", +"table-unreferenced":"rule 2: an easing table no key references -> payload_malformed", +"track-duplicate":"rule 3: two tracks of one kind with equal keys -> payload_malformed", +"track-first-use":"rule 2: tracks first referenced out of order -> payload_malformed" +} diff --git a/wai/vector-conformance/vectors/canonical/minimal.json b/wai/vector-conformance/vectors/canonical/minimal.json new file mode 100644 index 000000000..5a7a1e40f --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/minimal.json @@ -0,0 +1,34 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":1,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":235605} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":2560,"ymin":2560,"xmax":12800,"ymax":7680} +], +"path_ends":[3], +"path_points":[ +[2560,2560,0], +[12800,2560,0], +[12800,7680,0], +[2560,7680,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/minimal.wvg1 b/wai/vector-conformance/vectors/canonical/minimal.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..bfcc588791030215e0652a5a7d56e562e7b87e54 GIT binary patch literal 186 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!U(0o(qIB4&Vt~gut0i4XD~BJ0!2aUPRPmq tXN0NdV&GyhVvu8I0Mc9xKqi=w199aTn4sqT|Bo;b;wnal|0n<=4*-=>8~OkM literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/paint-duplicate.json b/wai/vector-conformance/vectors/canonical/paint-duplicate.json new file mode 100644 index 000000000..fcbb654c6 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/paint-duplicate.json @@ -0,0 +1,41 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":2,"n_texts":0,"n_tracks":0,"n_paths":2,"n_items":2,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":8,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":238632} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":0,"xmax":512,"ymax":256} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0], +[256,0,0], +[512,0,0], +[512,256,0], +[256,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/paint-duplicate.wvg1 b/wai/vector-conformance/vectors/canonical/paint-duplicate.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d000df7480f6fdce15bf93de2d2f6a271e69459d GIT binary patch literal 276 zcma)0u?>JQ40BorUSR3W$`yP7FK`COa0nv@@K1=-h>DF$jpM|Qye{)30M47W;+{4U zqsb>J&`C^yzR^!d?|5VkHs!^u6y+CmO((GP!6{0Rj2wHDN5!YfCx4lzu@?Zx#aVC- zi-^)-N^msd3Q#}v^JBK#BU)8?@k}W<+mHp-;}ht4=QIUKMD)G&PzR|FLu;ZgQt>{5 SoIRpY`cr$qvS*rS{`zlQWiChn literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/paint-unreferenced.json b/wai/vector-conformance/vectors/canonical/paint-unreferenced.json new file mode 100644 index 000000000..3f913e596 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/paint-unreferenced.json @@ -0,0 +1,41 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":2,"n_texts":0,"n_tracks":0,"n_paths":2,"n_items":2,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":8,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":238632} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[20,160,60,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":0,"xmax":512,"ymax":256} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0], +[256,0,0], +[512,0,0], +[512,256,0], +[256,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/paint-unreferenced.wvg1 b/wai/vector-conformance/vectors/canonical/paint-unreferenced.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d0bdb89a29b62038c052e9be8718b7916df5db41 GIT binary patch literal 276 zcma)0p%H*E4E(eR2Ebsdv3NWizzU4PCAg6GnL!fB2dO(D zC-%H$Muz_=03w%~mtT~Zn46kc F0stm#9o+x` literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/path-duplicate.json b/wai/vector-conformance/vectors/canonical/path-duplicate.json new file mode 100644 index 000000000..9a1404527 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/path-duplicate.json @@ -0,0 +1,46 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":2,"n_items":2,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":8,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":238645} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,10,0,[0,0,0]], +[0,20,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0], +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":1,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/path-duplicate.wvg1 b/wai/vector-conformance/vectors/canonical/path-duplicate.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..8218726eb6be3cdd13449ab72001be6b15fcc428 GIT binary patch literal 312 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g?!UTpO8Ua9T4g?p41=4G}gqcASC<@YlLQd{K zNIk?X2o2J}1tOq81WGe9u)u^s3V}{Q*Y9SV;5CjoU6x1Z`x;wesc()sN_7aX*L`iXA zp<*F+qP4w+g{5T>6)Z&J5i1LeG@i!udow$dK;G`meDA&Qeedng%=G0m4iUZmz`HqD z+>Qeyhg=;qJCP5Mm$iccr);tea_z=XkB-1+MPAIgbM9exdHsER8vGMBZd^o!IV08b<%(WZ( z4rmYYOUJPI{D`%i@!#Nkh-o<9L_-%3^Vx49;UT}>_u=#GHeZ3yvsk|h-+lwav=^Sa z=izv*#(Eyr@c8-$Jk-IsF}C4Y%a|B9rdy7wwCd>%?kxXY<~c3@(v~JW zvu;`8#Do~j1Hm3ScmKG;+yB?qqFP=jG}2{EGsctBS`AW!|3GQjlT&Jt79Ck6Q6mgg z*3Tn3)t0Hu!$QX5_CPF!Nn=q)MV1S5D1p3~%d?)C%ko~o8>*n2L^4I?#f32H$i~^` z=^(h-NtDR?MK?*MP_lrME-j^#R20m}W7&bt5r literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/ruby-names-itself.json b/wai/vector-conformance/vectors/canonical/ruby-names-itself.json new file mode 100644 index 000000000..661ab691f --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/ruby-names-itself.json @@ -0,0 +1,43 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":2,"n_tracks":0,"n_paths":0,"n_items":2,"n_keys":0,"n_glyphs":4,"n_clusters":4,"path_contours":0,"path_points":0,"strings_len":16,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":258277} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":5,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":6}, +{"purpose":6,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":2,"ruby_start":0,"ruby_len":3,"str_len":6} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":1,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":196608,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[2,0,0,9000], +[3,0,9000,9000], +[5,0,0,3000], +[5,0,4000,3000] +], +"clusters":[ +[1,0,0,3], +[1,0,3,3], +[1,0,0,3], +[1,0,3,3] +], +"strings":"ja漢字jaかん", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/ruby-names-itself.wvg1 b/wai/vector-conformance/vectors/canonical/ruby-names-itself.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..28e5ed313fe4f095184148016396852fbb42a26f GIT binary patch literal 942 zcmZ`$J!lj`6n?Y2cbBXIMX*RC6D%Tfcc?{3VG2PI;er7*NxSY&?l#`-hMhg-h(#hP z4pL~a5WA4n_7)bFDTAnBArgE?cMohBMof&PRP$o&ZGCa)TXpHr)sKHyM%Ruu zCwHp*i$9+o{=OD;ew|*wx7EvK^D-*Pqmx%LJ;YWRfUFTK>(Tq?q1Pw6%GA>?{q^>_ z_2!dq-q5qilIF6ZpD$^D{W1Xg`sQ>k`81F8qWHYG_hn=E(}#Jlv%K1Q^M2;>6ZHl# z0Q83uRI)!%&l7qXdWQho-9sEg-$eCBEpj)@i7cn^wf>KImRbs(Ij%cVM2aUPtiVm51K z9V`Hh5j}b+@7U`Ti`zqImLgU3Dxo~pMrB%PQ`jyb72rKUEY(;5Jq@iE(Tp2eL zUrba*BoZ$b0e{}&ue`AIQut|{aBU>VJfBPA2A_+QMziiow;uW;!p{2(o?jECyXD)i z`?MBH9yil^7zr*#icG3CqYfjUQbi&bVi_WRtDm#XAEg}gidy0>%_tBF_6V-0@Cpr; QqR6L3BEvZ1IJWHm1B8jryZ`_I literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/ruby-past-string.json b/wai/vector-conformance/vectors/canonical/ruby-past-string.json new file mode 100644 index 000000000..b6146cc4c --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/ruby-past-string.json @@ -0,0 +1,43 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":2,"n_tracks":0,"n_paths":0,"n_items":2,"n_keys":0,"n_glyphs":4,"n_clusters":4,"path_contours":0,"path_points":0,"strings_len":16,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":258277} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":5,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":6}, +{"purpose":6,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":1,"ruby_start":3,"ruby_len":6,"str_len":6} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":1,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":196608,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[2,0,0,9000], +[3,0,9000,9000], +[5,0,0,3000], +[5,0,4000,3000] +], +"clusters":[ +[1,0,0,3], +[1,0,3,3], +[1,0,0,3], +[1,0,3,3] +], +"strings":"ja漢字jaかん", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/ruby-past-string.wvg1 b/wai/vector-conformance/vectors/canonical/ruby-past-string.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..eee47a807dca8c3cf98a934fb631b817d3ef0730 GIT binary patch literal 942 zcmZ`$F^CgE6#cWiNpuwy!NNvHEEGwCT8M>L2!aR^1@-RQb$2e=Gub_MHcB{)Q?3YD zs91=dXl-v{VQG1Y3Kk+~I4cW_YmA=pznNVyaQBm$`S1Vt-~T%^H+%7vAfmS)u-kLR z=?FFwzz}9X|JNQYrcsQdDK9YGQ(1;{%iNOO8|2*!in8nKH{lEex|v^WAOv zvd^uyXIz8HLe^J3%G)5TzP@4@K)lesI`%p1@y z!k>=t!ugTcc7~V1J47@bZ*miS6ZpU_PPm-^AA5{3dzr5=#(X8NGA?K3Fzse!-+4G* zt3l7D8vi_V*Dlwwp)qg6v5~PcG^dtV#_HnigzDnzZ(4QD#&8~&3!Z3s7q$#p%sWMe zh=^m5XOHcXxckSE?%uzS5jFBAVLVd?nl(&HYc-Z4z6VNzo|@5vB=4v^4jX~5(|#7J znYKz)7UU|DHwW@g5I1hCFi$gS4=p(_7qYY`7t*ZP?*`iM#-U2M^88W|c2whZ^Q7-z z@5EZB{k$6|N@|s}k|`~u<3#3QWNInZG0P98HJkEME;(E?cMohBMof&PRP$o&ZGCa)TXpHr)sKHyM%Ruu zCwHp*i$9+o{=OD;ew|*wx7EvK^D-*Pqmx%Ly_>Bt09hke)}!~&L$6PCm8mC|{(Ae| zdh-HP{5y~?%Kva6dH_2yQ^q)jD|zSF|i^W??I7G9m9&P4urFGxm3q0&Vy4`%x0~u zg9U&wqDK$q9eaIZaeL^@QlyGrC6uSys7woO3fl#w0=x%^yoQ*NtthRDH1tcJE8}M3 zi;1d;MB=3);Llt9l^2#?3O|h#u8riF=W|Ki;B#@(Xx2UH)dc_qm*M_QA^yV83iK29>Mh#UZJ5< P6#2ABWEe*r$CllHfq~Au literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/set-duplicate.json b/wai/vector-conformance/vectors/canonical/set-duplicate.json new file mode 100644 index 000000000..cf877ec2d --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/set-duplicate.json @@ -0,0 +1,44 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":2,"n_tables":0,"n_paints":1,"n_texts":2,"n_tracks":0,"n_paths":0,"n_items":2,"n_keys":0,"n_glyphs":4,"n_clusters":4,"path_contours":0,"path_points":0,"strings_len":8,"inline_len":1108,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":263131} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"}, +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2}, +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":1,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,5000,20000], +[2,0,9096,20000], +[3,0,5000,30000], +[4,0,9096,30000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1] +], +"strings":"enABenCD", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/set-duplicate.wvg1 b/wai/vector-conformance/vectors/canonical/set-duplicate.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ff4488b9ff819c9b24ea8e30a66e53d77ef832cd GIT binary patch literal 1528 zcmeHFy=xRf6o0e3$?0LGSfr5=3qkIVXdxD+hzW>ret_j5tFM2*y?@yG zwfp(W(YK57&o9Tb;x65OKlaPHKy8KRn;t6xP+nQ%_Bl`E6XI|_R5kM~c*YJd5XlG3 z5BrLh_B7FT-tj?ycu8xJ4bJ0cu7pZR6{tUqzl6cOma*Amlk zbc80n7sj*SM#4va(huOzP2}g`^ByYvJba$DlC$vKwGT%JHRkiFhA*(E;G+)0jj;?z zmd3@nIkkf-))2SG)DVyU(7taMxSM>Cj1%o(_1J>NrdL*om=I%nSddrZ#a~bQ=l*$? z)Y998wQL!~obaS{Py-ciXGA*et0gngc~|90)C}t;EwV^0b(B_Fn5$Sm9mt(9X+Bp` zo@UZ1BaxR|S=yIdY1S`#p{e(hNNH3qZ--G=HE*;Q>-Dv6Vq{w6y+kW%R1PLvT2d!k z=8VYHc4`vP4^DEnbGtDRitd)F|n?$Tl}Msv*}^W|CA(v~AT-U&`rAneCh5-m%l`idn*$~wo@8YB4+RWh7DOJR9wdibJxC5F&jblC bI3J`7(|jcLKzT+Wgz3ko9^x#J3ZhzKK;21|npkT_5pD+plFWl)r7U~pjE!f@~p z0|Uq`#{J9;46GNJB#-bhFmNqkU3tNZ;Xo_{!%LvB1kecN+&J= literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/table-duplicate.json b/wai/vector-conformance/vectors/canonical/table-duplicate.json new file mode 100644 index 000000000..3e5e3d03f --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/table-duplicate.json @@ -0,0 +1,45 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":2,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":4,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234896} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[ +[0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440,65536], +[0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440,65536] +], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,0,3,[0,0,0]], +[120000,5120,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/table-duplicate.wvg1 b/wai/vector-conformance/vectors/canonical/table-duplicate.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..8f56753599f8a9074c832364d92eb03459522aed GIT binary patch literal 386 zcmZ9|u@QqX3_wxIq)J7RCJo03WCOaiR7p#jk`WkzCOsoC0%b~y48RC%K)z6%<09_a zLOSctzTd7F6_N36tM6@isHz031W`VbgEhbL{~znN+u81!$eG+HlBCE{phSfl4O(>Q zF<``m84Kc+lr%?y5*2DRXwjj^fDsdBEMUef%ho`)XB`WxZTCNJzrQ7k^^=!${|Y>d a^)0r0`ZJN+G>dih-By2HrRHI0V*dk+&M9yJ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/table-first-use.json b/wai/vector-conformance/vectors/canonical/table-first-use.json new file mode 100644 index 000000000..58d1a1325 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/table-first-use.json @@ -0,0 +1,45 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":2,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":4,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234896} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[ +[0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440,65536], +[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536] +], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2} +], +"keys":[ +[0,0,3,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,0,2,[0,0,0]], +[120000,5120,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/table-first-use.wvg1 b/wai/vector-conformance/vectors/canonical/table-first-use.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..262acd7b05b0cba543f68d6120962070d06a25ec GIT binary patch literal 386 zcmbV|Arits3`LVI3WdO6IvfFRfWxA|B9R=SN2tMb1ddRNL~sC(&>Jl8H|)?s@;h&n z{B1I`IqbJ zE8L)i2fUz%?-Uh(%I#j)Inh0)468_n_fLxxQU4D9JZc|rfwibl8r~UeB3GA`b3~o7 LUB?Tlr`*2*NE;#W literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/table-unreferenced.json b/wai/vector-conformance/vectors/canonical/table-unreferenced.json new file mode 100644 index 000000000..23f38523f --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/table-unreferenced.json @@ -0,0 +1,45 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":2,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":4,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234896} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[ +[0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440,65536], +[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65536] +], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,0,2,[0,0,0]], +[120000,5120,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/table-unreferenced.wvg1 b/wai/vector-conformance/vectors/canonical/table-unreferenced.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..355b075742c3ec300f00c8a046d5d7f115a91994 GIT binary patch literal 386 zcmWF!b2nsUU|=|K1w=yV2Br)~Mn(oEkO&h4BM>q$uz)0?0G$sL2hkwC6Q(jVNCMdq z6M+l?AXWfk10Z$);s78{0OA55ZUEv5K)e8mHvsVgAie;^4}kas5F<r J0LWJ`c>qV9A@2YH literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/track-duplicate.json b/wai/vector-conformance/vectors/canonical/track-duplicate.json new file mode 100644 index 000000000..5aba4ca81 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/track-duplicate.json @@ -0,0 +1,41 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":2,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":238632} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,10,0,[0,0,0]], +[0,10,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":1,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/track-duplicate.wvg1 b/wai/vector-conformance/vectors/canonical/track-duplicate.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ba35a52207abebac2b99ddd93613455c519607f4 GIT binary patch literal 274 zcma)0u?>JQ42xSPK49t0$`yP7FK`CO^bkf4;GYuXRzgg8up1|~x-RnsGdnJ_bPpTg zBc0$J9_3b`-?ibR%#JzQ;6CrplnV3ek}}ehD%uDC|>{o literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/canonical/track-first-use.json b/wai/vector-conformance/vectors/canonical/track-first-use.json new file mode 100644 index 000000000..d25d6932a --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/track-first-use.json @@ -0,0 +1,41 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":2,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":238632} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,10,0,[0,0,0]], +[0,20,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":1,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/track-first-use.wvg1 b/wai/vector-conformance/vectors/canonical/track-first-use.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..196253c61538271a890c5a9d99166f8df205bdcd GIT binary patch literal 274 zcmaJ*s}+DS5WBP}GzL?RWePTc6&QnI7zD`x>{BkJ@OTI!l1uK>PUFzS%(jCpUBV2w zWfGjjrR)mKtJ{2(yWJYC^_+8iN}2n*CFM#@Drk!0eHDiInDpp_$Hh^)u8b=0TpODmPE3pD!4sqPLQ58AAU;2F9Z$m`9 zKCSO|ifO2BJ{e-n!8+f%=8n7fGpO&D+AclrJ2B6Q>?iN*`2{ zUv-VP;?Z(my#2|XkPq95ab8+R$OrjwR15jAWrKR5UR1?JU(u5l3G_1_;vpVJxL-Gg zgok*Dhj@sGd0)gsJj6ph#6vvH9l%38#6vv9Lp)3p;vpX5As*r(9{OM8enbz@1M~nr LKo8IZ|E34NB#;7L literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/cost/attack-b-one-item.json b/wai/vector-conformance/vectors/cost/attack-b-one-item.json new file mode 100644 index 000000000..7a908cc19 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/attack-b-one-item.json @@ -0,0 +1,16411 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":4096,"design_h":4096,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":1,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":16381,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":4096,"h":4096,"cost":184521728} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":16381,"zero@4":0,"xmin":0,"ymin":0,"xmax":32767,"ymax":32767} +], +"path_ends":[16380], +"path_points":[ +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0], +[32767,10922,2], +[0,21844,2], +[32767,32767,0], +[0,10922,2], +[32767,21844,2], +[0,0,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/cost/attack-b-one-item.wvg1 b/wai/vector-conformance/vectors/cost/attack-b-one-item.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b953465f683edbe546cd9c97e1a6670530dbc606 GIT binary patch literal 82071 zcmeIyxe>xJ5CFiFLn5an9%3>oAfy4Fa@+(}P=!MZa5*qSwmduqkgWnq_sD@q+ROQ{ zOA#@Q)4Z&0w5fzOla_TZ&(oBD?mzL*uAGf)Uad=V>brMcPG8-*&;6sG&HZiLL>y1e zlq|g^%zX*x@2UD5?uNHO1`?8xgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dY zgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NWy3233jatfdPj)(2K zM8vso^Yc56X~}TNl$bwuK2yuzHlO%wm1k>?SteWEWwEGbR9(B;U5B%^JFO-WyZxjk zvo^!pW%&4?UALh(yah6lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TX zBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{l zkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUF zBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex zl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e& zNJ0{lkc1>8Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8 zAqh!HLK2dYgd`*(2}wvo5|WUFBqSjTNk~Ex{zAgRmWW#8JI@ka6hdt N^uz1H=!gI9hdZduoFV`K literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.json b/wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.json new file mode 100644 index 000000000..a5ad74972 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.json @@ -0,0 +1,290 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":4096,"design_h":4096,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":1,"n_tracks":0,"n_paths":0,"n_items":1,"n_keys":0,"n_glyphs":256,"n_clusters":1,"path_contours":0,"path_points":0,"strings_len":4,"inline_len":288,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":4096,"h":4096,"cost":4294967295} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":288,"sha256":"4364b56c01797a46a488e59431dec767ed09d93294b9bfe39000afd2d51c49b3"} +], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":3,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":1} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":256,"n_clusters":1,"t_on":0,"t_off":120000,"unit_scale":16777216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0], +[7,0,0,0] +], +"clusters":[ +[256,0,0,1] +], +"strings":"undX", +"inline":"574f53310100000000080000010000000400000001000000da00000000000000070001000400000000000000ff0fff0f03000000000000ff0f000000ff0fff0f000000ff0f006e616d653d73796e7468657469632d7371756172650a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.wvg1 b/wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..79ce1be8a5a731cdb11e9dbe923a9fc62f8f76e1 GIT binary patch literal 3584 zcmeHKy-EW?5Z)s~^qQmN;f427)ss&TsnN(PqC%(V z;M@fd-HB1&)#E;M!k= zQGahgpKru+;p3TwWAC&WRkGN}$ZA=woHw#sY3D+yV1iwfDmz9i!=^b&0*$_j6CGlA zgbHqQLl(3{g?$<}?V$*zB}6eE(o94aA9! zq(U%gsZyR=mX-=EpU^msjimDFV$BxxEKoczZRjrac+`}GP;`M^ZfbBH4pAE!E1zyt6A oJOB^C1MmPm01vzyt8WfAN5d{``Ob6Kn3W?*IS* literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/cost/ceiling-stated-low.json b/wai/vector-conformance/vectors/cost/ceiling-stated-low.json new file mode 100644 index 000000000..9a9bf7a1d --- /dev/null +++ b/wai/vector-conformance/vectors/cost/ceiling-stated-low.json @@ -0,0 +1,297 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":4096,"design_h":4096,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":2,"n_texts":0,"n_tracks":0,"n_paths":2,"n_items":255,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":11,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":4096,"h":4096,"cost":4294967294} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[20,160,60,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":32767,"ymax":32767}, +{"n_contours":1,"n_points":7,"zero@4":0,"xmin":0,"ymin":0,"xmax":31047,"ymax":15183} +], +"path_ends":[3,6], +"path_points":[ +[0,0,0], +[32767,0,0], +[32767,32767,0], +[0,32767,0], +[0,0,0], +[31047,0,0], +[31047,15183,0], +[0,15183,0], +[0,15183,0], +[0,15183,0], +[0,15183,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/cost/ceiling-stated-low.wvg1 b/wai/vector-conformance/vectors/cost/ceiling-stated-low.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..895b9ff8027b9221388867d12a3d75dc778b23e1 GIT binary patch literal 12435 zcmeI2F%H5o3`L!SU|{LM!cuVsX4o^b!C5-xDjbE818^RU9Yb5h!p`du*On8dt>yn( z^?b^^BqGxP literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/cost/ceiling.json b/wai/vector-conformance/vectors/cost/ceiling.json new file mode 100644 index 000000000..4e34aa070 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/ceiling.json @@ -0,0 +1,297 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":4096,"design_h":4096,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":2,"n_texts":0,"n_tracks":0,"n_paths":2,"n_items":255,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":11,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":4096,"h":4096,"cost":4294967295} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[20,160,60,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":32767,"ymax":32767}, +{"n_contours":1,"n_points":7,"zero@4":0,"xmin":0,"ymin":0,"xmax":31047,"ymax":15183} +], +"path_ends":[3,6], +"path_points":[ +[0,0,0], +[32767,0,0], +[32767,32767,0], +[0,32767,0], +[0,0,0], +[31047,0,0], +[31047,15183,0], +[0,15183,0], +[0,15183,0], +[0,15183,0], +[0,15183,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/cost/ceiling.wvg1 b/wai/vector-conformance/vectors/cost/ceiling.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..2ed60e0df6375ec1a4a342dfe38ade47da6cd615 GIT binary patch literal 12435 zcmeI2F%H5o3`L!SU|{LM!cuVsX1Zr&gR^wXRX7SG2jD)&j-f4LVdrItYb%M;)bf9= zdO7Dq5|P`(`zyt6AJOB^C1MmPm@LxQTB>nt<{u3)HvWox! literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/cost/group.json b/wai/vector-conformance/vectors/cost/group.json new file mode 100644 index 000000000..475af8fd2 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/group.json @@ -0,0 +1,43 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":2,"n_texts":0,"n_tracks":0,"n_paths":2,"n_items":4,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":8,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":474960} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[20,160,60,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":12800}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":2560,"ymax":2560} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,12800,0], +[0,12800,0], +[0,0,0], +[2560,0,0], +[2560,2560,0], +[0,2560,0] +], +"texts":[], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":1073741824,"t_off":1073741834,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/cost/group.wvg1 b/wai/vector-conformance/vectors/cost/group.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..9f5a113fcba2a61e06b6556f142399e307726aeb GIT binary patch literal 372 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj)37EW*UV0;UlJNSp(~MPY&T2H3MRNCHJcCZ3R! z`!BM<=078{DJcv_D10skE@lR1s5vPh8mIz9fe9eZ1>yizK`0Q(!0;akAS@6GaX%wi p6eI%y5P6V$L2e;dJtQO`dWj(+=7a2pt9Af7)d6HH%q7U~0RX=oLU;fG literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/cost/index.json b/wai/vector-conformance/vectors/cost/index.json new file mode 100644 index 000000000..aede50a49 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/index.json @@ -0,0 +1,13 @@ +{ +"attack-a-reused-full-canvas":"review A, attack A, scaled: 260 full-canvas fills reusing one 4-point path at 4096 x 4096 -> too_large", +"attack-b-one-item":"one fill of the same 16,381-point path alone: accepted", +"attack-b-reused-cubic-path":"review A, attack B, scaled: 26 fills reusing a path of 16,381 points, 5,460 cubics spanning the canvas -> too_large", +"attack-c-full-canvas-glyphs":"review A, attack C, scaled: one run of 256 glyph records each covering the canvas -> too_large", +"ceiling":"254 full-canvas fills reusing one path and one tuned fill at 4096 x 4096: cost exactly 2^32 - 1, accepted", +"ceiling-plus-one":"the same shape costing 2^32 -> too_large", +"ceiling-stated-low":"the ceiling document stating 2^32 - 2 -> payload_malformed", +"group":"a group with a clip costs w*h plus its clip's fill; an item outside the document's window costs nothing: accepted", +"reused-path":"three fills of one path, each use counted (640 x 360: 230,400 + 3 x 4,305 = 243,315): accepted", +"reused-path-stated-high":"the same document stating its cost plus one -> payload_malformed", +"touching-windows":"two windows that touch at one tick, never active together, so the cost counts one (234,705): accepted" +} diff --git a/wai/vector-conformance/vectors/cost/reused-path-stated-high.json b/wai/vector-conformance/vectors/cost/reused-path-stated-high.json new file mode 100644 index 000000000..7668dd69c --- /dev/null +++ b/wai/vector-conformance/vectors/cost/reused-path-stated-high.json @@ -0,0 +1,38 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":3,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":3,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":243316} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255], +[20,160,60,255], +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":2560,"ymax":2560} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[2560,0,0], +[2560,2560,0], +[0,2560,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":2,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/cost/reused-path-stated-high.wvg1 b/wai/vector-conformance/vectors/cost/reused-path-stated-high.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..30f252ffb239acf61c572e5e20b0da38ca56d04e GIT binary patch literal 290 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj)3NEW!w-!5pXv0|N_!i^2lwE!oD*APE!&nRr4@ z?!U+aoBwh)C;l@c>*8YIf|$?1zy&e^$cIo&APNZn|A){Z65={WpcpcM$V1eF*8YIf|$?1zy&e^$cIo&APNZn|A){Z65={WpcpcM$V1eFAw6LS#OW!^jM_6)Xu=0b>Jch-pAoa5j+f9|%Bv d2!Qy95iAOkLCC}0gHJt3HB27nc9_|OXaLhoFWLYA literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/empty-glyph-edge.json b/wai/vector-conformance/vectors/geometry/empty-glyph-edge.json new file mode 100644 index 000000000..df7693b35 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/empty-glyph-edge.json @@ -0,0 +1,37 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":0,"n_paints":1,"n_texts":1,"n_tracks":0,"n_paths":0,"n_items":1,"n_keys":0,"n_glyphs":2,"n_clusters":2,"path_contours":0,"path_points":0,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":235352} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[], +"paints":[ +[30,60,200,255] +], +"tracks":[], +"keys":[], +"paths":[], +"path_ends":[], +"path_points":[], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,2560,20000], +[0,0,4194303,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enA ", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/geometry/empty-glyph-edge.wvg1 b/wai/vector-conformance/vectors/geometry/empty-glyph-edge.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..c874e2059c72496cb691629f53ab8a376e2271c8 GIT binary patch literal 814 zcmZWmze^lZ5T5;^XO>g}i!?G;LbyAU6d{EY4g?8YR7j%NZg$7JC3kOS-=1=4VPRpH zSc$d&h^3{3B#j7MjWtHZ0@MQFWv2a^Q9z5n)c(SDCorGe{Y?YZc0KjF7i{h1u%R7`al{={huCKf`-vFjS zUYO-2`!_4`pO^0J~Ik~*j9FW#GCr{xYA zP7Hh|@*J^!c6R@`=so=F8c`!}5+*V-D>#4!TK1ikXegFzQh4dHrb+yz3+y z(|+Df6rrY^l?-(#ohZzuBBRYzCoDf0*R12~964{KHP6ylF=fmlv|X?%O*K_seE1~0wfla@V}LvY zy94;_%W??Wxj%itv2a^Q0o-9OC1l)q8aX!@z7Dw&Z_Fo!1PXUz=jD@nVZdw+ZkZvOR+sF61b;~AQiS;(YtT45=f8&uq*B|T7OhsrFe#gWeYMM6t$ zQdGnxrMNY~cX3vGOG%j*XpKhB<93nva62!0{cfzIZkCW@W@9H#I#hd9e-K5lJDJA3 zUv@J^sHtQnL!C%x3QMUdXeZYh%MWHX>$p-P=Z&=HS^6raf;oh?3pS;xrYdewp|e~e Ix2;G201&RTQ~&?~ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/groups-sum-over.json b/wai/vector-conformance/vectors/geometry/groups-sum-over.json new file mode 100644 index 000000000..11e70ed46 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/groups-sum-over.json @@ -0,0 +1,42 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":1,"n_paths":1,"n_items":5,"n_keys":1,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":695300} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[20,160,60,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,2097152,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[100,0,0], +[100,100,0], +[0,100,0] +], +"texts":[], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/groups-sum-over.wvg1 b/wai/vector-conformance/vectors/geometry/groups-sum-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..9816f04111395d7740c689da08191cc86a38a958 GIT binary patch literal 398 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g?!U%+{U>YO~0U&V}7zd38>1CP2#UKe32dNWT zVDp~|%7!Ra08@-eCZsT=FfcDYiQkb*HXL`n)qp=1E|F_L|MNzmU}maX^ur~B<< z0N!843i2K>B>y;^g(oh;k0Q3*Vy!o r84XV&_N7BA0@x(JZgS*XP*5ZCxR_S literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/index.json b/wai/vector-conformance/vectors/geometry/index.json new file mode 100644 index 000000000..ebdcd8a99 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/index.json @@ -0,0 +1,15 @@ +{ +"clip-over":"a group's clip past the range -> geometry_range (clips are fill instances)", +"empty-glyph-edge":"a glyph with no points at origin 2^22 - 1: its interval is its origin: accepted", +"empty-glyph-over":"the same glyph at origin 2^22 -> geometry_range", +"groups-sum-over":"two enclosing groups' translations sum past the range -> geometry_range", +"inactive-item-over":"an item never active in the document, past the range -> geometry_range (every item is checked)", +"second-size-over":"within range at the design size, past 2^22 at twice it -> geometry_range (every listed size is checked)", +"true-range-fits":"m00 falls 1 -> 0 while m01 rises 0 -> 1: the true range ends at 2^22 - 1, the interval at 2^22 - 1 + 10,000 -> geometry_range (the rule is the interval)", +"x-high-edge":"the device x interval ends at 2^22 - 1: accepted", +"x-high-over":"the device x interval ends at 2^22 -> geometry_range", +"x-low-edge":"the device x interval starts at -2^22: accepted", +"x-low-over":"the device x interval starts at -2^22 - 1 -> geometry_range", +"y-high-edge":"the device y interval ends at 2^22 - 1: accepted", +"y-high-over":"the device y interval ends at 2^22 -> geometry_range" +} diff --git a/wai/vector-conformance/vectors/geometry/second-size-over.json b/wai/vector-conformance/vectors/geometry/second-size-over.json new file mode 100644 index 000000000..e0266840a --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/second-size-over.json @@ -0,0 +1,41 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":2,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234500}, +{"w":1280,"h":720,"cost":925700} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,2097152,0,[0,0,0]], +[0,0,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[100,0,0], +[100,100,0], +[0,100,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/second-size-over.wvg1 b/wai/vector-conformance/vectors/geometry/second-size-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..0a9340fa06b6d0b59accd93ecdbc47863c58178d GIT binary patch literal 234 zcmWF!b2nsUU|=|K1w=yV2Br)~CLk9i!UQBCG*}u;fcPv3E(!~zmt_hw0|V;?CKd%g z21%eSNc{;px&KU1HjIX7RDe)OBqNgPDGVtLK+`}V1wue6pvxfO|9>b0NI`tT$nYNu IKz76A0o6hp3IG5A literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/true-range-fits.json b/wai/vector-conformance/vectors/geometry/true-range-fits.json new file mode 100644 index 000000000..bbb630356 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/true-range-fits.json @@ -0,0 +1,44 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":3,"n_paths":1,"n_items":1,"n_keys":5,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234656} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,65536,1,[0,0,0]], +[1000,0,0,[0,0,0]], +[0,0,1,[0,0,0]], +[1000,65536,0,[0,0,0]], +[0,4184303,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":10000,"ymax":10000} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[10000,0,0], +[10000,10000,0], +[0,10000,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":1000,"unit_scale":65536,"m00":0,"m01":1,"m10":65535,"m11":65535,"tx":2,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/true-range-fits.wvg1 b/wai/vector-conformance/vectors/geometry/true-range-fits.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d3106a2a8c67a1cfbabbfbc30816ae934781e5b2 GIT binary patch literal 270 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g?!VDxqG%H9F3P5}o7zd38>0K~|nL!dL4pMhQ zPVPT5kY)m67!6{B Xl>h$^A|U`_A|p`z|9>Vh36TQ;6K)x^ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/x-high-edge.json b/wai/vector-conformance/vectors/geometry/x-high-edge.json new file mode 100644 index 000000000..5154e158a --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/x-high-edge.json @@ -0,0 +1,40 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234500} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,4194203,0,[0,0,0]], +[0,0,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[100,0,0], +[100,100,0], +[0,100,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/x-high-edge.wvg1 b/wai/vector-conformance/vectors/geometry/x-high-edge.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..640338a4f8f00d1629202a3c6857da7ee6d924f1 GIT binary patch literal 226 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g?!UQBCG*}u;fcPv3E(!~zmt_hwgCtNCr0#^A z+Hi=qEG-MlBp>SDGbaI*%S~3;)5xmiy+|te<%Y;L0r$s@E;05cEjWW DzSSDGbaI*%S~3;)5xmiy+|te<%Y;L0r$s@E;05cEjWW DzeF0k literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/x-low-edge.json b/wai/vector-conformance/vectors/geometry/x-low-edge.json new file mode 100644 index 000000000..1706dd646 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/x-low-edge.json @@ -0,0 +1,40 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234500} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,-4194304,0,[0,0,0]], +[0,0,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[100,0,0], +[100,100,0], +[0,100,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/x-low-edge.wvg1 b/wai/vector-conformance/vectors/geometry/x-low-edge.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..86d04ba3f8767844a4f31fae566a883718b2d181 GIT binary patch literal 226 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g?!UQBCG*}u;fcPv3E(!~zmt_hwgCtNCr0#^A z+C}ytso?xPcBJ2gh&-2jb`e?t@JWk7p10G;Lwu)0`+VkSu GJ^uhX<{*{; literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/geometry/y-high-edge.json b/wai/vector-conformance/vectors/geometry/y-high-edge.json new file mode 100644 index 000000000..b654233b2 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/y-high-edge.json @@ -0,0 +1,40 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":2,"n_paths":1,"n_items":1,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234500} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,0,[0,0,0]], +[0,4194203,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[100,0,0], +[100,100,0], +[0,100,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/y-high-edge.wvg1 b/wai/vector-conformance/vectors/geometry/y-high-edge.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..696dd3c565ea6c5e43cb86d7438bb42b6f60ed60 GIT binary patch literal 226 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g?!UQBCG*}u;fcPv3E(!~zmt_hwgCtNCr0#^A z+q?ugbgb1nu$cdBLi3KxBs?NI3{FrLVqQ zB%t!)zaO`~kN!dHqr0x?a#sXi3A@p&U@N+6NdQPu3J^~K8s5Upz~I2fz;J|ESi9C?6&cNWJ50tk6I?f5G-UrB@1JcdNa6(S*znsm9{~&*WFvy)C3^Wee z&0sljxNrd_px^|I0j427WJGu$uUh-(mj!ls@Ht^=YAWFpAlFrPDleGN084MjD~ wJV-b}Y$HZJ%w1q>h#)}f3&a^16#O7=D*(nNh>cGiWGqM?9b*$u&2w}D063I*QUCw| literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.json b/wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.json new file mode 100644 index 000000000..872ced12a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.json @@ -0,0 +1,76 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":3,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":6,"n_keys":4,"n_glyphs":6,"n_clusters":6,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":0,"held_len":100663296,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":33554432,"sha256":"df3f619804a92fdb4057192dc43dd748ea778adc52bc498ce80524c014b81119"}, +{"carriage":0,"zero@1":[0,0,0],"length":33554432,"sha256":"67abdd721024f0ff4e0b3f4c2fc13bc5bad42d0b7851d456d88d203d15aaa450"}, +{"carriage":0,"zero@1":[0,0,0],"length":33554432,"sha256":"26b25d457597a7b0463f9620f666dd10aa2c4373a505967c7c8d70922a2d6ece"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":2,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.wvg1 b/wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..287dbeb0b5c173ab2da38fe2728aeaded49c68cd GIT binary patch literal 896 zcmWF!b2nsUU|=|K1w=yV2Br)~Mn+~vCI&_ZW(Fn(HlR2Q5QAtCW&&akAO?v+0Z14O zKzd7OvolBnc@Pu9!c6z=6KAlj)W7WzE~$IO_PWQb@~%5Udpvtyu&Nvo*&zs04gyT+ ztM3*GsC@YE$8GPUf6)5qt}D9S6@gd6ZuBbHimqA`08z%kq_!#6wRHOO4Q}?+6uzb1 z6G4J-!^KQ5pI6r6xD zz%(Qz7?DFPg&_sbX9OB2!XUy7HW{P=VZrGT`aJ+yN!2rm85bz%e zU~C3xyfQL?L_vT7$bz^A;U{eBnczAgxQ07wX!Jpcdz literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.json b/wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.json new file mode 100644 index 000000000..47eb40fbe --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.json @@ -0,0 +1,442 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":64,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":67,"n_keys":4,"n_glyphs":128,"n_clusters":128,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":0,"held_len":2013267968,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"df3f619804a92fdb4057192dc43dd748ea778adc52bc498ce80524c014b81119"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"67abdd721024f0ff4e0b3f4c2fc13bc5bad42d0b7851d456d88d203d15aaa450"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"26b25d457597a7b0463f9620f666dd10aa2c4373a505967c7c8d70922a2d6ece"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"9d9f290527a6be626a8f5985b26e19b237b44872b03631811df4416fc1713178"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"fb5e512425fc9449316ec95969ebe71e2d576dbab833d61e2a5b9330fd70ee02"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"2594b6a92ebfb1c3312deb7d01c015fb95e9fbe9bd7bc6b527af07813ec7b910"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"7aa8ca4a02506da9133d8f889678b76f716ce45d02e22fdb7b70a15e56a0eff8"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"e8613f5a5bc9f9feeda32a8e7c80b69dd4878e47b6a91723fb15eb84236b6a2b"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"dc765660b06ee03dd16fd7ca5b957e8c805161ac2c4af28c5a100ab2ab432ca1"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"9f076b7eb7fdc0311cd3208cdbbebbf8014dd3a05e35191c96947b358a362b40"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"075de2b906dbd7066da008cab735bee896370154603579a50122f9b88545bd45"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"cb30e91817239109ffd0a5870046e128f04619da80c7624d921162fdfe514f76"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"42f4aeb81c1ef81f771f3de8abca9dcf66901c575530e7672e4b1146474ae650"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"43c66c260828c9839f26474151db105481ff92f5e01377f75389d4ce3d2dd574"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"01b4f6bd5d6a06a7b74a8565ceb4f845afe0ae96a0ac05cf5e86066bf7b538ec"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"972b8373b897c65c4f631c6bdf2443d0d817a88f224b54d8e593fdcf32488d60"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"097328e8c957de2428283954f6a1ee8ff7ad7def12e100a600178407f5decf24"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"84fc05949dc1e486652a4ed316afb6434e9437eb30b714594a1d0b4205776602"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"7d8e29fa389a36cca29bc0f07a7892dddd6f9070b9e33d12dce8ce3569f81810"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"eba09f2f48f209cfa2dfbf19fc678d755d05559671eceda0164f3e080cb49765"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"447e12701a0d03cf90a4ad7f02f1a045b35d284e26fe520440edb116d76bf700"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"44b34ba1e158565cd98b8b42da82ab3da3855b9828ef66847eed4a66a20c22b4"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"f59d756696b2089fca5969fdfde2674e333765e1dad0a51c8ebbc63f351c4ca5"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"a376d173ece243d587f352f04307fb971f10cdbc9b9d850e8ecbd414a586fa3c"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"17fa9c7f5e9039a2d46e73e17d8e094a796ee4c313199bad42db4ee1dc30d865"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"0623ccb9b1619bd388284a438034d8cb6431964ba727d8b1c450303105735488"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"3ef3bd3d6658c0dfdfdd7aa65e3d92bf1da9a04678a4ed2a5d84ed824ec91775"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"bb549140670e7cab3f174160e750d9ed261491b7feb8fb75ec32f0d788f0abce"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"b01099398ce27bbcb7ed256854acc338ba75af739e9d73d741dcb13dc4cbfb56"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"ad497f997ead95db601f7d7ed72a7a624ba52ce6f4145a6dc7ec10d1f03876a9"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"4f5e1d312b4d1bb8ccaf069c18cddeca414ae78160fb3c793ffc730eef4e4f17"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"efbe2f505a2756a0891b40d01d0a7135774bbd38cdc526def968d28a7e309452"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"8d71b3faab8201459ad37ef499beb336ba88bdcfa0f51ee6f0a46ec3192d750a"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"9a090610d0aa9445db0890179a9dea330334e3b9086987e93af97dbc978fe311"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"1b9334feece6ca2121e24cd36a7251aa37a2eed10a0a3533009030b9d65358b4"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"d2d27d69fc0a2c6cc0aabec462ce665aa8a92766844f081b672588acdf8a2c71"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"de6d696c194fb883fd153e435f68d0283ebcf1a28c46cba524df6a8c0807084a"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"dcd1430b981b4550707e196a4954598d6bd8a4f078fd0ab883eb9e857242811d"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"01ae8bca3feddc447c36822c041be588ef20ca9ff84c4ae180a0776f744427e2"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"977d1a863cf97921a76b1f8414af65c7463cdab40d64c174cead35ad54c4ddb3"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"1a00f51f3029fa4b7e61b9bf7aa9de5a64798857872981f7e056e4f437171955"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"4f2d892d6af406902c1aae6e58a78b2e6865fd4b782fc96b12de65d3bf3dc03e"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"e8a4b2ee7ede79a3afb332b5b6cc3d952a65fd8cffb897f5d18016577c33d7cc"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"7c9bf6a88aed1539a3276462bb9e977bede22cf2c89f96bf61f590da5504ccc7"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"32434dc5b0f72c9b863c24daa5d4e79b9c43bd73b38c469fb65fd13d996b7b32"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"28276425d45829d4e6f5e18aefbf1f62862f07260a904532fb6e2106dec973e6"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"c245aff91259378234ae88c46d0e6a690a75034a5fc42bd61f2e3d03c9158b33"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"bce941d196c26696f1f5d701d21a8a9e414e81d6e15a48f3663313e3cd7cc4b9"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"4f8320d91e97d546dc799848e8d218e18050af7a7964e0414de9e5479006d7e3"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"60864aae264519399c7a7379382e411d40a3bd0f1641e669fb73183d223f6bd0"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"85dd751867e3155c7f2e23e8446546906f5bf617d4d985ed474822613764d69e"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"40d95a7c7f1655a0070ddf3ce81eb83c0e88ab92766b85e6a0bb98503896e036"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"77f906b94309dc84a1d71649eeac2d708182919f62d74580340943d6d8014bf9"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"8432386e2c3b0e400891a239cc3678c90f26e43195559dda3e8111f692b880e5"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"6855b5c2b40b54d75fd440a0a03aa931fbdecc3cad86beef3eb94653289cd3a5"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"e2733b3db9d93b0ac4e656aa12b839b92d1b7e1a4c5d97c74cb05c700672cc87"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"6fea016a651b6460fdd05e8073e5114413e814d86781e4dc4e8c3592dc851128"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"e3f69f6c094ffb4e3b3a0ba41d7996137e03ebdf85952d227d04b9e161a06c5b"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"4d70f4a881c72812c075e9727da84e0cb9b771859100d10815cc6f9a502818e2"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"c53f1704adf845d67931ad941e40ba39e0f6c5e577a3ed12019cbf72db1451bf"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"621293836cafba765c105b23559d2564fbca2932bc13ebfebe9a63b7f393c3cd"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"4b4c91edbeecd267c6d7d7e0b8737c80c7277e8bdcc24d91e034c3359f166664"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"fa802ed35611d044b14e2d95ce6619c2051b5c0d6645459658e1d67fa0af07c7"}, +{"carriage":0,"zero@1":[0,0,0],"length":31457312,"sha256":"1b9e0fe7b740b4e583727aa1c9d27ff8c01491f911d2de0747f8c997ef6b3498"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":2,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":3,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":4,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":5,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":6,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":7,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":8,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":9,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":10,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":11,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":12,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":13,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":14,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":15,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":16,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":17,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":18,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":19,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":20,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":21,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":22,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":23,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":24,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":25,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":26,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":27,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":28,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":29,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":30,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":31,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":32,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":33,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":34,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":35,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":36,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":37,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":38,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":39,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":40,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":41,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":42,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":43,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":44,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":45,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":46,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":47,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":48,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":49,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":50,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":51,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":52,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":53,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":54,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":55,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":56,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":57,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":58,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":59,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":60,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":61,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":62,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":63,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.wvg1 b/wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ee1a1ad0d5b3d8835c66827f931d56c10abd0c0e GIT binary patch literal 9192 zcmeI$c{r5Y9{})oEMuu;U$T~M$k^91wlS2wuB8;=GO}cwD@#md$t@MqsE|qAlB7kM zsVtQe$$pKHHR5XG-XfCv%{zMimgo1!J^$Xvd7ks0_dW0De4ROS-ZSUr;clygf*`2A z8$Pa-NgM}JD3k??142QZ5C?>3)pN0O(vQr+DtTEMu45-&C>A+|+eYW}KvJxVm530e z01cyt%ze*um1*@`ct~LzaEu*)#GDw|{b*e#SW z#1$5)ajX7T>lb`xZ`z$OsXInhJECqG>Lkm4vJ8J5sl)C!+`lF7T}sMdb9d^5HSG~tckUTo>y)Y4SVk>~eRD|wR5 z8tHA$v84ow@cY&JrLN>N`6RY1F{&}bhFQzG_NX6E2SHGZZ^7ov% zVUd{6KmFR>io^c?3la}iHDBWujJ{fJmln`kwLqvGzDc3p;BNCyM~8gAXZ#*QNK8WKZVJ4eA29+=v6W966AI^NPNSqNK zfqsJ|QhDYE+msNO`jtDk@bTO90ClG>@yh#nr(C0H?P}4zcCzcNxMPT`^C0oG+85)C zhAqYU^|SG@Id9&CXGPG*aKZzVtp-60lB@Gznp&i_<1fCp;-NaJuYsqcy|~>dk?)yQ zac48$^;LNR$ltXl3rB3)z}c2nQgM{yPb%TA7sg5D+iork=529C$Y+?b=b!am`^zJH z-1omedD5!ySUK)W+P?Fc8Dc7#X-6zxzoiOsbA{1F${pUK=Dk77%cFr#dPV^weeI<( zryo8yH;{2CMckFc9i;c8_}`Cz+&zouS;~_aeDx^5Fiqg}%Wl!q^e?7}llW3_)H}~o%s$rOhg=8em#lP#m##FjACy;7OSoSGz}5%~5cJ(*fQuKS>Sw_Ze`Ra3iOYnk8=ID_})lB7st~Z_OAP|Obq(UuMt{*y|%%xmFRh`OqH1G%qtzJoN;65ghnJ1Z}3o1sFX7;Wm(J&f8by{ z#_Z9b#hErQOO=L#GkJM-zGCwV4`chhyRkAGN zP&ZFDn==Qj6AX`Oa7mA6%qTP$EjZYXBvE6+f3a2_MOHnhKmMh)!l1&n;muvdZGz_Hwbj1ZlYQxR@nwUa{&5)|$JLTQ54*qpWF#TwhB#;J zuh`&E=q!y*H^cT^J*jyxVA(!at0_cyFrcdrS8s;6$&x!C$b)fLD(~vvyWfI4ryj7J z`JI+G*O4Udk)X$DL0m%q{IwHIF_SB*{(cWHTvv}>9a8%rl%Clj}bW)CHDv(j0b2ubzg8J~h zi!o)`5OFb!XgZ#6AoVgseCLN7*ofp~*+qT~LXtiozNZ&uzlgY0UE?r~?E)6O*~KO; zhOtc>Ro?2Hb1UpKOBR~Xp(TwY?x5SfCspfQ83(#8sMKv`I!l8srWNV6GiG#~pD+bo ztLxt=X*-VodOLr^g!^@2nh6~%P2S|-mDlKSYkvefs^vHmFZ>TwaDcSG&vLtW5@}q> zT4YkRH!%6_fK#SH&On+F261EaMWKAoOHSLjtt*j@qll0>r-#zcVYei5(MNo#q5BZ$ z81d;^awA5#K6)xD@tV_mdUa%4Hq^l@))Icv1tYood^|Ik;Hp?4^u*~@~TKVAce!+c;ZiUMJOU-J!k3^=w)n5F$`s3NBuMlVN zkj<=p-x>Iv!5F5I5|SEK$tMS%IA#y)KQ$;4C;B7qOOj@nyHLCJZ71xxR-)7sZt49S zhy(&<&q&WvY9-I=yqCVT@m;k=)p$x&{N<+3qYL$-*^5G*gFLniO?fjR`sd+zaL_Ci z1f_C9kOdlo8u%bcPym9IL|8XiJHHZn*0m}GS!=QG8?*M6RxIzpIxm1*qo5aZa^K}l zUwnsueBsOr#m=m7?2=Wm6MT=ok7ci>D|IhciXTU~CER9p=L&bufAt#0x+MyUa4 zD~UZEECFA!4)A>zU>`)`OHuaz_y=Yea35CEcUD5qk^MCaf@|RfvCdX{^Y72}|2)TP ziEt=p_NY6rkS(=%oR@44{_< z^m2e+9?&ZQ`ptlT3!qm7^h$tU8PKZ$dR0J=0rYBsULDYH1@sz#9t-F-0lgNW*9P=D zfL<5S>j8RwKyLu(4FSCopf?8eCV+k$px+MYO#wX)(3=5za{!OLH?TM8f8zlA2-bhB z6r5Jx9U@roTJZT={n|Ld?}lshVePqCTOa<}>mmFz0k8M}o7d`B#$;_A*2dvKpN+No Pur?q5Df1y9%+l&#mZ#bH literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.json b/wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.json new file mode 100644 index 000000000..1ac044fb4 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.json @@ -0,0 +1,2851 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":512,"n_paths":1,"n_items":256,"n_keys":2048,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":1285760} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4}, +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":4} +], +"keys":[ +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,0,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,1,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,2,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,3,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,4,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,5,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,6,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,7,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,8,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,9,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,10,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,11,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,12,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,13,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,14,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,15,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,16,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,17,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,18,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,19,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,20,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,21,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,22,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,23,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,24,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,25,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,26,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,27,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,28,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,29,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,30,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,31,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,32,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,33,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,34,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,35,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,36,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,37,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,38,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,39,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,40,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,41,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,42,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,43,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,44,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,45,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,46,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,47,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,48,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,49,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,50,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,51,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,52,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,53,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,54,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,55,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,56,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,57,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,58,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,59,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,60,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,61,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,62,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,63,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,64,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,65,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,66,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,67,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,68,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,69,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,70,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,71,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,72,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,73,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,74,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,75,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,76,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,77,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,78,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,79,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,80,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,81,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,82,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,83,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,84,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,85,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,86,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,87,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,88,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,89,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,90,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,91,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,92,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,93,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,94,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,95,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,96,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,97,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,98,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,99,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,100,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,101,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,102,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,103,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,104,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,105,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,106,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,107,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,108,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,109,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,110,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,111,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,112,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,113,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,114,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,115,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,116,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,117,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,118,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,119,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,120,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,121,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,122,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,123,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,124,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,125,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,126,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,127,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,128,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,129,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,130,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,131,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,132,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,133,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,134,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,135,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,136,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,137,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,138,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,139,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,140,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,141,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,142,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,143,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,144,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,145,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,146,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,147,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,148,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,149,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,150,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,151,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,152,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,153,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,154,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,155,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,156,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,157,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,158,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,159,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,160,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,161,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,162,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,163,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,164,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,165,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,166,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,167,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,168,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,169,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,170,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,171,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,172,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,173,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,174,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,175,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,176,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,177,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,178,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,179,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,180,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,181,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,182,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,183,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,184,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,185,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,186,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,187,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,188,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,189,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,190,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,191,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,192,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,193,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,194,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,195,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,196,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,197,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,198,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,199,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,200,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,201,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,202,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,203,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,204,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,205,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,206,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,207,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,208,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,209,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,210,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,211,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,212,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,213,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,214,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,215,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,216,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,217,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,218,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,219,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,220,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,221,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,222,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,223,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,224,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,225,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,226,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,227,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,228,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,229,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,230,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,231,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,232,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,233,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,234,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,235,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,236,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,237,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,238,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,239,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,240,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,241,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,242,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,243,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,244,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,245,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,246,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,247,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,248,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,249,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,250,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,251,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,252,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,253,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,254,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,255,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,256,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,257,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,258,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,259,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,260,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,261,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,262,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,263,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,264,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,265,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,266,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,267,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,268,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,269,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,270,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,271,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,272,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,273,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,274,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,275,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,276,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,277,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,278,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,279,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,280,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,281,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,282,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,283,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,284,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,285,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,286,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,287,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,288,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,289,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,290,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,291,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,292,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,293,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,294,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,295,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,296,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,297,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,298,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,299,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,300,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,301,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,302,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,303,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,304,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,305,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,306,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,307,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,308,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,309,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,310,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,311,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,312,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,313,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,314,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,315,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,316,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,317,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,318,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,319,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,320,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,321,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,322,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,323,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,324,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,325,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,326,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,327,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,328,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,329,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,330,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,331,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,332,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,333,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,334,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,335,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,336,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,337,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,338,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,339,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,340,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,341,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,342,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,343,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,344,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,345,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,346,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,347,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,348,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,349,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,350,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,351,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,352,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,353,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,354,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,355,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,356,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,357,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,358,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,359,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,360,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,361,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,362,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,363,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,364,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,365,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,366,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,367,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,368,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,369,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,370,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,371,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,372,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,373,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,374,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,375,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,376,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,377,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,378,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,379,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,380,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,381,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,382,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,383,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,384,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,385,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,386,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,387,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,388,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,389,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,390,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,391,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,392,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,393,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,394,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,395,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,396,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,397,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,398,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,399,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,400,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,401,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,402,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,403,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,404,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,405,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,406,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,407,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,408,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,409,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,410,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,411,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,412,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,413,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,414,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,415,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,416,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,417,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,418,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,419,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,420,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,421,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,422,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,423,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,424,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,425,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,426,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,427,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,428,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,429,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,430,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,431,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,432,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,433,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,434,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,435,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,436,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,437,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,438,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,439,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,440,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,441,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,442,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,443,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,444,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,445,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,446,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,447,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,448,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,449,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,450,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,451,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,452,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,453,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,454,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,455,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,456,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,457,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,458,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,459,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,460,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,461,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,462,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,463,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,464,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,465,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,466,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,467,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,468,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,469,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,470,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,471,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,472,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,473,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,474,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,475,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,476,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,477,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,478,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,479,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,480,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,481,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,482,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,483,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,484,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,485,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,486,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,487,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,488,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,489,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,490,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,491,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,492,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,493,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,494,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,495,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,496,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,497,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,498,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,499,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,500,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,501,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,502,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,503,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,504,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,505,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,506,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,507,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,508,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,509,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,510,0,[0,0,0]], +[0,0,0,[0,0,0]], +[1,0,0,[0,0,0]], +[2,0,0,[0,0,0]], +[3,510,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":1,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":2,"ty":3,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":4,"ty":5,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":6,"ty":7,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":8,"ty":9,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":10,"ty":11,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":12,"ty":13,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":14,"ty":15,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":16,"ty":17,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":18,"ty":19,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":20,"ty":21,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":22,"ty":23,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":24,"ty":25,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":26,"ty":27,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":28,"ty":29,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":30,"ty":31,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":32,"ty":33,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":34,"ty":35,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":36,"ty":37,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":38,"ty":39,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":40,"ty":41,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":42,"ty":43,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":44,"ty":45,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":46,"ty":47,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":48,"ty":49,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":50,"ty":51,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":52,"ty":53,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":54,"ty":55,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":56,"ty":57,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":58,"ty":59,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":60,"ty":61,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":62,"ty":63,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":64,"ty":65,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":66,"ty":67,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":68,"ty":69,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":70,"ty":71,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":72,"ty":73,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":74,"ty":75,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":76,"ty":77,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":78,"ty":79,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":80,"ty":81,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":82,"ty":83,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":84,"ty":85,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":86,"ty":87,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":88,"ty":89,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":90,"ty":91,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":92,"ty":93,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":94,"ty":95,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":96,"ty":97,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":98,"ty":99,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":100,"ty":101,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":102,"ty":103,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":104,"ty":105,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":106,"ty":107,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":108,"ty":109,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":110,"ty":111,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":112,"ty":113,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":114,"ty":115,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":116,"ty":117,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":118,"ty":119,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":120,"ty":121,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":122,"ty":123,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":124,"ty":125,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":126,"ty":127,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":128,"ty":129,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":130,"ty":131,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":132,"ty":133,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":134,"ty":135,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":136,"ty":137,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":138,"ty":139,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":140,"ty":141,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":142,"ty":143,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":144,"ty":145,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":146,"ty":147,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":148,"ty":149,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":150,"ty":151,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":152,"ty":153,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":154,"ty":155,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":156,"ty":157,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":158,"ty":159,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":160,"ty":161,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":162,"ty":163,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":164,"ty":165,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":166,"ty":167,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":168,"ty":169,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":170,"ty":171,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":172,"ty":173,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":174,"ty":175,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":176,"ty":177,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":178,"ty":179,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":180,"ty":181,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":182,"ty":183,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":184,"ty":185,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":186,"ty":187,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":188,"ty":189,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":190,"ty":191,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":192,"ty":193,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":194,"ty":195,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":196,"ty":197,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":198,"ty":199,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":200,"ty":201,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":202,"ty":203,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":204,"ty":205,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":206,"ty":207,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":208,"ty":209,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":210,"ty":211,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":212,"ty":213,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":214,"ty":215,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":216,"ty":217,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":218,"ty":219,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":220,"ty":221,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":222,"ty":223,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":224,"ty":225,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":226,"ty":227,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":228,"ty":229,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":230,"ty":231,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":232,"ty":233,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":234,"ty":235,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":236,"ty":237,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":238,"ty":239,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":240,"ty":241,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":242,"ty":243,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":244,"ty":245,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":246,"ty":247,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":248,"ty":249,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":250,"ty":251,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":252,"ty":253,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":254,"ty":255,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":256,"ty":257,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":258,"ty":259,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":260,"ty":261,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":262,"ty":263,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":264,"ty":265,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":266,"ty":267,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":268,"ty":269,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":270,"ty":271,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":272,"ty":273,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":274,"ty":275,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":276,"ty":277,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":278,"ty":279,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":280,"ty":281,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":282,"ty":283,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":284,"ty":285,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":286,"ty":287,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":288,"ty":289,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":290,"ty":291,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":292,"ty":293,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":294,"ty":295,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":296,"ty":297,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":298,"ty":299,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":300,"ty":301,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":302,"ty":303,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":304,"ty":305,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":306,"ty":307,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":308,"ty":309,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":310,"ty":311,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":312,"ty":313,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":314,"ty":315,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":316,"ty":317,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":318,"ty":319,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":320,"ty":321,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":322,"ty":323,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":324,"ty":325,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":326,"ty":327,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":328,"ty":329,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":330,"ty":331,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":332,"ty":333,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":334,"ty":335,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":336,"ty":337,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":338,"ty":339,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":340,"ty":341,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":342,"ty":343,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":344,"ty":345,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":346,"ty":347,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":348,"ty":349,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":350,"ty":351,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":352,"ty":353,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":354,"ty":355,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":356,"ty":357,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":358,"ty":359,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":360,"ty":361,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":362,"ty":363,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":364,"ty":365,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":366,"ty":367,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":368,"ty":369,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":370,"ty":371,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":372,"ty":373,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":374,"ty":375,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":376,"ty":377,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":378,"ty":379,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":380,"ty":381,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":382,"ty":383,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":384,"ty":385,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":386,"ty":387,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":388,"ty":389,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":390,"ty":391,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":392,"ty":393,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":394,"ty":395,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":396,"ty":397,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":398,"ty":399,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":400,"ty":401,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":402,"ty":403,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":404,"ty":405,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":406,"ty":407,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":408,"ty":409,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":410,"ty":411,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":412,"ty":413,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":414,"ty":415,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":416,"ty":417,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":418,"ty":419,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":420,"ty":421,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":422,"ty":423,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":424,"ty":425,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":426,"ty":427,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":428,"ty":429,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":430,"ty":431,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":432,"ty":433,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":434,"ty":435,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":436,"ty":437,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":438,"ty":439,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":440,"ty":441,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":442,"ty":443,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":444,"ty":445,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":446,"ty":447,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":448,"ty":449,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":450,"ty":451,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":452,"ty":453,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":454,"ty":455,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":456,"ty":457,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":458,"ty":459,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":460,"ty":461,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":462,"ty":463,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":464,"ty":465,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":466,"ty":467,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":468,"ty":469,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":470,"ty":471,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":472,"ty":473,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":474,"ty":475,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":476,"ty":477,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":478,"ty":479,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":480,"ty":481,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":482,"ty":483,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":484,"ty":485,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":486,"ty":487,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":488,"ty":489,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":490,"ty":491,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":492,"ty":493,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":494,"ty":495,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":496,"ty":497,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":498,"ty":499,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":500,"ty":501,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":502,"ty":503,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":504,"ty":505,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":506,"ty":507,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":508,"ty":509,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":510,"ty":511,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.wvg1 b/wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..e8841aabae04807c711eaf447b9e2db225a351f2 GIT binary patch literal 41098 zcmeI*WpEQ)7{>AUZE=UDd7cPZ{}#ogVCySqd2;#S<<-L*FQKIfd@*~xU0cQ!lQU2iYX>?$Juf!5dGTVEF+RZBN`#3dv|2%Zjpv5tqab^l1# zwZ49ClE5-*bph_~K`xf9)jPM&zk~C0;QSsq>wvQkIO~A34mj(8vko}xfU^!b>wvQk zIP1Xww+>i-`Wr3yoI*&?`n?ZruA#wUYv%3eLYLW(Iqu)S|2O{M-jmt>t)F4XX6C~> zVoTr5hl4&m^meCsjFo2ZC!(Qj!OTapF(aAz$cC~7GatpqjAZ7c8p;;Td^8&~l9`Wg zC|fY|F>K68Wc{fAZf|-wPV@5LbaSUY(W6`gP&?kmI3H0vJCxt#4^vR)50ewp7Q$e2^`ZUm|g+3kh>7ma6 zeMaarL7y4=EYN3#J{$Deq0a$*PUv$%pBwr-(C39dAN2X5F93Z(=nFw#82Td6dq7_l z`eM)*hrR^#C7~|`eQD@Dp)Uh{S?J3_Ump4j&{u@M67-d!uL6Bl=&M0r9r_y3*M!~+ zdT;1!L0=pCI?&gJz8>`Tp>F_vL+Bep-x&HP&^Lv?8T8GeZvlNv=zXAX1$}Gi+d$tI z`gYK_hrR>!9ii_8eP`&qK;ISmZqRp!z6bO@q3;EKZ|M6#-xvCR(D#Ra0QA1l4}^XY z^n;-v0{u|vhe1Ca`Vr8NgnktCqoE%I{aEP7K|db)3D8f3eiHPPp`QZ%ROqKcKOOoR z(9eW^7WA{Bp9B3|=>4Fd2mO5L7eK!d`bE$$hJFe3OQBx|{c`A6K)(|DRnV`7ehu_% zpx5X1oS7NKL!11=+8iZ7W#A0pNIYe^nuV{g#Hrrm!ZD`{Z;6% zL4O_k8_?f`{ucDNp}zzDUFh#Ye;@h>&_9I!5%iCte**ne=$}FV9Qqf~zl8o3^sk|R z1N~d*-$DN#`VY{5g#HuspP~N({a5I}LH`~4AJG4V{ulH?(Eo8UY{*)*+lPx?cC}>d zJqjF~{g9)#-patS*$+8-SNqA3h4w>^K8*e3U-+=lhl4&m^bw$s2z?~zBSRkr`l!%H zgFZU+F`$nLeJtqRppOlG9O&ah9}oKY&?kUCA@qr$PYit$=-r`D3Vkx@lS7{Z`jpV8 zf<86$X`oLFeLCpVL!SZqjL>I-J~Q-Lpw9|@Ht2(I+~jaTW4{Z>e=nFt!5c)#U7lytF^d8U`g}xZ{#i1_&eM#s`L0=krPw2})Ul#gu z(3gk40`wK3uLON%=&L|q75Zw>SBJg^^fjUPg5DeYTF}>qz7F(tp|1yhedrrN-w^sn z&^Ly@3G_{&Zw7sH=vzSF5_%u#TS4C%`ZmzFg}xp1?V;}geMjg!LEjnrF3@*{z8m!2 zq3;2GPw0C=-y8Zq(D#MDAN2j99{{~C^aG(E1pQ#>hd@6R`eD!yhkgX~BcUG!{b=aN zKtC4xanO&4eggCpp`Qf(Way_rKNb3E&`*bc2J|zbp9TGF=;uH`7kWSF=RrRo`UTK0 zgnkk9i=kfv{Zi@*1^sL2-$4Hs`ghR3hyDZfAEEyQ{b%UEK>ro` zZ_s~-{s;6wq5t(Cz1lx5P(`iR?ps^%?kxS^IrM6^AiIAX`2AEum7tJjT@yP0H{L~D zkq;wbkq;-~k&hq|k&h&ik&hx#k&hX(TQ3=_Eb!86+d}nItpvStKj+*(5viIV30Yxg;j z6{(7RHK~q#4XKH|mv|#zOKKxuN9rP9PwFGzKpG<7NE##GM4BSsOqwI#LRup4Bdw5c zEp3o*EA5bPFCCEYD4me+EM1WAD&3IpEj`A8ZW`6wC{`Dhv)`4}1#`B>_Pd~A(_d|Zu(e0)uSd_qlxd}2+4yt^hv zKA9#*K82=4K9#0MK8>bDKAomVK7(dNK9gofK8t2WKAUDoK8NN+K9}Z3K9A-_KA+}C zzJL})zK|A1zKD7tUsQ`BUtCKdUs6jUUs^qpFQa9VFQ?^^ub>r?ucVccucB3vucpu6o%>uG)D8)!r18);+Yn`l$yn`v|8TWCwQcod&TF)SVR?i`SUN0aYs27pH zq?eJuqF0f>rq_|bp*NAgrMHp4qj!qt*qEC^3rq7Xop)ZktrLU2H kqi>Oar|*&fpdXR{q@R)hqF<5!rr(kOp+AxTr9p=O2TjDTcK`qY literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/index.json b/wai/vector-conformance/vectors/refusals/index.json new file mode 100644 index 000000000..351debb0c --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/index.json @@ -0,0 +1,209 @@ +{ +"attack-d-2-held-sets":"two held sets of 2^25 bytes: held_len = 2^26, within the cap; the sink holds neither -> outline_not_held", +"attack-d-3-held-sets":"three held sets of 2^25 bytes: held_len = 3 * 2^25 > 2^26 -> too_large", +"attack-d-64-held-sets":"review A, attack D: 64 held sets of the largest WOS1 (held_len past 2^26) -> too_large", +"attack-e-duplicate-tracks":"review A, attack E, scaled: 512 tracks equal but for their last key, two of them equal -> payload_malformed, found by sorting", +"rich":"the payload the record-level vectors patch: accepted", +"s1-format":"step 1: format 2 -> payload_malformed", +"s1-magic":"step 1: magic -> payload_malformed", +"s1-magic-before-cap":"pair: a bad magic and n_sizes past its cap -> payload_malformed (step 1 before step 2)", +"s1-short":"step 1: fewer than 80 bytes, no readable header -> payload_malformed", +"s1-zero":"step 1: the header's zero field -> payload_malformed", +"s2-cap-before-length":"pair: n_rates past its cap and a trailing byte -> too_large (step 2 before step 3)", +"s2-cap-before-range":"pair: n_items = 0 (a step 4 range) and n_keys past its cap -> too_large (step 2 before step 4)", +"s2-cap-held_len":"step 2: held_len one past its cap -> too_large", +"s2-cap-inline_len":"step 2: inline_len one past its cap -> too_large", +"s2-cap-n_clusters":"step 2: n_clusters one past its cap -> too_large", +"s2-cap-n_glyphs":"step 2: n_glyphs one past its cap -> too_large", +"s2-cap-n_items":"step 2: n_items one past its cap -> too_large", +"s2-cap-n_keys":"step 2: n_keys one past its cap -> too_large", +"s2-cap-n_paints":"step 2: n_paints one past its cap -> too_large", +"s2-cap-n_paths":"step 2: n_paths one past its cap -> too_large", +"s2-cap-n_rates":"step 2: n_rates one past its cap -> too_large", +"s2-cap-n_sets":"step 2: n_sets one past its cap -> too_large", +"s2-cap-n_sizes":"step 2: n_sizes one past its cap -> too_large", +"s2-cap-n_tables":"step 2: n_tables one past its cap -> too_large", +"s2-cap-path_contours":"step 2: path_contours one past its cap -> too_large", +"s2-cap-path_points":"step 2: path_points one past its cap -> too_large", +"s2-cap-strings_len":"step 2: strings_len one past its cap -> too_large", +"s2-exact-length":"step 2: every count within its cap, the computed exact length above 2^26 -> too_large", +"s2-sets-total":"step 2: inline_len + held_len = 2^26 + 1, each within its own cap -> too_large", +"s3-trailing-byte":"step 3: one trailing byte -> payload_malformed", +"s3-truncated":"step 3: one byte short -> payload_malformed", +"s4-cluster-zero":"CLUSTER zero field -> payload_malformed", +"s4-design-h-large":"step 4, the header: design_h = 4097 -> field_range", +"s4-design-w-before-h":"step 4, the header: both design sides -> field_range", +"s4-design-w-small":"step 4, the header: design_w = 15 -> field_range", +"s4-dur-over":"step 4, the header: t0 + dur = 2^31 + 1 -> field_range", +"s4-dur-zero":"step 4, the header: dur = 0 -> field_range", +"s4-glyph-x":"GLYPH.x = 2^23 -> field_range", +"s4-glyph-y":"GLYPH.y = -2^23 - 1 -> field_range", +"s4-glyph-zero":"GLYPH zero field -> payload_malformed", +"s4-header-before-record":"pair: dur = 0 and an ITEM.kind = 7 -> field_range (the header first)", +"s4-item-clusters-over":"a run with n_clusters = 8193 -> field_range", +"s4-item-end-slot":"a group end's slot other than 0 -> field_range", +"s4-item-glyphs-path":"a path fill with n_glyphs = 1 -> field_range", +"s4-item-glyphs-run-over":"a run with n_glyphs = 4097 -> field_range", +"s4-item-glyphs-run-zero":"a run with n_glyphs = 0 -> field_range", +"s4-item-kind-four":"pair: ITEM.kind = 4 with ref = 0, and an inline set marked held (a step 5(a) sum) -> field_range (the record pass first)", +"s4-item-matrix-begin":"a group begin with a matrix slot -> field_range", +"s4-item-paint-begin":"a group begin's paint other than 0xFFFF -> field_range", +"s4-item-paint-end":"a group end's paint other than 0 -> field_range", +"s4-item-ref-path":"a path fill's ref = n_paths -> field_range", +"s4-item-ref-set":"a run's ref = n_sets -> field_range", +"s4-item-rule-before-zero2":"pair: rule out of range then zero@2 -> field_range (offset order)", +"s4-item-rule-no-clip":"a group begin with no clip and rule 1 -> field_range (at ref)", +"s4-item-rule-path":"ITEM.rule = 2 on a path fill -> field_range", +"s4-item-rule-run":"ITEM.rule = 1 on a run -> field_range", +"s4-item-slot-range":"a slot naming track n_tracks -> field_range", +"s4-item-t-off-order":"ITEM.t_off = t_on -> field_range", +"s4-item-t-off-over":"ITEM.t_off = 2^31 + 1 -> field_range", +"s4-item-t-on":"ITEM.t_on = 2^31 -> field_range", +"s4-item-text-path":"a path fill's text = n_texts -> field_range", +"s4-item-text-run":"a run's text 0xFFFF -> field_range", +"s4-item-unit-scale-clip":"a group begin with a clip and unit_scale = 0 -> field_range", +"s4-item-unit-scale-over":"unit_scale = 2^24 + 1 -> field_range", +"s4-item-unit-scale-zero":"a path fill's unit_scale = 0 -> field_range", +"s4-item-zero10":"ITEM zero@10 -> payload_malformed", +"s4-item-zero2":"ITEM zero@2 -> payload_malformed", +"s4-item-zero2-before-ref":"pair: zero@2 then ref out of range -> payload_malformed (offset order)", +"s4-item-zero42":"ITEM zero@42 -> payload_malformed", +"s4-key-interp":"KEY.interp = 2 + 1 with one table -> field_range", +"s4-key-interp-before-sum":"pair: KEY.interp = 2 + j with j >= n_tables, and an inline set marked held (a step 5(a) sum) -> field_range (the index range is the record pass's)", +"s4-key-t":"KEY.t = 2^31 -> field_range", +"s4-key-zero":"KEY zero field -> payload_malformed", +"s4-n-items-zero":"step 4: n_items = 0 -> field_range", +"s4-n-rates-zero":"step 4: n_rates = 0 -> field_range", +"s4-n-sizes-zero":"step 4: n_sizes = 0 -> field_range", +"s4-paint-over-alpha":"PAINT r > a -> field_range", +"s4-path-contours-over-points":"PATH.n_contours above n_points -> field_range", +"s4-path-n-contours-zero":"PATH.n_contours = 0 -> field_range", +"s4-path-n-points-zero":"PATH.n_points = 0 -> field_range", +"s4-path-point-tag":"PATH_POINT.tag = 3 -> field_range", +"s4-path-points-limit":"PATH.n_points = 16,384 -> points_limit", +"s4-path-points-limit-before-zero":"pair: n_points = 16,384 then a zero field -> points_limit (offset order)", +"s4-path-zero":"PATH zero field -> payload_malformed", +"s4-rate-den-zero":"RATE.den = 0 -> field_range", +"s4-rate-gcd":"RATE 50/2: gcd 2 -> field_range", +"s4-rate-num-zero":"RATE.num = 0 -> field_range", +"s4-rate-over-240":"RATE 241/1 above 240 fps -> field_range", +"s4-rate-p-not-integral":"RATE 7/1 at tb = 120000: P not an integer -> field_range", +"s4-set-carriage":"SET.carriage = 2 -> field_range", +"s4-set-carriage-before-zero":"pair: carriage = 2 then a zero field -> field_range (offset order)", +"s4-set-length-large":"SET.length = 2^25 + 1 -> field_range", +"s4-set-length-small":"SET.length = 31 -> field_range", +"s4-set-zero":"SET zero field -> payload_malformed", +"s4-set-zero-before-length":"pair: a zero field then length = 31 -> payload_malformed (offset order)", +"s4-size-aspect":"SIZE.h off the design aspect -> field_range", +"s4-size-w-over-4x":"SIZE.w above 4 * design_w -> field_range", +"s4-size-w-small":"SIZE.w = 15 -> field_range", +"s4-size-w-under-8th":"SIZE.w below design_w / 8 -> field_range", +"s4-t0-before-dur":"step 4, the header: t0 = 2^31 and dur = 0 -> field_range", +"s4-t0-over":"step 4, the header: t0 = 2^31 -> field_range", +"s4-table-e0":"TABLE E[0] = 1 -> field_range", +"s4-table-e16":"TABLE E[16] = 65535 -> field_range", +"s4-table-over":"TABLE E[5] = 65537 -> field_range", +"s4-tb-before-record":"step 4, the header: tb = 0 -> field_range", +"s4-tb-not-divisible":"step 4, the header: tb = 119,999 (a header value in range; the RATE's P is not an integer) -> field_range at RATE.den", +"s4-tb-over":"step 4, the header: tb = 2^20 + 1 -> field_range", +"s4-tb-zero":"step 4, the header: tb = 0 -> field_range", +"s4-text-dir":"TEXT.dir = 2 -> field_range", +"s4-text-lang-len-over":"TEXT.lang_len = 64 -> field_range", +"s4-text-lang-len-zero":"TEXT.lang_len = 0 -> field_range", +"s4-text-mode":"TEXT.mode = 3 -> field_range", +"s4-text-purpose-zero":"TEXT.purpose = 0 -> field_range", +"s4-text-ruby-len-zero":"TEXT ruby set with ruby_len = 0 -> field_range", +"s4-text-ruby-over":"TEXT.ruby above n_texts -> field_range", +"s4-text-ruby-start":"TEXT.ruby_start with no ruby -> field_range", +"s4-text-str-len-over":"TEXT.str_len = 4097 -> field_range", +"s4-text-str-len-zero":"TEXT.str_len = 0 -> field_range", +"s4-track-kind-four":"TRACK.kind = 4 -> field_range", +"s4-track-kind-zero":"TRACK.kind = 0 -> field_range", +"s4-track-n-keys-over":"TRACK.n_keys = 4097 -> field_range", +"s4-track-n-keys-zero":"TRACK.n_keys = 0 -> field_range", +"s4-track-zero":"TRACK zero field -> payload_malformed", +"s5a-clusters-sum":"5(a), new: a CLUSTER no run owns -> payload_malformed", +"s5a-glyphs-sum":"5(a), new: a GLYPH no run owns -> payload_malformed", +"s5a-held-sum":"5(a): held_len = 32 with no held set -> payload_malformed", +"s5a-inline-sum":"5(a): an inline set marked held: the inline lengths do not sum to inline_len -> payload_malformed", +"s5a-path-contours-sum":"5(a), new: a PATH_END no path owns -> payload_malformed", +"s5a-path-points-sum":"5(a), new: a PATH_POINT no path owns -> payload_malformed", +"s5a-strings-sum":"5(a), new: a STRINGS byte no block owns -> payload_malformed", +"s5a-sum-before-typing":"pair: a sum rule and an opacity key of 256 -> payload_malformed (5(a) before 5(c))", +"s5a-track-keys-sum":"5(a): a KEY no track owns -> payload_malformed", +"s5b-keys-order":"5(b): two keys of a track at one tick -> payload_malformed", +"s5b-last-key-interp":"5(b): a track's last key with interp 1 -> payload_malformed", +"s5b-rates-order":"5(b): RATEs not ascending -> payload_malformed", +"s5b-sizes-equal":"5(b): two SIZEs of one width -> payload_malformed", +"s5b-sizes-order":"5(b): SIZEs not ascending by w -> payload_malformed", +"s5c-matrix-key":"5(c): a matrix key of 2^20 + 1 -> field_range", +"s5c-opacity-key":"5(c): an opacity key of 256 -> field_range", +"s5c-slot-kind":"5(c): a matrix slot naming an opacity track -> field_range", +"s5c-translation-key":"5(c): a translation key of 2^22 + 1 -> field_range", +"s5c-typing-before-groups":"pair: an opacity key of 256 and a group left open -> field_range (5(c) before 5(d))", +"s5d-depth-five":"5(d): groups nested five deep -> payload_malformed", +"s5d-end-first":"5(d): a group end with no group open -> payload_malformed", +"s5d-open":"5(d): a group open after the last item -> payload_malformed", +"s5e-box":"5(e): a path box one unit too wide -> payload_malformed", +"s5e-ends-last":"5(e): a path's last contour end below n_points - 1 -> payload_malformed", +"s5e-ends-order":"5(e): contour ends not increasing -> payload_malformed", +"s5e-grammar":"5(e): a contour whose first point is a control -> payload_malformed", +"s5e-grammar-two-quads":"5(e): two quadratic controls in a row (implied points are stored) -> payload_malformed", +"s5f-string-c0":"5(f): a C0 control U+0001 -> payload_malformed", +"s5f-string-c1":"5(f): a C1 control U+0085 -> payload_malformed", +"s5f-string-del":"5(f): U+007F -> payload_malformed", +"s5f-string-newline":"5(f): U+000A is the one C0 control allowed: accepted", +"s5f-string-overlong":"5(f): an overlong encoding -> payload_malformed", +"s5f-string-surrogate":"5(f): an encoded surrogate -> payload_malformed", +"s5f-string-utf8":"5(f): a byte that is not UTF-8 -> payload_malformed", +"s5f-tag-double-hyphen":"5(f): a doubled hyphen -> payload_malformed", +"s5f-tag-leading-hyphen":"5(f): a language tag with a leading hyphen -> payload_malformed", +"s5f-tag-trailing-hyphen":"5(f): a trailing hyphen -> payload_malformed", +"s5f-tag-underscore":"5(f): an underscore -> payload_malformed", +"s6-held-malformed":"6: a held set that hashes right and is not a valid WOS1 -> outline_malformed", +"s6-held-not-held":"6: a held set the sink cannot obtain -> outline_not_held", +"s6-held-one-byte-longer":"6: a held set one byte longer than its length; the sink reads at most length + 1 bytes -> outline_mismatch", +"s6-held-shorter":"6: a held set one byte shorter than its length -> outline_mismatch", +"s6-inline-hash":"6: an inline set whose bytes do not hash to its record -> outline_mismatch", +"s6-inline-malformed":"6: an inline set with a bad magic -> outline_malformed", +"s6-inline-points-limit":"6: an inline set with a glyph of 16,384 points -> points_limit", +"s6-inline-too-large":"6: an inline set with n_glyphs past its cap -> too_large", +"s6-order-held-first":"pair: set 0 not held, set 1 malformed -> outline_not_held (sets in SET order)", +"s6-order-inline-first":"pair: set 0 malformed, set 1 not held -> outline_malformed (each set's checks before the next set)", +"s7-before-geometry":"pair: a missing glyph and a glyph far off the canvas -> glyph_missing (step 7 before step 8)", +"s7-glyph-missing":"7: a glyph record whose gid the run's set lacks -> glyph_missing", +"wos1-box":"check 10: a glyph box one unit too tall -> outline_malformed", +"wos1-box-empty-glyph":"check 10: a glyph with no points and a nonzero box -> outline_malformed", +"wos1-cap-before-length":"pair: n_glyphs past its cap and a trailing byte -> too_large (check 2 before 3)", +"wos1-contours-cap":"check 2: contours_total = 2^22 + 1 -> too_large", +"wos1-contours-over-points":"check 4: n_contours above n_points -> outline_malformed", +"wos1-ends-last":"check 7: the last contour end below n_points - 1 -> outline_malformed", +"wos1-ends-order":"check 7: contour ends not increasing -> outline_malformed", +"wos1-flags":"check 1: a reserved flag bit -> outline_malformed", +"wos1-format":"check 1: format 2 -> outline_malformed", +"wos1-gid-order":"check 5: gids not strictly increasing -> outline_malformed", +"wos1-glyph-zero":"check 4: a glyph record's zero field -> outline_malformed", +"wos1-grammar":"check 9: three cubic controls in a row -> outline_malformed", +"wos1-grammar-one-point-control":"check 9: a one-point contour whose point is a control (P_0 is on-curve in every contour) -> outline_malformed", +"wos1-length":"check 3: one trailing byte -> outline_malformed", +"wos1-magic":"check 1: magic -> outline_malformed", +"wos1-n-glyphs-cap":"check 2: n_glyphs = 65,537 -> too_large", +"wos1-n-glyphs-zero":"check 2: n_glyphs = 0 -> outline_malformed", +"wos1-notes-cap":"check 2: notes_len = 2^20 + 1 -> too_large", +"wos1-notes-utf8":"check 11: notes that end inside a UTF-8 sequence -> outline_malformed", +"wos1-notes-zero":"check 2: notes_len = 0 -> outline_malformed", +"wos1-points-16383":"check 4: a glyph of exactly 16,383 points: accepted", +"wos1-points-16384":"check 4: the same glyph with one more point, 16,384 -> points_limit", +"wos1-points-cap":"check 2: points_total = 2^22 + 1 -> too_large", +"wos1-points-limit":"check 4: a glyph of 16,384 points -> points_limit", +"wos1-points-limit-before-gid-order":"pair: a glyph of 16,384 points and gids out of order -> points_limit (check 4 before check 5)", +"wos1-points-limit-before-zero":"pair: one glyph with 16,384 points and a zero field -> points_limit (n_points first within a record)", +"wos1-points-no-contour":"check 4: points and no contour -> outline_malformed", +"wos1-set-a":"an outline set with lines, quadratics, cubics, a hole, an empty glyph and a one-point contour: accepted", +"wos1-short":"check 1: fewer than 32 bytes -> outline_malformed", +"wos1-sums":"check 6: n_points not summing to points_total -> outline_malformed", +"wos1-tag":"check 8: a tag of 3 -> outline_malformed", +"wos1-zero":"check 1: the zero field -> outline_malformed", +"wos1-zero-before-points-limit":"pair: glyph 0's zero field and glyph 1's 16,384 points -> outline_malformed (records in order)", +"wos1-zero-glyphs-before-points-cap":"pair: n_glyphs = 0 then points_total past its cap -> outline_malformed (field order)" +} diff --git a/wai/vector-conformance/vectors/refusals/rich.json b/wai/vector-conformance/vectors/refusals/rich.json new file mode 100644 index 000000000..6021b85bc --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/rich.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/rich.wvg1 b/wai/vector-conformance/vectors/refusals/rich.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..57ea3710cacf63410aebea69adabc9fb12ff6141 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${Cqa<1z)TB>@jcE$4^w!&1#y{sKZN~S6UlP=Av!$@X~ uNK`jYL(umRbJpbTOd_wTQ_Rwf0+pafNz+BvxoN5@a#1B|7)KIqYu-PfYT@7j literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s1-format.json b/wai/vector-conformance/vectors/refusals/s1-format.json new file mode 100644 index 000000000..a8a9c3d9d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s1-format.json @@ -0,0 +1,34 @@ +{ +"header":{"magic":"WVG1","format":2,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":1,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234516} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s1-format.wvg1 b/wai/vector-conformance/vectors/refusals/s1-format.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..56e7708dc99a02964971de1d5593dd9d7d13122f GIT binary patch literal 186 zcmWF!b2nsSU|=|Kg%LQ2bX m{bxj04K$7!ssn63)Obb)kSjpo|9=P#A|b9~1d1U8h&%u?Wg3tG literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s1-magic-before-cap.json b/wai/vector-conformance/vectors/refusals/s1-magic-before-cap.json new file mode 100644 index 000000000..7e9eaefa3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s1-magic-before-cap.json @@ -0,0 +1,3 @@ +{ +"raw":"5856473101000000c0d4010000000000c0d4010080026801090100000100000000000100010000000000000000000000000000000100000004000000000000000000000000000000000000000000000080026801149403001900000001000000c81e1eff01000400000000000000000000010001030000000000000001000000000100010000000001000200000000000000ffff00000000000000000000c0d4010000000100ffffffffffffffffffffffffffff000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s1-magic-before-cap.wvg1 b/wai/vector-conformance/vectors/refusals/s1-magic-before-cap.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d9464654cc20788fe186de4b696d7f74fe744580 GIT binary patch literal 186 zcmazDb2nsUU|=|K1w=yV2Br)~P9PT|!U(0o(qIB4&Vt~gut0i6rZ6)|0!2aUPRPmq lXGB&FG>#dn18hFjct!>$sObOyPzI2KxQdbCKMH`z0{}O98khh8 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s1-magic.json b/wai/vector-conformance/vectors/refusals/s1-magic.json new file mode 100644 index 000000000..095193b08 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s1-magic.json @@ -0,0 +1,34 @@ +{ +"header":{"magic":"WVG2","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":1,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234516} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s1-magic.wvg1 b/wai/vector-conformance/vectors/refusals/s1-magic.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..6789d3ec3bac6c51fc4f7a7ecee5f10d0797b96a GIT binary patch literal 186 zcmWF!b2nmSU|=|K1w=yV2Br)~Mj#g=!U(0o(qIB4&Vt~gut0i6rZ6)|0!2aUPRPmq lXGB&FG>#dn18hFjct!>$sObOyPzI2KxQdbCKMH`z0{}8+8jt`0 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s1-short.json b/wai/vector-conformance/vectors/refusals/s1-short.json new file mode 100644 index 000000000..7c2a203a1 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s1-short.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d401008002680101010000010000000000010001000000000000000000000000000000010000000400000000000000000000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s1-short.wvg1 b/wai/vector-conformance/vectors/refusals/s1-short.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..c04de2f31109df70154f459a860746d357ac8608 GIT binary patch literal 79 pcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!U(0o(qIB4&Vt|~vjAeU1x5e> literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s1-zero.json b/wai/vector-conformance/vectors/refusals/s1-zero.json new file mode 100644 index 000000000..35060beb2 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s1-zero.json @@ -0,0 +1,34 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":1,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,1,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234516} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s1-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s1-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d1c366976579649d754d8525628c518c45150d05 GIT binary patch literal 186 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!U(0o(qIB4&Vt~=SYYKKy&_YX86<(CAb}Hd ma{n2TRRfJ@$GWc literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_paints.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_paints.json new file mode 100644 index 000000000..d21f1ebba --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_paints.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010110010003000200040000000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_paints.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_paints.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..be3e6f166bc863fe7c99d52460ec444c14009f28 GIT binary patch literal 80 vcmWF!b2nsUU|=|K1w=yV2Br)~Fc4s5U}j)qU;&DQFcT8yfQo5>1d#v$ak&MZ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_paths.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_paths.json new file mode 100644 index 000000000..896bb9a93 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_paths.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000110040000000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_paths.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_paths.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..443aec6429871c29cd61ef479c7f8eea8bf97bc2 GIT binary patch literal 80 wcmWF!b2nsUU|=|K1w=yV2Br)~5MW|pWMF1s6kq|0gD?{k=75T6fdr8N0C8Uhod5s; literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_rates.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_rates.json new file mode 100644 index 000000000..b61abd499 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_rates.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010501010200010003000200040000000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_rates.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_rates.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b292255a6281817bf78b2c7daa92efe5e40c2b GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~Mpi~fCI&_ZW(Fn(7N9r?Ga+FPsF)T=5D5SPZ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_sets.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_sets.json new file mode 100644 index 000000000..e9dac3582 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_sets.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010141010200010003000200040000000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_sets.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_sets.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..8df9a0e462657c343790efd20f48c48e248010d1 GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~Mn*?QCI&_ZW(Fn(7N9r?Ga+FPsF)T=5D5SPd_4uu literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.json new file mode 100644 index 000000000..c6a75507a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801090101010200010003000200040000000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..f05a3d06a444e2391689eabc4bab089605810473 GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~PDVyXCI&_ZW(Fn(7N9r?Ga+FPsF)T=5D5SPaD4@q literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_tables.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_tables.json new file mode 100644 index 000000000..954843605 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_tables.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101210200010003000200040000000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_tables.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_tables.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..037fccee20174b102550dc7a71403a899db7a6cc GIT binary patch literal 80 xcmWF!b2nsUU|=|K1w=yV2Br)~AW&ptU}RusU}9haii0o{66S!4X@LZh004De1+D-9 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-path_contours.json b/wai/vector-conformance/vectors/refusals/s2-cap-path_contours.json new file mode 100644 index 000000000..341ec26ac --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-path_contours.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000400000002000000020000000100100008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-path_contours.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-path_contours.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..c539c14c960ba776b3d985e6ac0895ef303405b9 GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~5MW|pWMF1sVqgJ^gD?{mGcpJ;a6rYhK!QjB0B}JC Aod5s; literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-path_points.json b/wai/vector-conformance/vectors/refusals/s2-cap-path_points.json new file mode 100644 index 000000000..ccaf9aade --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-path_points.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000400000002000000020000000200000001004000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-path_points.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-path_points.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..8f9c08de397a37096ed2bc4b6ab9e7a306057102 GIT binary patch literal 80 ycmWF!b2nsUU|=|K1w=yV2Br)~5MW|pWMF1sVqgJ^gD?{kW@K;xi)n!bkpKX5l?BHD literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-strings_len.json b/wai/vector-conformance/vectors/refusals/s2-cap-strings_len.json new file mode 100644 index 000000000..423c5011c --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-strings_len.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000400000002000000020000000200000008000000010040002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-strings_len.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-strings_len.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3a60a413e5bec383b170c76888d7f0b8d13b100c GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~5MW|pWMF1sVqgJ^gD?{k<^Zx885|h2K!QjB0CNEa A%K!iX literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-exact-length.json b/wai/vector-conformance/vectors/refusals/s2-exact-length.json new file mode 100644 index 000000000..cf664baf2 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-exact-length.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000000400002000000020000000200000000004000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-exact-length.wvg1 b/wai/vector-conformance/vectors/refusals/s2-exact-length.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b10a308a728779878cfd2f04cec7689dc96a8785 GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~5MW|pWMF1sVqgKwH~?7;aLmBq02bE*2_gXid|d_t literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s2-sets-total.json b/wai/vector-conformance/vectors/refusals/s2-sets-total.json new file mode 100644 index 000000000..6a0a73fdc --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-sets-total.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d40100800268010101010102000100030002000400000004000000020000000200000002000000080000000400000000000002010000020000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-sets-total.wvg1 b/wai/vector-conformance/vectors/refusals/s2-sets-total.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..e171a6f0da534abf90cb1e754f2e50247015e845 GIT binary patch literal 80 zcmWF!b2nsUU|=|K1w=yV2Br)~5MW|pWMF1sVqgJ^gD?{k=75TUgn&9hQeXf8Y&QjG literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s3-trailing-byte.json b/wai/vector-conformance/vectors/refusals/s3-trailing-byte.json new file mode 100644 index 000000000..77c0c4c8f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s3-trailing-byte.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010100000100000000000100010000000000000000000000000000000100000004000000000000000000000000000000000000000000000080026801149403001900000001000000c81e1eff01000400000000000000000000010001030000000000000001000000000100010000000001000200000000000000ffff00000000000000000000c0d4010000000100ffffffffffffffffffffffffffff00000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s3-trailing-byte.wvg1 b/wai/vector-conformance/vectors/refusals/s3-trailing-byte.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..39a3508107dbe390f75ddbdff1677a0057627b12 GIT binary patch literal 187 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!U(0o(qIB4&Vt~gut0i6rZ6)|0!2aUPRPmq lXGB&FG>#dn18hFjct!>$sObOyPzI2KxQdbCKMH`#0{~1u8jk<~ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s3-truncated.json b/wai/vector-conformance/vectors/refusals/s3-truncated.json new file mode 100644 index 000000000..dcf5aadf4 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s3-truncated.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010100000100000000000100010000000000000000000000000000000100000004000000000000000000000000000000000000000000000080026801149403001900000001000000c81e1eff01000400000000000000000000010001030000000000000001000000000100010000000001000200000000000000ffff00000000000000000000c0d4010000000100ffffffffffffffffffffffffffff0000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s3-truncated.wvg1 b/wai/vector-conformance/vectors/refusals/s3-truncated.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..71339e0bb1669ea6c6c10f4c028956c8672c817a GIT binary patch literal 185 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!U(0o(qIB4&Vt~gut0i6rZ6)|0!2aUPRPmq lXGB&FG>#dn18hFjct!>$sObOyPzI2KxQdbCKMDZL0{|Bw8jk<~ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-cluster-zero.json b/wai/vector-conformance/vectors/refusals/s4-cluster-zero.json new file mode 100644 index 000000000..8efc186d3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-cluster-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,1,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-cluster-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-cluster-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..e5b02a1d4a00af19250c8201dbe3237df0b4729f GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^W#)bT-tWDgnWe>BR|OHh`^dY|>rP9s zI3&m=hYE=Ea>mxNJa&nLW5Tt)S4BF97&G!>%$?X{f`&Gm1mUVh)0e(~$got@^- zwa<@+U(WgRqLU|xE}ljLgm2HopC($kjQk8{ng_lP`!!b! z8kEbU@{PgB&T0FDPS3$87S8Mc^|Y(E!GQ^jD|zR?&LyB=-xo-gsN~{wjPT?bKUc_t zpk%fZ^OW>C=3uRO1|uVgwe39!;wTHjGSis3***&I>{pm7W;D~8YDfRI<)1u+wtTkF z!8HH37~efhB=4GDUEB@ZmWMSTh0#PRnwwv`_dvfl!UN(rbODR?C#<7{tN9iJ+T0z2 zi2sA}?AMWSkstR9@F&Ld6Y%*QEPfI`&tqi@9`h6Uwu{W?QW0N4pO3r z6XWJoFW6W`%#5fa?*GQ?)f?PpzGTLUdSPKtgT=CwSBQWR3xI$H*%HtGIMO}-*U_Y! zUMIAr%NS;aC#CHosCaIQ{EnJU`%%_XS=gxhUK;n3hMH}vNF{!z0{OTvpZa0-iE3nV zB8^HV@^U4KJ8~sXI=!}^dhM{GB2>ha7t7 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+on)_%bR&0zxR7@XJ%#j<`qFi?>_Qs_JJj4 z1jHgiHd$0aoYk7pV_EDX2Pb4;wM6e#iOwR%jI4}#eC>IAedj}S@a^Qw?;Eo(e!aQ9 z)BL&q`Qhm6Y5&KUJ*M!XTPWDDiEb2$-cJ+FoFKYz3JDOtJqLf5Xz3F2bC_un_&V&@ zTrFr=E|1IChvR(Cyg%sl9E@V&y#8NDyLuTOn6S8#SN`iveDe2wfs{+Gjngs0lVkjB zLly+CSzP9E^*Lr>z3~i2#*p03??DhpSqPSy#>~z3QFv>=!c;M%na)&O`mb~T;vsa- zm-jiC=KmJsyJv{x9n-6eyJ0)$;eAq7xUjf#_r88_ga^cL=scA7Ptc=;kCJb}r_J3F z$oM}P&wd>V8~I7U0Do#CKLwx9A;%Zt^Gvx+!()B|-*$=lY%1X^=<~A8m2zVmiOpS2 zV`AK#>V-U35p!dzhB==`w~H;Yn$`1S+1JLa(FdlYW@CR2np@o|8nqxS{5oDpawTDqlY8%covYeWDs^ z6ic%u5_!26M;*Bq#hqT;OPqGlP$4Q8x?ZEDs#j~59p^zSNMzJY+d-&gqEayF(u_I? xWy*+Hb)zHzeg80LP2Nf+@|rrqEWOZIF=~`FU1Xh`CaNNrRh$G-DABg&`~wl};fMeL literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-design-w-before-h.json b/wai/vector-conformance/vectors/refusals/s4-design-w-before-h.json new file mode 100644 index 000000000..2f5cb98fe --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-design-w-before-h.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":4097,"design_h":15,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-design-w-before-h.wvg1 b/wai/vector-conformance/vectors/refusals/s4-design-w-before-h.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..986e31ef507d14c9328eea787a6fc9edfa3f12ce GIT binary patch literal 1178 zcmaJ<&ubGw6n?XtCUy}mx*}fU2tq-UR6R%!7Hlbq5PyK$_PS=L$zrk_b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjo+KuZBr<|<;}bw-}~O%nOR=Cc|{P>yN|q@T}+)M z0kKGsO%@dpXSK%kSQfj)!7*94TB7%=MCTA=Mpni=zV^Jmw)3I6{_WJu?;F!Ee!aQ9 z)BL&i`Qh;E8UM$ZJ*M!XTPWDDiEb2$-cJ%uoglh+8VL}-Jr94HXmJMlS!^{ zt`;;Xmq+F6gHb+b-XC;&4o0zXUjMJ7UA+trOjumWEB|#SKKc8;K*}Z8#_1U0$uWMm zAqxW6EH3l7`W!Q`-gpKhBS>!N_aKO)ECkC;W9DZ2D7>{_VXBzXOlPVs{nt5v@en%a z%ljNm^M8x+-LpjUj_K9K-LReW@IJ08oL^YJdtbjd!UN(rbOFlyC+JbaN6EL~)8_6F zWc(kDXTOewjr_P@fIl&opMcNjkmHN+d8S+@;W0mfZ@a{NHkI%d^m*ClO1Uu&#pbT2 zF)?mV^+F!2h}jWU#J%5my?TMW!k5fAQ7oX+|A{ xGG#=px=|84koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;yN|q@{W!G* zi$j83a;Shft23rY^4LWVj>($S61`VNI*S-HvNGoJwdd{C?GMehZzo@VU!Q*Q>&@-$ z=Fip74~Jh*2S2{-GDQI0M8UdCbYqg}{S?uOV?-BDApyd-=ipBhEnGr=1~bhAUx)pg zs|5|p)yrVtgvFJ-@?Yl?P_X9|wh7~a{dFjdTGrZd%!{%gxWc>rzs zY@hvU{%1_UlNv$dCI4_!DFK3HW>t7C#A}XRILpHUozuFy|A#W!D89TD?~tu1wg=pY>H=p9O)kY>u6F< zuM^tRWehXIlhRfZR6I9Den-uw{U~dxENoPLFO7RiL(Mi-q!K?7hHFb(vdQqSf)F^4X$T~MoRYfkUBn{(8qHWFl2bUb-Z2$lO literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-dur-over.json b/wai/vector-conformance/vectors/refusals/s4-dur-over.json new file mode 100644 index 000000000..0600d14a7 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-dur-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":1000,"dur":2147482649,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-dur-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-dur-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..a7f7ec2aaf0c74082748ec846233fbc3e8911efb GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KjYuzX1fd{F{5VJtE!a{JA%1|`_PS=L$zrk_b~lw!!5(_( z&3Y8Q=^x_3LykpM@E}sXc<`8uwKe|U%x;@P>092+`~1D%&dlP%t!sja-hUGG%O;xG z9X?;Pnu5h5K{i>GL!Q+d(GzLxG6zS5d%Ld-G=Ui7vU1In8!uX`+aDWi-_N}Iu|E0o z&)YlOjo+(Z9u2;o^L~EaV+aqriH3FXxS1#VFiv#(6w#%#NC5EN1^AOh^H-3c0;f6D z*I>WlZbAK0X;_->4>O+Ge86cQT*bn9{$FymtC#+P35z><<-bnFBX8dqNENAQ<8+KL zbI?yWWC2h#OObJk`W(|@y)g$PLr7+)ywJf>7J_Bi7~X6jRd4Ngm@Y;%>`b?%|2o6Z zAF9sqvN;EAj<>kJbDl`vHM2Un8@4kX-bYmhvvZ609_aT*ctHGyE<$<#3_VKtDESsV z+SnNYjQ@k{*{>mCBR}fr;E#>u$KdlhWc7LY%qf#`c#KcL+bS@gO$B^8eO|V?QXWhL zv9Y6JOpJ$9Etkd0VrocbasMw~uU_CT@g;MesO9GObg@{n(hlJfVje1BK{my+T}#?0 z|5+MT!|Q~$bQ_l$VWzZI02K44z-_CUxECZ%mH73F>%?IOaoiO$R-#d(1mA4a#yoQd!r5kuELXVPWimdU_Se501ief(uB*s>q|4WnO A$p8QV literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-dur-zero.json b/wai/vector-conformance/vectors/refusals/s4-dur-zero.json new file mode 100644 index 000000000..0808a2557 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-dur-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":0,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-dur-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-dur-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..0668c7a7478840513c380091f26530ce5594d58d GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*vhK75 zi$j83a;ShXt23s@^4KK~jtSTHUKQyaV$8_OnAPjg+iN=?n(Nb~J3Gyv zYo8wtzn%$xeA#1)0J?>O4VUQVB+>gRqLU|xE}ljLgm2HopC($kjQk8{ng_lP`!!b! z8kEbU@{PgB&T0FDPS3$87S8Mc^|Y&(!GQ^jD|zL=&LyB=-xo-gsN~{wjPT?bKi`lA zLCGv7<|*lO%)xr&8H|h|*0%Q`h@&h7%S>bDX8S0-vtMDVn9)pUsvZ5;mVfdP+Va^x z2h;rDVtn^3k-Teqb#XUrTOQuWRYi02OZOh=_eOX?{Dv+-dH)1GO86-G76RJb9fFMi zgYoRwk#Lb8_Y3eR#_|*J`5Y{M5gY8n&c z=2S1(SVhc?s3PwF#_QD!+-1IG#)*1iVNZj_vXfVcfDj9SfCbqS&;B^lJ^t6xq?%qQ zw57`!W`rlD?INgnZi@Vlnoavr)>2v6sQO+S_mYO1ZK_Bmex?HXxG$gjVfBe>WN{+R zmP+L1N)mVEN}P0hZ9nzeVM9fzoa_3Hma1N>UGcn!tuU2wFKdU9lBvqTq)T(^Fp?P~ u64i~<5cK`SoHcnnlgMl86tncAKqaVA(sYq^Zkno!TvSOK#*swZn)eTJh2Tp7 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-glyph-x.json b/wai/vector-conformance/vectors/refusals/s4-glyph-x.json new file mode 100644 index 000000000..732a54fe1 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-glyph-x.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,8388608,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-glyph-x.wvg1 b/wai/vector-conformance/vectors/refusals/s4-glyph-x.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..35c944a5f7d1c12424996eeb1656092844fe6c99 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajR!Ar1fd{F{5VJt7Hlbq5I;a|dtI~BWHH$dyBj6cLk>Ok zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbXM^NJv%cOQ8*`@m@l z7Ka46>uFan!vhl*SMth#ol8K$zAum}QOU*W7~#n=e!d|K zf|6NE%u~|mn1l7kGZ+~|tZnZ>5Jy=EmYK%P&Gu1vXTQQ!F{7EzR6F{wE&uc(wB@sX z4yO6PW$*)%cTBG??uKp4!~3MFXkl^X?tT5<2oH$g(0M5DpP)wxA0^*HK%2WGknw*o zp8Yx!F7lIp0shoPehNOHgT+t7=b5a`z+-*_-*%DtTq@!#=<{;Tm2zVmiOpS2V`AK# z>IECCh`BLU#J%5my?TMW%9qSIQ764CX+O$ZDhnG`-%I0O(opkF6{*C}R3IPq?rZVnj?J!a@RT-FcX-*wRGGj!d tx^WtUzJHjrCU0dDc}<;SmR=O71T{*UF0#%|Q&o}6DoMjQl4x7={sE2);n@HH literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-glyph-y.json b/wai/vector-conformance/vectors/refusals/s4-glyph-y.json new file mode 100644 index 000000000..5fc4c7935 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-glyph-y.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,-8388609], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-glyph-y.wvg1 b/wai/vector-conformance/vectors/refusals/s4-glyph-y.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..925fe8b981b52a0d07580dd9bf45ed47ac954abc GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj3|*h3G! zS&yPO{X;x>$gzkD9z?2FkGWW_@%LtS+7ya!c{A_x_kKGwON%!y3nF^=kyo>?IW58B zkRX>FDj?44jOmd)c7cOq!o9s$MLL5RBeHVMqpQ!`tJ@!%Yu`@1{JuW@;@6v7+s&V= zpC1gro(g_^*=2|Tx`~E$m+1N=(fcW)T+`3#3X^a&bCFm^tX@8?pc> znWe-yC4G*0vEG=2krBk&_8tUrl!ag!HikFbht)fK9j1#B4Lj5A=)bo3lLx9To}IJL z=KmJgcTY2)XCt1~#ofr;_VmooHC9zLH@|e}o_=qH2gGma9F+G@(8Gj}l5ZiPjh!KY z_&>Ow{W=mZ^5cF1{=`^*0zPxI^^@?KkCiESj8DMZDl(o+MSKN)Uaq-P9!x{Av7=#3 zjE7UbU}F_AGop&P`x~!UFL0OnlDSUQ3k$otSS&kvhX@F<02Qzxo8svoN4iJx8y+8m3`n{)hYll| waYdrKaT)@?e-N`KZ)OsC4V{8ZFA7wG9wp5bS?8gts>nr^q+uLMjIDY90KMDf?f?J) literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-glyph-zero.json b/wai/vector-conformance/vectors/refusals/s4-glyph-zero.json new file mode 100644 index 000000000..92fd3e9ce --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-glyph-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,1,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-glyph-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-glyph-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..6c41aa94b78bd88179e6e02f67c2f387ca5f995b GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#`l}qX;Ub^<;}d$-}~*%EG^!;Dv0RaN33RFcUl7C zkRX>FDsUX?jOnpFb_u~TL2vI>k~Oz`8&9v}kNEpFIwiEd63y`LgFd4lNTX-+WU+w<&C6D?fk{0wuN=lVL^uhA`N zP%e+kHwGii)6Qo&%>z{sR|bxqLcCz?|vl8)q4y zWR?;az`Z@UOQmx}xq^m)1FN->y*Vslr+m>7mr zyzhbd4~vyV*yvN#j+)y{c)sw{I8=yHM~w} zOShrS2$<4#k)gnwBEO?%(|(k-R2DX>zL&-vqBs$Q#I@w|tvFqLsHYlo4Nsmd5hx8~4cBr{Yb usvD;v!}kwk*5vI>a$ZBH%%v9vD&Za_%@kS3&{S3AqDs;*jwFw*dH(>Ry5Zpf literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-header-before-record.json b/wai/vector-conformance/vectors/refusals/s4-header-before-record.json new file mode 100644 index 000000000..d4eceaa7b --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-header-before-record.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":0,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":7,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-header-before-record.wvg1 b/wai/vector-conformance/vectors/refusals/s4-header-before-record.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..1db83a9104ece236f7e103ccdfdd252e5bfe8f90 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;xi7m40Y6CFQBbp9j~AbfKc{tVILMdW8O(*p1f*sr)+ z(6CY&SFR1mc23(Lbb1a(v2b4hucuwT4F8$1xRO`?>s$f~_I-g=naVCs#|Tf3@$(H? z5R}bQW}dP>#~iFTp25f%Vr_d5f;h@Tu*@_>CBWD|4Dak$m?~y8)0t{V|Fz{W9za_@ z+lOoaM;PBbO(budUOn6m+m?s-NmbGO!t$Ma`n?ez5Wk^wP~Ja64--C0zJ-7`cSj)O z|6n}(4J2ITC;bBasfqj)d_D(@FT&@UtW3jWegfY%4w&z>gs-5_%QaWZjcFt{cQuWP zadT=EY^*9~$5a(}f8q7&1?~!8GUG&}u(+qeV#UcTL_mlIK)`}*iKo9E=^p*#Xi`nD z6WY>c3^T%$(sl_{JU2ytSIwn^C~K=MY}R})jr&Pc&9zjd5|HM2O8 zW=kdVay5y&ay3r6{f?h{ov^7QRL=MOW?R*+)GvA7{dSnjxSw^xNXb-XVA7>Ibr{Kv v5sB)>X$bnkLC(6onMvd|b&6T~QJ@mkC~3OL1~*MrRW7L{4dY0nZQc6|fGglo literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-clusters-over.json b/wai/vector-conformance/vectors/refusals/s4-item-clusters-over.json new file mode 100644 index 000000000..41161534a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-clusters-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":8193,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-clusters-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-clusters-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..98f8a207b01b96f6b9880779d16cc57f07220bc3 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$QSU*5*dtI~BWHH$dyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSty}29x6I7@_`TnIJ8zbkZd?{b^!5Yq=3KWr zg2f_1Hd$1HpO;lwM>5|9b{2$l2QMph20muw#h6D|pLN%E-nZAko_O(XW9IqK*SB`s zKh{1y7=JnCfB(G46h77#5;kn2>t&*M(?rLQ5uHDY00`flg*`*GcoFeg^t1rH3;h*m z3mVmGliIb>B=0k?4?5ikqgXhu|JTu`-bVjaXq?GA|8*ul`TMp&s7h5Ew_}7mNBh}< zCW2lrrP0?GA!4uaUrLeNY%rf=2{!(00qCW{$OcP1ONlyGHpE+0VW ze0d$l{f{udf0{_%HnsYg4eL1%pT(uZ`Gw^>_w;)sJRp8U=dk$vh;^9oRq_;k+T0z3 z%)-Zbwp|2l#EW(b_EaH01)J|7$CqJqPq|FPVtxYOc7^$Ds^BZ>S7Muya$y>a&0S4n zd|aH|QtqpZ*$LIf-CuaUdV{&bLuQT*fNNf3n+Wt+}l@|xlQ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-end-slot.json b/wai/vector-conformance/vectors/refusals/s4-item-end-slot.json new file mode 100644 index 000000000..8759da994 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-end-slot.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":1,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-end-slot.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-end-slot.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..dff6c7c378292688c0ec830d2ad0b4141f5cd0c2 GIT binary patch literal 1178 zcmZuv&1(}u6o0duCUy}Kjfj^xf>4m8ejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;RR|OHh|HP}=H=LGW zaY&F$4iyk*b;k5q9=pWBG2zk^$qj2T%O^W^%A_WJI}=EnC^uYPRKy!`$4&TjM9 z`jFH-bn*nz#nVWD@ZEX%Gek?5k)Oj%i@?`mzu{^@ zgGyyoxiJ{oIc9_o_6&zI5c5#C9nL~xdap(_yVaim0g^U5uP05=Nqyh zD4V6sJY{{3IaqHzgOL%$+V&mE%nQ6@2Y)`^F2NkA@8O?O2+R=Y)`HM%;me2M% zoMy6RalCiW63M%!R~L7~_IRFct14PpT)Fo^zc<1I;x}{w%KK;NB;ljvTL@@tZwMm( z55}`!N5VyZ+%LeN8p}_?=X0?5B7C05$}~LYC-Ci*n9rpWzJfk4*IX$#rlHu{(=;Z= z&8c3nv8tFGQB~akgV(DUxT}20j1%?3(!K_ZRVS|y0U;Iu0SmG%p8s{Ed;FiHNj1Gr zXiJwd%m`0PJ0(!@+!Xm8HJ|pQtfjKBQS-et?j;R1-&B!G{7eP%abG_3!`f5T$l^qr zEtSa2wIuGywK(bY+J5S_!-k4bxzP0+EmgZVd&Tn}w!&1#y{sKZN~S6UlP=Av!$@X~ vNK`jYL(un+a?Z-znM7Vwr4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSu_=gec{A_h_kQoq%q}n8xGae1&3j(WzTvb5 zi$j83a;Shft23cT^4J9qP6*fbUzF$!V$8_On6;}mMJCKA#G{ecES=0J@EWO_%6;k?8F-(eYzM=T9O5!q;cv&k!wMM1B@CEdbwu{gSH% z4J(y#<=Sv;=d}Gnr{`c43+MHDJ?-jccwoZfN?!TYxdasa^#xL8D!aHHBRo0A&o^X2 zP&P}MdCK}8bFkic1|wsLwe33y;wTHjGSis3+2*K?nRgR7lfj$S@R{ih($S~3{KZ3P z+uw2?O!I$>@x9YT@;2$4=;3YHwmiH~s*2_pmhart{~O^4;(zEIl=lzNe+geDzd}G; zdn1tXIT+7=0|^)TNxuMpY9c=cpYOrqi|~0SE7S0ppTM_MVm_Bj_zL>IT=S&dm_}l2 zPt%wfH>XCy#;Rg=OjU9BC;nc&z+K@-W}Ijg7WXw+tT=gv2newN2w0G9@#L2y-J`!9 zO{(d2LR-3wVMcgT+9`pG=cdT-s=0I!Wo?y(&6@9}aX)FQxt5Al;%6$54+rwGAJ!hJ zW)>&XY^g+Et|oC;uEt5X-|@o+(gnQFhB|487BeHVMlN--F>$@LX8{ba9{JuH;;@6uyyRDz= zpC1jsp7nlw*=Gn3x{ZcSo9Jed==~(o)G4A%XOIBk+Y9igi59OQKLbt+sBgf2&E0|q zmCC3xI~e6W^Z9_&Jh+O5^ZI`s?doN4Xu{%7Uiq&x@yI*y1yW@y+c+H~%pCNy4Osw` z%~EEZvOdSGSZ~b1$Ow|#`8^2YC=0LioV^uLTqN=$68?RR{a98-qxlS|+i~G7*tXNrx@CY#v6|f-N;@KZd+9&^78dSsU zgtl}Wmln* literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.json b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.json new file mode 100644 index 000000000..58549325e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..4972d9263bf685bf2fe08c912895a87bf6cf84a5 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejG{<7Hlbq5I;a|dtI~BWNES+b~lw!4?XnI zoAoGq(?7(6ha8Kj;6bE%^_Yv*8h>wQx7|YVEpO(1{NC@qotdS@+t&pVz5B?k**C1V zV6jM$O%@dpXSH&AB8^?)U{1KU|Efe65MxGG#;i_1@2u~BXl;Bu^YZ)V)Qewl?(VjJ zu77?!`g+d$@nxSWJm@wGHf^F?MWXkUM5j*?T|SEh2;W|WKSi`~75N#=G!J|O_G_*d zG^|v{m7BwHHfPo!bb1a(v2b4hucKYP3=d6MT*)i{bt)ct2fje6Ol2FVV}vKi`00i$ z2+C$DGf!EcV+z(A&tPN>$?WVN1aXvwV3}#m+-x6*w+<>y6*HRY^3@rC@d!HO%aDiD z{NG}H?>v#bXL|K;H*9A-yysN~bMs60AL{o;ctHGyE4koejKES7Hlbq5I;a|dtI~BWHH$dyPHa=haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVaOi7E8pTW05d{NC@qH!~~CH?ImJdi#O@X5Vz0 zg2f?0E;*EgpO-VSj*Wbm*f}Ab+kIJ}bMP5PBE~$v{;ajJ_r9_D_0)@RTQkppzP`QJ z__6Wn;o!@e;QQwTrUKhM*3FKyXjo$sYii;g0U??SEQn=nK{m#<2Tw6 z1wqmLid?&>&yhh^{vF#8V!ier1hJQepqXyW9We4Jyfe-)S&ZYk?c|Q0+VbZQp)H@S zqtpK5$N0`!B6-Ku>fmlzw>-R0E)^{-uH3z^-y7ip@f*5;#rsFBqlAx=-(Eo5`vZ{i z9E@kXhJcIsq@9C3H4&eJ&F5h8dDz^Om1$VaPvF}vFrP~Wd^vqyuDMb!OarmKuW5{r zi&HIUePuB_q_Vj83$IuIV6O5dGfvcUO9vV(R-I9X2nfCa2xyQU@$|PN-Q#~8O{(d2 zKx;aUVMe%9+AV;J`=-cmtNFASWlfcZ^@{JMaW|=}`G$&A;%6$5k9zWnA6C{?J&O}* zwp1c6*OIs`*W#qzZTYF!3hOFD=0eA>H&x|Y^@`^`XojhbyICuYluT6yCY?H>4kMW{ vB2k?<4ME>K%vqJUGKsjRPSHy@3RHp|B~2As4koejKC+3$_$Qh##P~y~gY`S(@yI-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;*Wa7ju@R(ic{A_x_kKGw%S$&d3nF^+o>#MPI32;_ zkRX>FDj?44Oz4q3c7cNv!o7nRB|3u`BeHVM+SRAs_1$;vjV~vjf8CsU_T$y9-S+qO zj}OM5Px;?I?K6ZA-A2QvOLV$C7@h!!s*KMPI^sBgf2$=!lR zl}c8*Hp(ndJ0EbG2UoFhUjMJBUA>GBOjz8>EB|#aKKXxrfmE5wE>6b?GY9>ALlyvK zvy>U9tj{qo)*Ev$l0mF(??Heg$2pT_hK=FP_F?t5ixCYw)9vWLw)n*y-BepVJLiDS z;TG5TPZP=8W>z0}!?wlYeNt68zp#Ago_=qH2gGma9F+GD(EkY^CEtQiTYF=G@qchV z`wb*qOwq9O)kY?PyR9uM^tR zZCqxAnbJ-PP|TacW>3u}!!YfrG-%bDUJ?!BmYQp;P{qwu`SRgVK5hoJN2--Zu{2vE zk(aA+)RU`G+#7V8iPsHUDn#dezuD@j+Lihx&%56V5*ZEBZV)P&s1!)LHHQvDnQ}#} t`cV=9e)unDUEWM3@)|k;mqF;O7(GgwDYC&s6IGQK-{b%Q literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-paint-begin.json b/wai/vector-conformance/vectors/refusals/s4-item-paint-begin.json new file mode 100644 index 000000000..daed1eb9e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-paint-begin.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-paint-begin.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-paint-begin.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..0eb69d7edcd8ff67cc0f5640f3bc918f5b9b5e9d GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${CqbDX8S0-vtPl5hR;lAsvZ5;mVfdP+Tv}W zgK7S6F}{12NZuuV5?$O4+m?s-aaGaW{L;M#`n?ez5Wk@dP~Ja5j}ksgzJ-7`cZVS3 z|6n}(btGKm$Nd8QiLv|yd_D(@pM=jdS($>z`~<%3BJ;Ua#8=Sg<(ezy#xxY0yPC$t zxH;7eHdYZcBdUn|zwvtY0(Y4&nQ@|CSlH8GvFzj(A|S*9AYehZ#Irw+bdUdaG^wW7 z32o^zh8f{WX}bt2o|_`Sqh`~7l(keAHmbgt#=WGWW}7NfiJz%JKJLq>epr2?8d;o3 zv!xPwxst>kxe_OxUfWN-cGyr6D(AX>qou0XYF9k(VJl2!+{@Zwq-3fxFzM2qI*eq- vh(vYcGz5MBFlSBP&Lr}hI>ju#C{PJ%lr&vrotvhrA{SMXhH)g(w&wi4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Y|gc{A_h_kQo~%q%V5x+;k1-A7){zV5UH zi$j83a;Shft23s@^4KK~jtSTHUKQyaV$8_OnAPjg+iN=?n(Nb~J3Gyv zYo8wtzn%$xeA#1)0J?>O4VUQVB+>gRqLU|xE}ljLgm2HopC($kjQk8{ng_lP`!!b! z8kEbU@{PgB&T0FDPS3$87S8Mc^|Y&(!GQ^jD|zL=&LyB=-xo-gsN~{wjPT?bKi`lA zLCGv7<|*lO%)xr&8H|h|*0%Q`h@&h7%S>bDX8S0-vtMDVn9)pUsvZ5;mVfdP+VUBs z?RGHJ|13s!&l1VIrdJnt!?tDMeOy&EH@|f6fqrj<2gGma0+jbp(4&Npl5ZiP&D|l$ z_&*rWejN!H`EkDhe_|{@0iVyo;wRzrOjf4gF+YKCyU2Vl74a4HdAa6FxiJmJ=B}nO zF>X%vf{j(g%!n%D{%^cqy}(`OOJx+E%EG+Bi-YF9Zjm~ zbwXRZjA2H2Qra$pisz=t@2J_dA7w3-g^jB3rExE5sM)59RN`kUkdOQFsUKFKs74ki z(rl?jUall@N3O(4r`PsVuN^j2gvzm3{1K-rw${T wF(OgjI1NGHKg?N^w=;>nrcNnr^q+uLMw5@sn0HN~X;Q#;t literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-ref-path.json b/wai/vector-conformance/vectors/refusals/s4-item-ref-path.json new file mode 100644 index 000000000..ab08c936e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-ref-path.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":2,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-ref-path.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-ref-path.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..111380bc4b70751a70414a73a69bee7057d268e5 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+oVu@%bR&0zxR7@XJ&cn)>T17?>_Qs_6@5g zSS%7`lSKu@S*-~@mc=e{a6-7Y_o_ta5MxGG#;jd`-d^AR(A@ZT>gD&%nHRs_+}UmZ zT>t!N`1OqcY}!OOi$w3IiB6s%x_BB15WYPRe}-uBGV-&SX#w~;?AKf^ zXizSX$~Ok1e9pW-==2T*)i{btXRf2fjecCD+F37~#n=ezqYC z0@o}q^SJsPGqB!x1|uU#Zs+$Ph@&h7%SqasixNn zZRs+G8R1E3rvxgVn?kRn=8}Gxwp1E4s-BZXy||&~nkrPWmnvUA?#riMP<^5rX%tJd zB@%hL8b=+u8pWMn+e@5w&`=>N=eu5`rK;CzR~+YID@bJ2OWQ%HWTH|q>C%ik2xZEM uSaqW$0Db>3XHDKtCGwg&!7RPdS21doG+kt!n(O literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-ref-set.json b/wai/vector-conformance/vectors/refusals/s4-item-ref-set.json new file mode 100644 index 000000000..7a69e336c --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-ref-set.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-ref-set.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-ref-set.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..e130eac95367772ba65f1ce574c08fd17ddc3bdd GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}8cGrP2S>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9iG>uFang98&5SMtiI&LyB=-xo-gsN~{yjPT?bKi`lA zLCGv7<|*lW%)xr&8H|h|*0%2;h@&h7%S>bDX8S0-vtMDVn9-cuR6F|AmVfdP+Va^x z2h;rDVtn^3k-Teqb@4WATOQuWRYi02OZOh=|Bdhi@jr9{%KIniQNmZruMp7Y?hs^r z4#u-zN5VyZ+%LeN7|Tz<=X$4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;T#6@@C%0@BQAJnO$1Eaaj=2oAZ-``q__Hw|1J} z*FHWNem)g^`?SXt0dxxm8!plHNusw?M8}U2oj-{L2w$ItKTWi75&0R+G!J|o_Dil7 zG$@xxG=3u??3`Rx}Yuk4a#8DQ4Wv0R0jwVLrZ@jZ#VX7EmrZd%!KDFhaJcPD< zw$B0k|1HLMPZP=8rdJnl!?xw&eOy&EH@|e}p8nqmKM?;z=b*fQfc{JP#QX{YZSD?1 z#^+!>`*kE-ILpHKQiM)y|A#S!D89TD?~tu1wg=pY>6ko9O)kY?PyX> zuM^tRWehXIlhSq(R6I9Den-uw{U~dxENoPLFO7RiL(Mi-q!K?4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3JyuD>^vu_*|?W#)bT-tWDc+2y4hmjw~MdC$Ai8%|rW zI3&m=hYE=EawgW1aqI#ICxmPJFG_RmMJCKA#G{ecES=0Baisn=aAyBGKDvqT|Pi&YwgAgs;!SpCMYji2N*OS^&NQ`z2Qk z8dfTK<=QZ}bK3r(({nJ2h4cEno_6&%JTPH#CGULdu>=(S^#xL8D!aHHBRo0AA1h=* zP&QkcdCK}8$6&2^1_tC>4l?!~OgzsSVWu&2v&~T}1}|_XTfy37&2*;P(WkcWTs(xf zc-zNv|4%c%cbZ7vCVdkloqPI!Bm6-851qqe{Q>J=!dJeC&!rN+g1#@;JSjJ(k=WYP zG$zK)sZp@8s+i5GD(?Qo->WycEBwfe6OF>+z6OgGXIvoyLM#9R7GzsI`Q=FW=x;}p zYI>c}mM&wM5uTKGN}%GoDe}8&E*(T!TV-Lh=6h+}Pnv43r6QI1nF{2?fqd+TwMVL% z#fda3mB`E0B<{-9IO+B~e(H6?rixHG-}9SoRl8EZ4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${CqGzm9~9{J39$KQWe{fY0Y(@ssd*CM#3$n4iG6U1UC&iuelpyj*jo+?a-9b63-t z7&oVS!Nw|LW<(Wn|2JN*Uf?eCB{NRc3k!Q1ES8U1v7X>OojgqE|taH;;Rpg>d(lCxB+Sa^(r9|Q4 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-rule-run.json b/wai/vector-conformance/vectors/refusals/s4-item-rule-run.json new file mode 100644 index 000000000..c785c9a47 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-rule-run.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":1,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-rule-run.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-rule-run.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..2926841177c8eabeee0d0cfb38d4c7d1b2eb1a98 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${Cq?hZl5 z|G{|n>qxlBkNXAq6Jz-a_&l4%Pr~P!tW3dUegfZik@;LI;w$L$a?O=;V;YLhT}@+R z+??tK8>@(!5mm(f-*~-xfxFC?%s5dmEbM8pSa$LX5fEYl5U?Oy;@KZZy2t-InpD&4 zgtl}U!;J8xv|R)h&rOlvQL|}3%33N58&%&+<6hEGvrQGL#LrY9ANS=`Kde4cjVw;2 z*;0wTTuI`NT#1uTukEK^J8Y;3m2+Lc(NfiGwJVN}4XR&P`KQk&7xx!#I*?Tl4+_q9@_u literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-slot-range.json b/wai/vector-conformance/vectors/refusals/s4-item-slot-range.json new file mode 100644 index 000000000..ab27748d7 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-slot-range.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":3,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-slot-range.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-slot-range.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..f899ff35e599819cb8c523168c09d58adf2034f2 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSu@Q=InR#Eo_j_+=W_jtxWkE!5-t%tshSL@- z4heF}p#tK(oQZWLk6qy4gm7*DMTyQJ#*Dlevv&1qXMOiwYvap_=U+Exp8a@rYq#}% z{o{kt=TpJAPy0*}U~Qvd(9_o_6&%JTPH#CGYÚsa^#xL8D!VuxBRo0A&lR#D zD4VU!JY{{3Ian*6!N?e5ZF>)bILbn>%rs_hwhzNQd4;RB;WN{jYDfRI&c~}`Gw^>_w;)sJRp8U=df6Rz&cF$DESrw+S(g| zjQ@l2>^G2bk)QMn@TVs7Q}Fp5EWQYzXRJ9D+UozuFqp-NI!D7Y9D?~tu1wg=pY>Owq9O)kY?PyX> zuM^tRWehXIlhRHJR6I9Depk(W!%p?VWecLGBD}VoH~qT w#)w4q;xq*P;9t(VyqQVlHFb(v`ca?~)F^4X$Obn}RaGvjBn{(8qHW##0~!$DhaP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVauYquc2<;}d0-}}8cGrPQWmMJCKcDiyecERVAG(c#O`GU?ndt2_(eYzM=T9O5!q;cv&k!wMM1B@CEdbwy{gSH% zjjGj2_1b8X&zbiJot}eHES%Tpb+oIO(SZqzD|zKpXX2Cp*B3~+E%nQ6@2Y!~sSQs7JmZ&njE)0t{ZpE~C+A42DR zd7p!6{%8(4>`UJpJ&Qt8Xof#_;xDHXHx}VN#B=ko|GHYSZwWS z8WZE@)GXz(nwXtXP2By7zgI7CSNM?`Cz_?jeGL{XR#qW=Ld*vO7GzsI`DID_=xc}mM&wM5uTKGDxl)IDfD`3E*XYtN2Nil?m0;`h+Ar|twI%hsq*E+p?vHG^+&3e zMzJ(oB9WJ?anzHmQQRAJy~ODTEfu12zVEdSvlv5Qdlr+v1me&}K=l9Lr#tT^ZmN)Z$eD8a2XJ&EX#$_cUZ{Blt`-az0 z6i<}+;zWKpY}-+K(|q_>5E(+6?r=*a{QRc`IAV1@by{v6C(2$k)Os)bHG<&zht$N z?)Z3r{93o4&zbiJot=Xy3iI}VOV+hZ_pb?ym0bDP0|_KJ@D);JDf>7bC!8GP4>n{$ zP11F+pVgOffaxAS{Y!YD;xxoO$Hfz?RvFvH?(se?!#)L*}26#_w0KUJRrWIb5QOdp#KscC2t{+t-T(| z_#ed6uOi_iKkOIaj|}BU;PV`E{3v|Rl*<@A@(cKOisbX9h_7JJ%Xe4G#?n(;dzQw< z*j%cGJXTTDeW|FsKk<6)0(Xg*Oq{9~=JzdFEqQ|q6$oMh5U?QI>d7xp`$vC!mekVQ zgtcrLVNN)y>=Z%8xh1NtnVGZ`Wet;s^~qW(joV4x%&eHmB(=;0`e8>uu7#72Og)Pe z?Y2}Sua}c}O)tmETDw_GOU<{YW0ShyfSsERJz{?QysUnW*8ZrnhZ>~bU+4koejG{<7Hlbq5I;a|dtI~BWNES+b~lw!4>|PE zoAoGq(?7(6ha8Kj;6bE%^_Yv*8h>wQ*KR?4%bR&0zxR7@W_D%y=2byNZ{G82_Mz1l zEEWl}$)W<{tX58srLjvK%n8@_UzF$^V$8_OnDyDGoz1;>t>Kqb&%bWXJp1wL_Fn7z z=EsNQ&u6@EpAMM9gYKYU%O<)}Bzikdbn*nz#nVWD@b!84Gek?5k)Oj%i@-NvzvOB` zqe^8`xjvd?b7uWPr{`c43+MHD9qsC6bZEljN?!TYsd(i5^#xL8D%-dnBRo0APd8*i zP&P}MdCK}8Q?TB61|t(lW@qmph@&h7%S>bDW;=%;ns*a8lfj$S@R{jMwWUv;@fVMv zGrp|P;WYoZ7~eZfB=3;Ei5}jD?Tm-_ysBVfapmrP{l5`@ApVCgKzaWF{g?1n@+)|> zy*~ySpM&x2H;}NA&-(@VQ@Q*Ue7=VaUxd#yWikzq`3ZcxCFZlKgs-6Q%QjESjcF{l z_ce`)adT=EvRGBjO{gmF{lwp^7r3kZ$cz(>!qR~Ti&ZPF5FR1s0RaoLBcA-Sq<#Fi zrAaltPH0P)G0X^0O1mXc@!S-+T{RyMf~2hyzgcsgIP6DFHQ!Q!irhqb^3gy(cKzCh zY9?VM%@#}Kx=VL$2kfs(OGz@$r4 zYCn((BO=ucV;}T`qnvelE0M@+>KL>115ZV$QPOmg4Q?8%s$5o4?1zCw+q&}y4G7|3 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-text-path.json b/wai/vector-conformance/vectors/refusals/s4-item-text-path.json new file mode 100644 index 000000000..2a1c76123 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-text-path.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":1,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-text-path.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-text-path.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..8cb388948df548c827f6e2b6ecac102c36b1a265 GIT binary patch literal 1178 zcmah{&1(}u6o0duCUy}Kjfj^xf>4koejKES7Hlbq5I;a|dtI~BWHH$dyPHa=haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVauqbUf!W#)bT-tWDc*_Gw%mjw~Me#g7fn@(G> zI3&m=hYE=EawgW1Ja&PD6T-Fq=OsFW7&G!>%)_fsIvaa$TbrLxJo~aW^Yr`6n|rNq z8z1hEKAj4_emr1`0BZ*YTQ1SHBGH>^qT|Pi&YwgAgs;xRpCMYhi2N*OS_HlU`vq4E z8dfUf%G_{l=d}Gnr{`c43+MHDJ?-jk_}7HRmAvz*a|tN;;|rw9RCaMYMtE|JpDScR zP&QkcdCK}8bFfxCgOM@B+V&j;ag>E%nQ6@2_Dr_Iyqmz84BqS}Yo;^Rjy|>JFCIeM z{gjfIsEXa;{{L_){(O-@x z)$}@{EnUViBRnbXmO#aGQ{;Emd^(7-w#ve0&G*u{pET8cOGPU2GZn}O1Nq1gYwN0+ z#fda3mB`DrB<{+!IO+B~e(H6?rixIx(DR#ZRl8EZ6>+(h>k=N8IX6Z+PN>HPu=^`84G*wl(tdca0BZ;F4R-{SxP literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-text-run.json b/wai/vector-conformance/vectors/refusals/s4-item-text-run.json new file mode 100644 index 000000000..908076398 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-text-run.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":65535,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-text-run.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-text-run.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..5523b31089e46d839b0bc31f17af66e544abc540 GIT binary patch literal 1178 zcmaJ5Qdlr+(3jjJ0F(UzMXpceSPf3uQzvgmVd5( ze$@SXCiwAXj}QTL6AkOW$jxDq_ah=FPl#MRjRXMSo`*jsGItsIDR7!aeFgSwb}QK$ z9qoK+jHy}+l?HY^dPyN--8lHDFVx}alC0CRqyS0xGo|(cEn<@o9OO&_)v9@m(Mw1 z^M8x=t+OKfuA9}u-O$c)xDTp{W@Z=eJ+SXh@PPP+Es8@pYA@jqBk zzk-C1{GeZeKQxdZg3oiv>xbc!Q!XR$h%dm~E)vg|BEEt>FW+4$2TNCN>{=KX<8Y}I z^4PeV>dCme{~NE@E^rrlARJMzNB5#SRO*5T#qO5MRur^UGrExo{ndxN{nWUPTKtJy2r`2%ciK%6AqTQBi zY#H}z7SG~118T55zf6QOgaRjt*{#I?yQrP9NCnCiHlHNwc~)MP-it$pY)(itlf t(~8p&@SVe$llpe1k+;w(xU{3dB4koejKES7Hlbq5I;a|dtI~BWHH$dyPHa=haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYU4L(8*Q6-E<;}d0-}}8cGrO{U{jwmU*Y9{W`=-?v zEEWl}$)W<{tk#4c$zm5cI3Zlye_o<9h%qB8V;)|8(%IO1+uHnm;@Ow2nWx`h-rQ?_ z+xT#Q^y!rM_2U6kc+edbY}rKDibQXwiH;v5I)4%g5WYGKe}-u3BJ#7CX%YAa>=#@u zXjrMFmAPS>&zbiJot}eHES%Tpb+oIO;n;-5mAvw)Gx5m#;|rw9RJL(DMtE|JpKZv3 zplp^h^OW^HW?;SX3`SB&ZjaxAqbx*eYNj!Bv;8+-;7kT@R>NneGu4(pbOveG@&r4cj>n?~|&6g~gTIclG~9_<{HzItS(bJ@j9~SIMv7(f0lb zWPA?Bv)@3%Mt;&Sz@M7PPr>JV$niz^JX0>y@R*;#w_9R9n@ac!`o3)Qq}-TBVtZfH zm>4&wMj?+?#cWDdapwpAUcJCwkR9>(rzP#9zbs9v z>2*R|x{P5)cv9Lefr{s*!0oE}cn~CQmH5q?>%?I{YO48`3RL7K%99TU@{#M;)>ShJ zBWbo+A}`mXuq)TXsN3(jvD5LJDnR8z&uz9~54$4?XnI zoAoGq(?7(6ha8Kj;6bE%^_Yv*8h>wQH%2JOI&mxm(bn zQW;gQ4MxSD#eBf&J-CXA^ZI{X?P@XjYr^7Ami*T_1r&^ZfmE5wHcrP7Z;thIg)9Kd zMwA(+tj{qo){1v9Gy)ZNaSwtx%0#ftHfC?O539Gv9j1#B&32~S(tmC65fK`EEX@33 zj`994xxRavNZvNHy0{y*3mn#ytfGa*l{@$Jdm}s`enaQLtUrJcBR)#Lg@CsAhXCXM z;Cl8wBy8j-eFy&3M1BfBpF>eU4WD-^Xa*kR6YzFRjAv5`pQF#qHdo4nX(+b$HH?Yz zaPpiYRuyw2s*1Zm@p`p@yULf$b;5I&4s@|twek)T5Mlu;V1ahTlV6s!kN&nasD{@G zZRs{HGsK(HZV6DlH${F&&8Ph+YpE=3)ODC-NjAX_Y uiR#8_2>AZLn00wGlgMl66ub1IKqcr=(oB&a4^357E~_LB<49s`-TecU+u_^* literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.json b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.json new file mode 100644 index 000000000..dea76bef3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..da6701b3f2dd2e63f8afa32988094d019b18609f GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;%kUw7Jq z#UVj1IaENL)tS&kdF&hqCxmPJ&r5U)F=k|C%!A8MI%_*`TkD^XJ^QjT^Yr`68#}FU zYai~7KAi}@e%xb<0J?>O4VUO@k?74d(a|GBXOANR!dIu^&k!x1M}8JFEdbwu{er6n z4J(y#<;rku=d}Gnr{`c43+MI!dfL^?aNmT*mAvv_=Mqrx#}`PIsqEr(jPT?bKi`lA zLD?*2<|*rQ%)xr&8H|h}*0%Q`h@&h7%S>bDX8UhE=M3JghR;lAsvZ5;mcMuaZTW1U z{b~MhF}`<_NZurU5?v6ml z|G{|n8%VgwPx=M;Qxo|q_0(XTknQ@{~SlrWKvEt+vA|S*9AYehZ#N(fibPxY>G^wW7 z32o^zh8f{WX}bg}o|_`StLD-{l(khBHfz3@#{HzJ=2|LJiJz%J-XF+Eepq{`npvDk zv!xPwxthdXxf&K8okZaYk6+|N2;q-3fxFzM2qI*eq- vh(z_`Gz9(NAZJ}(&m{7iI>jvgC{PJ%lr&vrgPW$RDwkA}hH)g(w(k7~oR;C= literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero10.json b/wai/vector-conformance/vectors/refusals/s4-item-zero10.json new file mode 100644 index 000000000..e18631636 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-zero10.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":1,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero10.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-zero10.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..7b5cd26c017ff1e4bc439b93ac6653bee6bf00cb GIT binary patch literal 1178 zcma)4ziSjh6n?XN$(ch$^h9jV5rlwT;*Ua77%(9q!ubQ#B<*=S$t_-XkKH{b#3DtC zbjDJ&(?7(*;>sW@ScpVh%WI6r^ZRCQ;{{UqmYI1!zW2SiZ)Rcs#$_cUZ$EH%=epNa z6i<}+;zoE6!g!uMp5q;a$YU6IG=RB^mv#FbCW_IDuJ^S7S4~TE*92U=ySceHm$y*3ybGHW) z{s-~2YY6y=58DOUBSY~K*qlR-ABD|cav6g~egWThk$k=s@fGa6e0QZREIqZkYiXR1 z#idrreN{Epm#Vt^3$NF1Fc&#;;#93Lw`aj>(Hmr_K;R32fCkx8Pk(#bKl;bBq?Xr^>E^`X=HJt z-H~d<^->bA=%qMW>9p!;sTDR%gv^YJHH+)}6Lr4t1vL5|U`imtI}YN~qPBxx8&8f7O-e*vN%;o$%P literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.json b/wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.json new file mode 100644 index 000000000..9217a6b73 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":1,"ref":2,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..78415d8e01456d139af5bef34091118bf43d90fc GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d$-}~*%EG^!;Dv0RaM_$do?z9Ap zLxNm#sDL=DGp5J#*d-2*3HSD173myejL6D0tJj~m*LFTM*T0>5`F&&h#jiJacA7ue zK0g|MJrn%+vd0hsbPEj|F44_NqW4ooCr=PvJdFeZ-=2p*O|)fev_B%`$BN}$5+tHmCfAUbZ#j|q` z*!KrpWK8*|Z;JEtQ3hs_&(7FKMXRrixVJXDX17`|_zDR-dRw7AMkd zsYG6`BymTs#7U>u_EWDNHdKVpxvt-6sp_@b70-Lv3R4;PvUV6LnW_v(x;2LmBbjkU uqPlS!0=|D3vnFq65_t`sf=e$7RDvEQ%@kSZp{c6KMU|vs97&9=dH(>VK;hy5 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero2.json b/wai/vector-conformance/vectors/refusals/s4-item-zero2.json new file mode 100644 index 000000000..77cc31089 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-zero2.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":1,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero2.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-zero2.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d08a70856607a85b204d3a358f6dfb98126b53a2 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;T#6@@C%0@BQAJnO$1Eaaj=2oAZ-``q__Hw|1J} z*FHWNem)g^`?SXt0dxxm8!plHNusw?M8}U2oj-{L2w$ItKTWi75&0R+G!J|o_Dil7 zG$@xxG=3u??3`Rx}Yuk4a#8DQ4Wv1b|H8CQ8O@y}EcCwk;3uRQ3+|@KD z#?7f-u(67m8Bs;t{fWOmn%u!kt=c1>9zgTYljULp>nS4H(IKCrFO~l?zh5J#=Wc^MoOkC1CuVzsl!NS vj7U^BPD9Z54|CS!%}gS%sZ-3-ivpFPMoH5}*12h_DsoXJX&6TmZEM~iqE_MI literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero42.json b/wai/vector-conformance/vectors/refusals/s4-item-zero42.json new file mode 100644 index 000000000..3f56e4707 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-zero42.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,1]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-item-zero42.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-zero42.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b4659cabdb136ffca4138c64947d70797305ca35 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${Cq?hZl5 z|G{|n>qxlBkNXAq6Jz-a_c3^T%$(smJ4JU2ytN6n`FC~K)KY*c+OjeAK$%{En}5Ibr{Kv v5sB)?X$boMVa}Sook`?1b&6SfQJ@mkC~3OLIyX&KMJ}o&4dY0nZO!`!p~>Ol literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.json b/wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.json new file mode 100644 index 000000000..f7a2c6317 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,3,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3a3a9bb49b2d6aa3e4596977667b69cb1368ce9b GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKES7Hlbq5I;a|dtI~BWHH$dyPHa=haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVaOi7E8pTi(q3_`TnIJ2NZGH?ImJdi#M_vu`?0 z!Qzl0mmJC=&gx9)u~F<22PcGUyDtlL4l%<>#F)p|pS3pj-ZwVCo_g_ZYv%dS*SGf? zKQ=x+9DF$weE)pF6ajPxMO!Y>jXcr2X`+)Sh%TN+0)%hQ!=E8qx{UlRW?BTk2KyCP z3+k6j!_r)TXy@eqte_ju0#p0?e?9h$^sS+HGr7=zJxT-=jC}#RA{AZD#Ce_^%V2HXZiDo(3a2k z(PjU!Furq^NZv8MI=CCQEf4RLs-lI(mAm)#dm}s`enS_aynloqC47|p_5#}8AApSi zgYoRwkZ_To^mFj1Ch}A8`5Y`h51(hUG7XRU34FT+=5wilFQ?DTHCM`wX&|=uHI0dJ zbE@TRtSn}SR2KJs;q~eT?kZn0<3ugDbfCdv)frWYfDj9SfCbqRPk%eoJ^shhq?%qQ zw57`!W`rlD-2$k1Zi@W2nooOC)>K(oulQaXcayrBZ>UHmex?HXs3)KJVP##_vpA7v zOC|DhEs5K5El%3qmY;g9u&yFhE_D2QQ&p~2uXx^rW|+#jo3+A7$y8-v(xoHnFp?P~ u64i;*5cIvnoK<-%lgMl86ti@rKqaVA(sYqEZknpHTvkaM#*swZs`nS3*5Tj) literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-key-interp.json b/wai/vector-conformance/vectors/refusals/s4-key-interp.json new file mode 100644 index 000000000..fd65584a4 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-key-interp.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,3,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-key-interp.wvg1 b/wai/vector-conformance/vectors/refusals/s4-key-interp.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3b366cb3652bf8c26b8029d55fb5a66f7fcc4568 GIT binary patch literal 1178 zcma)4ziSjh6n?XN$(ch$^h9jp2tq)T_@j^%222QuaQ*-_NqgQ-a!c-ZkKH}xh((GN z>5Qdlr+?+tn3e0#8>>4Xme;ptExjMWJucTe7ZITL&gAR#NlSeF-Gk_Z3oQDf^a*c}@=1-;f1C zIag)!lxp<2i_@ zUqQl0e$X$#9~#IH!RI|V{4jjZybz#?nFdNQu=|Hj{I72HKWGI6R>nA@{pwdnOLR3L~2K)`}*s%L*Z?H~W^SyD@H6V|e2 zgyq6XWxEI}&Mi^3X{OUol+{fZ)+VZ@G;Sv~GrepglTHx4F|{mCbiSn; zdA*dxO}!K+&32=jmKtHrM5vr;Rcm!Kac%NSsr0ZOraEqCjW9AgH5r&}X`ecbbVfvC tT5%eJzH^v!Qs2%r@|HTqEbS;T32KbayXXp=re<8vn4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk>Ok zW<84D^bhgiA;%&rco3;xJ?3JyuD>_4+oVu@%bR(hzxUgjSy{eyRS?m;kGz_FV6_B` zMS^UysDL=DHKE6{*d-252>14073myejL6D0>(`&RH+DZX2j5P;{JuH+;@6uyyUm{) zpC66Bp7DNs*=Gn3x{ZcSo9N~=(fb*qlP8ESo<;(IZ_mS@C0e?S{2VwfqP`CMHFpad zmdk1R#xTu!=JNrkd2kg=MtMMv@p&DNO<3H?EB|#S9(f18K&nI~8>eH0nS*||Aq#+# zSxSsk(&v~J>n-B|JB5rh<{pHOnoOD+HikFbN7Y*g9b-Jh&U9PZUmN`CL)AH6K4;A4 z{}$JG&l1VIq)(!YyJ0)W;eAq7u&}st?}2`Aga^cL=mM1YPtc=;kCJb}qpiIW!1zD7 zp8Yx!Hu95x0shoPehNOHLtZ}(pE>0+1CQ|ucsoVLv#E%$pwG)TSIUEFB)0Z6jEV7Z zsu%KDMa-pC5%+)N_38!gDqk|!iF#paUl)s2E9(#*A?Be17GzsI`(sJ__+LwdYIvQ{ zmTu!RBg~X`ihyF?6u2EVANPZ#r4qkUb)7iuMGZCIRDp`zM0xUYUp{sH>J!yS!bqAe zmdMMsDD23!FzWQ$ZtS%Eh6>QR&~+OvRlQcb;y4dmek{XY()I%-W0e3&w`S0OAQP^L tR5y%$!1oVh*5vI(BCnxiaOnk}iqNB^nIh{vG*%V4tfJTt1BtOU=O3^-;L892 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-key-zero.json b/wai/vector-conformance/vectors/refusals/s4-key-zero.json new file mode 100644 index 000000000..59fcee90d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-key-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,1,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-key-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-key-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..84255c8269d5488718b5f86e6ddd16045bb370df GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjqf*;DJk^eTi(q3_`TnIJ2T5mx2_5zdiN2l**Bb) zfH)+`C5H+ehdL8_Y#h6U;Dn&I_o_taI0i;2Fl*PJx7T++G&jDTdii~G=Ebi!cXpdU z*FQfRemxWZ__7a*kae32HeI5dMWXl9L?=%WT|CVRCVYFI{TZUg%bcI(nHCsdXZtm( z1r5sOQTfJTWaqT~nNH6E6a;zwzn*sWGSDk3AZ8c(uT6x93lDt30H1u9Psa!*2f}Qe zWdh$UKG=MHjs|O1%wS~1Vr_d5f)IreTXrhcz&;A^98{PpFq-L1wWI&q@)r-GEuZa! z+W!&YyJv~yUDK<}cLUqb;us=1CpJE^9VDUxvF_V>P_P|ffw^IV2OC|ma`n+6orD#k;v9+gZObpGb zUa+x>m>p3?-2ct5S1;_Y;KG0t^}^!528$JETp>c@SjY&rShmHpKaO;d|8+E}rq>B= z=`z5KU{cyCF%{;fIOwRktRLqsl}C+g;AKfKZK%1Xid7oqDwL1=@@WuNpQuKjq|$7e zla5?X(oU}(WL`UJsF*9~yFsI+s@G~)JnvyE%4E{Z+fl4!rgCP|rDN(SmN^iq t>Lyvl^!>w}HF-OioY&MD&(e!Sm2!=eri-kjX{IW2Nu^no#FE?Aynmwh;o$%P literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-n-items-zero.json b/wai/vector-conformance/vectors/refusals/s4-n-items-zero.json new file mode 100644 index 000000000..2845b528b --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-n-items-zero.json @@ -0,0 +1,53 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":0,"n_keys":4,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[], +"glyphs":[], +"clusters":[], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-n-items-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-n-items-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..89a79eb0ad39603ec7f76833b02e2be62834a16a GIT binary patch literal 938 zcmZ8eziSjh6n?Y2$(cn&bS-So5rlx;oyI~^7%(9q!is{Lq+NF>cZ+wsVSgw`EK;OM zXDmfK{X;A)t_-4rg-EouyvArezc;fNPiL9;>wE8eZ{Du1+?W$Y^yWQFqqnS%;A4>> zn=Bo7v^0Vv$8b4z(ZB|PW7nlB)#` z>h)3m+F-;Z@g4UEowlL$VNAc*tpZSkza}iMWI6Hbh@vB30P@JQu^n@Ga*SUopdj#! z@R-Lt+GACq=Tphz((3KIdjGso-syQ<)*r@+|7oV?sUq4r7@~`XkMr600ocGNeFy&3 z1U?0yryl1|!#A%*5N8G+^Aq^?YRqR-4WFYYw#^f{F%8Aefu=DrZce^4jy1&mh#KO~ zPy9_S;I8rFIZyb`@}W)^YgSbuB0?-e1}vOi@#L2!?c={KO{(cNpe6IpOZrZ&<%27Uiu&X&Ac iNZ^_}$1G(MsSGtrnl94krnzd!6_w?2nn<*5xqkrCda)@0 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-n-rates-zero.json b/wai/vector-conformance/vectors/refusals/s4-n-rates-zero.json new file mode 100644 index 000000000..824589ee5 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-n-rates-zero.json @@ -0,0 +1,62 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":0,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-n-rates-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-n-rates-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..805d9b611df279d43ec58b64dc4465e603237b51 GIT binary patch literal 1170 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;AgkN`3t}%5K{L~sy|aE;zO!Fpsu+>)ZSUgfSF`xV1KAeO_R(ek zad3X`G?Bb*diC%&tXmwGldPioh2=Z<^nXV9aroak2WI&Zd>HX6`4s}%+#Lao@4@+O zHxO_UpR^0GrzYZ4uz3$QzX+RWvNR2g@djp?W2%a~zwr0!1Lg`pGUtg#VR26@#1CtaRWpkdX+$a! zm#azKm8)^m?RWgt>x4}ep>n?GH`}UqrGClt?zh8K#{H}lMoOkC1ClPyp~FaKoRO$r roQ8lO9K@{4o0&vhL#LRf9|bBwjgqE|Y;e<5RppXO(lCxB+Sa|l@3P^= literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.json b/wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.json new file mode 100644 index 000000000..7aa82510f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.json @@ -0,0 +1,62 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":0,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..c3399261034636d20538906d5330daaaf0f295f2 GIT binary patch literal 1170 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmOO+`iFS%kYf=QJcv}U9&@o;7D&f3n0*7~DC);M?=CXNVRrBR&f*3&?Lkf6di`hLy^= za$`8Q{A_=~X&#)#!g2kdo;LM1JW!!=CGY&VxdasK+n5TKsqA7ZMwmJ1=LezyD4VU! zIAuM*JXs&i!N?e5bvu7S>}4TnhK=FP`ce7Leub%GM8nQhJNmCJe(_MY#j|}5*!*AP z{N7n2dDryn;ci&BIDAen70oX!-+Q3n8R6mZ+qrUx z0T=N}y8wG?B0dG1=V0@Tu$hyUX;_R;z}qe{o=YWs1wAj4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFQB%&~|H9z?2FkGWW_@%LtS+7ya!c{A_h_kQo~%q%V5xGae1?MGhCzUH(9 zi$j83a;Shft23rY^4J9qjtSTHUKZ&LV$8_Om`7KiwO6-4G}peJc=3IG`uVTdx3-%< zS3f@(emxcZ__E6s0dx}u>n_ptNuqaCM8}U2oj-{L2;ZEAKTWi75&0R+G!J|o_A9Oy zG$@zfm#+;*c23(Lbb1a(v2b4hucuwT4E9Y}T*)i{buIw~d%i%bL?sueV}vKi`1yt` z2ufxtF;7XKV-D6E&tPN(v9`SjK^$cvSY{eCH`|BdoxKWE#f)Y;Q|;)#w)~R^(3a2k z*`MbB7UR38iR5k5tBbo~+w$-}t}2?FU%GQozc<1I;x}{-%KIniVZukrw-C_A&Jbk$ zAB<GTyv$|n1*6wN7I-X zH>Y~R#wucFL=|!OH(sw^;4bqeGfvbC3%eRDmYuvp1cX=s1T4s=c>2eY?$N)FCe`#h zp)Fm;Fe5xEZ52Vqb5rDZ)NI<1vX;uiM%DMyxR*54Y*R%l@iP_3hkg0P537$=Ba0Jh zwp1c7SCY6RSK_48Yx}9!4jU>$4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;KLeK{3;|GdW(0dxxm8!plHDWZ4NM8}U2oj-{L2;ZEAKSQ*55&2onv;ceq_A9Oy zG^|v{m21PXozwOQot}eHES%T>>uFan!+jGLSMth#ol8JL(fR_ZGL>DNjuD<5wdJ2WfVOW}Ijg7WXt*tT=gv2newN2w0FU@$|PN-J^dTO{(d2 zLR-3wVMcgT+Ae{L=cdT-s=0I!Wo?y(&6@9}aX)FQxt5Al;%6$54+rvzAJ!hLW)>&X zY^g+Et|oC;uEt5X-|#% literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.json b/wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.json new file mode 100644 index 000000000..16c85c2a2 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":0,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..866a7f44ed289f99210957faba938dd861f0833e GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;KLeK{3;|GdW(0dxxm8!plHBGJ2PqT|Pi&YwgAgm2EmpCMYji2N*OS^&NQ`xRFU z8dfUf%C+Ix&T0FDPS3$87S8Mc^|Y&(;l2rrD|zL=&L!aSa$g`-rm~CEF~XB0pKr*5 zplp^h^OW^D=3u??3`WKfYukGe#8DQ4Wu`H6vwaxe`B!18n9)pUsvZ5;mcMuaZTW1U z{b~MhF}`=2NZvNRdbk_5Ef4RLs-pRYH%%;jzGr$ z!Fcu?NVv#P`UUt?6Zt9ld=3_0gwHcsnTE&w1itMO^SM;QSJ3C>nk(hTG!mP;n#RPq zIW-D4Ru!{js*1b6@Ot$EcZDyRaiURJ+|yvO;^Y+~AjAS7U_rLT)8CGCkN$BqsixNn zZRs+G8R1E3y96qpnC&7!jAX`$ uMD^k{1pVM3XI4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OS(G+^{EpO(1{NC@qotfpO8>_5kR+5u;~(AFA}|-COUqM==@0}K=}GB{28Lfi^$JnrUl>|uwQbu zpkbvlu3Q_A?VPqh==2S@!bi=w5YX1%2xR;p zjAy@rgp2&7Uw}U~k)MLk=V0+g_&k%9X?V;};M*xNpGzft1$|zwxl(RSBeAuoX-tfp zQ=?#GRWUoJs<`_TuU9W{SNOshCmMyteGL{XPF^7bLM#9R7GzsI`Q=FW=x;}pYI>c} zmM&wM5uTKGN}%GoDe}8&E*(T!TV-Lh=6h+}Pnv43r6QI1nF{2?fqd+TwMVL%#fdaq zDv_6~N!*pIankK~{M74&O%=;oJZK literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-path-point-tag.json b/wai/vector-conformance/vectors/refusals/s4-path-point-tag.json new file mode 100644 index 000000000..04c02f135 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-point-tag.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,3], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-path-point-tag.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-point-tag.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..9a9c060a27d9d9c79a5c8507e6b03943375952ea GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${Cq_($gCLHw5G*r|nVapS@XmgPsbWSmovC*8Ut9jkLukuq z`y5R3e~aD9&Eux)vGA6FI4%`e@1px+ze0r4BU0OkD?^eEw@pBT$ez~^(Y_(}LYla(oW%unFkE;64>MSKN)Uaq-PZcIb5xvObR zjGI%vU}F_AGop&P{~NDYFL0Onk{KuJg@rv07RydvAp$}y00I_dOFaAINcZ?(N0VxL zozRvpW0(=1l(vhY;<+jEJ8CxVM_Ef{VWaAMY1~U1YPP8&mH3$oW9@Qs*%Ns zG+Qc>mn%u!kt=c1>9zgTYljULp>nS4H(IKCt#-xp9=5_%#=Wc^MoOkC1CuVzsl!NS vj7U^BPD9Z54|CS!?Mx!CsZ-3-ivpFPMoH5}*12h_DsoXJX&6TmZEM~?sUhLx literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.json b/wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.json new file mode 100644 index 000000000..2966d6fdd --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":16384,"zero@4":1,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..e17a4e6efe8f87df56ce2b6f015b4cd9725763bc GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3vDTg5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVauV^b);<;}d0-}}9{Gqb#O^Qs`Cw;y;l`-amJ zEDi~B$)N(`tj?Go%VU=~I3`@%ds(D&h%qB8W7e)eYp?IVZ*F`&_2S#+^z)yuZ|^pL ztbckq{BkDv{&}A%0_ZjhHeI5*NuqaCL?=%WT|A8h2;ZECKTWiF8TlE^v;ce^_A9Oy zG$@xx>uFang98&5SMth#ol8IgqH{VUkSbBh#pxK~$uWMu zAq!Z^EG6bC>2u7%dgB?4j3Cyw_aKO)ECkC;W9DZ2D7^Ep!c;M%na)%@`mZhj zvwaSx`M<^Z?pY#v$MovrZrHXwypOAj<`tvB0ugI;7^R@C*borSo|b>p2^A-Jmx3x?G%~Mr6Rt9J}=i?DL1B}*xJ)H zCdSRFUa+x>m>E$;-1~*ss~5N{e94Rx^}^!528$IZuMhzt761VYvMrwecBFg!kE2O7 zy-sLLmodx;Pf9yQQ1RRp`5iTz_M@z&vanJ0y)^D64K>?TkxKkb1@ci}KJmlqW7Wvw zM4By?$jj9v?#R_R>Gaxu>b1j$icmS<^&2f!y;i&8c@J7)D&t<(4kIN~m4Qi@=G0*% wGe#t;8>b=Y`-eGe@>V91*VHLy=|zD`P@|;jBJ12VRTa6Uk~EAXiMBQGFK_eW9RL6T literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-path-points-limit.json b/wai/vector-conformance/vectors/refusals/s4-path-points-limit.json new file mode 100644 index 000000000..0cbf242e8 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-points-limit.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":16384,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-path-points-limit.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-points-limit.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b0e8b0ea66ee58f59f0979efa1f4aae1443fc20b GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3vDTg5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVauV^b);<;}d0-}}9{Gqb#O^Qs`Cw;y;l`-amJ zEDi~B$)N(`tj?Go%VU=~I3`@%ds(D&h%qB8W7e)eYp?IVZ*F`&_2S#+^z)yuZ|^pL ztbckq{BkDv{&}A%0_ZjhHeI5*NuqaCL?=%WT|A8h2;ZECKTWiF8TlE^v;ce^_A9Oy zG$@xx>uFang98&5SMth#ol8IgqI234NR_DM;&hDg|wh6yEt)VXBzXOlPVc{nwU%@(|kc z***u;{NG}H_bidTV|sOQH*8xT-p5r%^9##&@9XzQctHGyE4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;t9d2__i_g{O9XiJFOpU zpB{|9oC>~w-UCIzYl{muT%zkmqIc6o$Bz-6KgkIud~=rl8KT9DoS)^H78u`P`xUAM z4J(y#<=Sv;=d}HqPR{`p1bO|xo_6&%+&9@mC3gIEE&&Dbbw;o%Q`zOyF@ni?{9JLC zVP&(G!Bf`fn1i*#3`WK**0%Q`2vG>JWu`H6!#)h}{HrikU^LU2YDfRI4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;=y_kQoq%q}n8xGae1?FZ~euRCo4 zaY&F$4iz|#9l601$lj5FAuO9{xjJ^6?U9Dmw9Z%K9DwvVs|mj9IL0-$4+f5Ms+rW9}dJVR&c1!c>6~=eB2Y^y^vv;sLbfvwd{g ze{8__P7}%7rdN;O2Dasao?I%LUs%3#PycVkKM?+*bG)EG@;Xd#m3W1KHg`u%hI0T9 zzrhKY^OJso{i%uk6#KXbi!ZW|nXF8+2YzC{?GpH0D)Cp)_vM-=MPnL?&0S4nVrWi{ zf{j(h?3k+J?l1m(^~UZB9vL{%C@k)2uvl^O3K0;;0!FaKvL&AWcBFgskE2O7y-sLL zmjPx3lhSsHsW3N1epk(r5^<<;Tk1P7ui75R8{4YO42ZnB)6@5e*v2;;okrN literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-gcd.json b/wai/vector-conformance/vectors/refusals/s4-rate-gcd.json new file mode 100644 index 000000000..ba4d1181d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-rate-gcd.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":50,"den":2} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-gcd.wvg1 b/wai/vector-conformance/vectors/refusals/s4-rate-gcd.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..1cbe1468ae7395aac1bb91fcaa0d9c22360b4a79 GIT binary patch literal 1178 zcma)4&ubGw6n?XtHg*vajfj^xf>4koY7f$b1zQRt#2=uxy{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;5Ei>=e_rCXLc9xfJUKK?2?j!F;uRATl z;*cPh94a8r%Nbk8^4KK~jtSTHUKMEuF-|cnV;*07-d@}J&|Lp^>gD&1=@-A=+}>&a zT>JcR`1MTiw%OcK4HB0713=;CQ4&Jn#m4}Y3y@iOwWm}vp{I_%e6 zEoe|KkIL5vBkpT^bAQn3IiR#~PM_Dy15kql6PCFPp--JB0t)th0YHgLu4d*uPmV2D z$bz6`wi2_I^gS}j3eR9<1hKaL4}v(#La@v<2WL78@9bBYDrV$!+p{?OMlAp2A++VQ zeRSD>Y>e-oC6aecuP*)#+m?s*_)^jQ!t&kw`n?ez5Wk@dSgb!`9VL8~{PqIc+#Q09 z&%t>1>qxlBkNXAq6Jz-a_Ibr{Kv v5sB)?X$boMVa}Sol}Y3^b&6SfQJ@mkC~3OLIyX&KMJ}l%4dY0nZO!`!4k_XK literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-num-zero.json b/wai/vector-conformance/vectors/refusals/s4-rate-num-zero.json new file mode 100644 index 000000000..cad7fb386 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-rate-num-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":0,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-num-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-rate-num-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3b2eb1a851d877107b5ee106c99e7a1fe2c35cfd GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsWmCW@Kf|>h3$Me&3jW@$1c~TQ=-9o{JOLTLR==~JY$rD5uPa|=T=9_o_6&zI51&xC9nL~xdasK`vR#Fm0X;T5uP05=Nqyh zD4C_iJSBaOIaqHzgOL%$+V&mE%nQ6@2Y#)Vp_A5*kGn(m4wWI&q@=qQ@TRz+8 zV4DA1jPIT$l6Ot7F7AeH%ftJ)s%UP0>D~kV-Uttf-_Qjp@1LMY2_GfjLO`3lLy+-* zFrNK75-#%NegXc(SbhRNpM%9u!snT+Ou=J*0^c^CE#GMoUqPRjYp#?V(@<>gY8n&c z=2S1(SVhc?s3PwF#_QD!+-1IG#)*1iVNZj_vXfVcfDj9SfCbqS&;B^lJ^t6xq?%qQ zw57`!W`rlD?INgnZi@Vlnoavr)>2v6sQO+S_mYO1ZK_Bmex?HXxG$gjVfBe>WN{+R zmP+L1N)mVEN}P0hZ9nzeVM9fzoa_3Hma1N>UGcn!tuU2wFKdU9lBvqTq)T(^Fp?P~ u64i~<5cK`SoHcnnlgMl86tncAKqaVA(sYq^Zkno!TvSOK#*swZn)eSh_~FL@ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-over-240.json b/wai/vector-conformance/vectors/refusals/s4-rate-over-240.json new file mode 100644 index 000000000..037854d5d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-rate-over-240.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":241,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-over-240.wvg1 b/wai/vector-conformance/vectors/refusals/s4-rate-over-240.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..920d74a25c9549060903948bae6a7bf38f6fa36d GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}UUW8n%*7$ofJ8cTZx4fD6@q54bc4n3qZ(J5c^!5X{oYfiABYErs2gihKdoPRh6ES9FWz3_i&)Tco@0)91PrUfHKK=aH>s#B+ zAFH1p48NQTzJK0jiU7Kaf_0bZ`Xtf2DWc=Yh|Zrx;tbK7v+$>h7A_(`gPG=mufu-D z)q)1)@~C`mFtT&n{-D!yFp7oq`hPv`>SeHR!s1F^`LA;cDA@A_QY9+6I2|KAImXX7 zWI<3eONn_(`W$nx-gpKhBZ#%_JqY3`3&Aqen7P?L4Dak!m?~y8)0t{V|Fz|xJb<=* zw$J`F|F;<5JxwHUn_gYq4cnH7_iz^#XU9FPU+oURc=GV6p7v6(S(S0w7>PHpSCFj&zUybu_7_ z*9mRuGKLx9NolJHDxRAnzoTZ;ew4LT7B;HBm&U!Mp=O&ZQi-3bKtAltCw^FctQuLI zNVBC9dAX9r9k~)GonG5dy>{485h~}pexs$TS8A6$?|v&xW!%f!VWecLGBD}VoH~qT w#)w39<1_?){~%{g-pnNOnmWZSy(mx#YLqlxWSyI)sv;Lvl7?|4(YEIO124koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;UaZcr)+g_kQoq$I{}htAdE$edN{b>rP9s zI3&m=hYE@{pm7W;D~8YDb^i@=qQ@TRz+8 zV4DA1jPIT$l6Ot7F5ZT1%ftJ)s%UP0>D~kV-v}Rw|Ih^}@1LMY3120@LO`3lLy++~ z7|(tk2^aZszW{$?EI$FC@4@0H;qy#ZrrgY8n&c z=2S1(SVhc?s3PwF#_!b&++}`b#)*1iVNZj_vXfVcfDj9SfCbqS&;B^lJ^t6xq?%qQ zw57`!W`rlD?INgnZi@Vlnoavr)>2v6sQO+S_mYO1ZK_Bmex?HXxG$gjVfBe>WN{+R zmP+L1N)mVEN}P0hZ9nzeVM9fzoa_3Hma1N>UGcn!tuU2wFKdU9lBvqTq)T(^Fp?P~ u64i~<5cK`SoHcnnlgMl86tncAKqaVA(sYq^Zkno!TvSOK#*swZn)eS<#^KHY literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.json b/wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.json new file mode 100644 index 000000000..aed3d5d6a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":2,"zero@1":[1,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b0d75896462fbd5fc808cb80994443a719e1ee2c GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;OrtS4DT^9##&?&<%H@B{HbbPmk=Bls}ltK?S*XmfW2Fg^#@ zv)@3%MSjvRz@M7PPr>JVu=PdwypyGAc#KcL+b%JlOC@{-eP6D5QXWhrvAL^ZOpJ$9 zqhMoIF*~NJxcdu#uNH7u_>s9zGzyD*x>&3@d4~uHu>cjYKwIMJZ%4XE|2P^{!|Q~$ zbQ_l$;!SD01SsB{BEPHV(m|B9RTegDzL&=Rq^agwDpHA`sX#s)$R~bSd#svSoJgZm ziM(7*;;vkclWxD`r(P#)stBF)J-^vjwJY^Yo_D_;rZVnloiI`|RT+?UYYrVoGUJLw t_2M)H{NNyFUEa(j@)|nDF8wG_33`+?Q)GjOrm8BJRFZ~qBr&$`{ROAp;o<-Q literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-set-carriage.json b/wai/vector-conformance/vectors/refusals/s4-set-carriage.json new file mode 100644 index 000000000..313a30c37 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-set-carriage.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":2,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-set-carriage.wvg1 b/wai/vector-conformance/vectors/refusals/s4-set-carriage.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..2ce13c85f53d459b1ef6b64d170273c575a2e288 GIT binary patch literal 1178 zcma)4J8KkC6h3!mlQoNo=!)3HD+mF}#z!G3444oQVSRv_q#bu|c8BcFEHksp5{ncm z(iuz9PJf7nMam#5ScpVh%WaIt_51GZBpXQK8P5Bh@0@$@EH2!-szl`7N6JjEISoZ} zM2Rbo6c8snLwsxyyTsrSvA6T8DCZC(BGar{x&FMly7QsF_U+Wm@9PsUe!aP~Q~$a8 z`BCrd8UM$ZJwo{4O*E~$A~#1x-j9i#JRx%NG!g)OdmjFT$oysGr?Jx<>Z`C{vs=m5 z_;`Q(##Wy*$(&CHoYhd4n6u|C4FXVG2PQ0bQS#IS^2Oix6;fp>yB3*wZVoX}$O538 zi867@_8wW36L-j{56bQQ9h5Li5?I+b2WL8}-r4WSx`@bg=Vx*3jpX>FhpKbDe2#7V z55fBOSrL6Vo7KkK(9UtFhuMU)bBp&L*#AxN1Mwfa0H*!~K8kpid<9=Nc6$KhIap7> ziiC^&uwQ^bGL#>I&wI%0N8xj)oW|f0Ux2q=B%UipdQ@SWpXZ6V|eA zEX#G2#rom3MAV)fDS^PvLZI^ sCJi03!Pw>PUxE$Jw|6!bd^IBGpQF$oCHy*F?Oo-52K{v;Q#;t literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-set-length-large.json b/wai/vector-conformance/vectors/refusals/s4-set-length-large.json new file mode 100644 index 000000000..751e3f863 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-set-length-large.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":33554433,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-set-length-large.wvg1 b/wai/vector-conformance/vectors/refusals/s4-set-length-large.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..9de30ca5457a01b9043dafa50506555f1824c8e1 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+oVu@%bR&0zxR7@XJ&cn)>T17?>_Qs_6@5g zSS%7`lSKu@S*-~@mc=e{a6-7Y_o_ta5M#znt+ngV+v~d@nj7Cvz5Kp8^WxW=JG;%F z>z^MDzn<}beA#CTAG(c#O`GUuk?8$2(a94;7f&Mr!nfz)&k!wMMt&AEEdXDK{hF%< z4a((F`Nm+B&zbiJot}eHES%T>>u6UmgRu#VD|zL=&crAGz!yll?W6G4L4~PeMl+qMw)9`;_gp-L&iV2_ z<7xhHF}{12NZvKQy0{y*a~|F&RfY2l%l97W_eOX?{Dv+-dH)1GO86-G7JS;;8-k4g zgYoRwk+6}U^b7E(Ch}A8`5bb55kAk9%QQUZC-Ci*n9rsXzJfk4+gvF(rlHu{(=;Z= z&8c3@jcExcXwt_@Py|f*KN+v1=lP=AugHWc7 uh*dXA0?_vlbJpbTR3fjb6U@>JeHEidNz+BvxoM&*a!JKW5QP$LYtBFNvEjD> literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-set-length-small.json b/wai/vector-conformance/vectors/refusals/s4-set-length-small.json new file mode 100644 index 000000000..3529b9df3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-set-length-small.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":31,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-set-length-small.wvg1 b/wai/vector-conformance/vectors/refusals/s4-set-length-small.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..9c6ddda8e6791336fd95bcb9d683a333d1cada59 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}ix*}fU2tq-U_;HXPEZ9;IA%1|`_PS=L$zrk_b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+oVu@%bR&0zxR7@XJ%#j<`qFi?>_Qs_6@5g zSS%7`lSKu@S*-~@mc=e|a6-7Y_o_r^5o1QybI`}vp10R`KQuSKoqYLybN0orH@A12 zKi5A$9DY6R|M;>G2>H-$6l~f=H;P2>r-^1x5M4Nh1PI@PXl9mZ=@RmDm}wFCI_%e6 zEoe|KkIL5vqkPW1Kj`!vjAG%u{$EGCdKrvOSX{{~|8*ul`3Js0$|cvv=@{Y3F@Clo z3j)_HF7vqh95b-q#>X~-j5FpQ1aXvwV3}#m+-x6(w+<>y6*HRYOtq!|I=|=QA#~1{ z_Zd&~e~aD9&Eu$}YpKB+2PSX{Y#U%xlP1L8My9?JVC=uyH)$+zIs*4_|g z{2z>Gzm9~B{G?xiKQ)n`g3srWX%vLLRG#xe-;wz2A7fdV#yjm&`a(FD&hAuvoRS3gHuCJ`k`V+v3?DOWMc(TAEbT z>x8y+8N-b5q_k5470*qf*HQCHKTKOH4H{L?NupldQ1eX{s@O}FFCX>gQ!l7KQH?Z; zrP&gRyj+W;j$Di4POt4HPCIC*5S0sEuhCM~tF_CH^Pm+ZGU}!6AXG9@DVTI=MjeDQ wWkjsHQ4)Z@f0(l-Z>17>O`TwtUg)bBHAvl)27gaZ<#mm4UPK;ugIXEU<+kI7_^N2B{fVzPF$&Kf&_1zDRjc=!4e&3va@$1c< z-Nw)L&yNOQ&jvrf>@!7xwGI5HOLQ|&^nQ|P>J-tXGf05&Er_P3i59OQKZBVTfUm)R z&DDbXrP8o8+aKCFb$?_)r)Oal3+MHDJ?(1MKQv)+C2KzQNCFBDe1TMvimqnnJWmca z+K>f7(WoNx6!kqa$jafh4Iwsa-$4*ZSqPSy#>~z3ad_vT!c;LMpWB|r(Wkcj`6Fn{ zXZz@~|4@wYoFkHVO|K5#hHcBk`}k7P{KE3R2l{^_{6PEE)8-2aWgS1Y(H{K$+GwcO&q28$JER3QRFEC2!)WLrG@<4E`9Uq_Q_ zdY#agE@PMxo|JY9pyIhH^4n@I?L}ErWnsPIduiNF>T0f`B9-`=3gqLSeCmglHC4~z zM4By?$jj9vZp+m;X?I(G>b1hUicmS<@#{@hxn8~Mc@LXmD&ua}3L_;`m4Qi@j;O;( wW{gNwCr(4q_l|N_*UnC21H(5^byAKWyjW)Bpeg literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-set-zero.json b/wai/vector-conformance/vectors/refusals/s4-set-zero.json new file mode 100644 index 000000000..68b4e3753 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-set-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,1],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-set-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-set-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..61ebe629e455d9ab96dc34f69a16e10d73b2e699 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;WkE!5KR}vu-DwMu zLxNm#sK9=(Gr>o4-vu})2(|r}B|5`CATkT&Ji7X?Go@@D)Cp)_vM-=MPnL?&0P&+d}vOM zg7sC!?3k+J?l1m(wP14vkBmIgC@k*jWU=Dp6(S(^1)RYe)0TMp+mY_kKaK{~@H(J1 zU4}G6n3T3l428KV^1Es-9Yk4MWnr`CduiNHnrg14B9-`=3gp9qeBy_-$Eumdi8Mzl zIWAX|xGPuVq}%WKsn-dcD&ordp5JV%+Lihx&%56aQyKTOP8cbfs*I6zX$~DmGDAk9 tdT|;u{NNyFUEa(j$2D}yv-G1tC0wJV=^`6wnyRW?Qb`)dk>s{@?=PdF;o$%P literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-size-aspect.json b/wai/vector-conformance/vectors/refusals/s4-size-aspect.json new file mode 100644 index 000000000..e2697a50f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-size-aspect.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":361,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-size-aspect.wvg1 b/wai/vector-conformance/vectors/refusals/s4-size-aspect.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b6c4081a2677eaca96f6826a2864962688bf67b5 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>ha7t7 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+on)_%bR&0zxR7@XJ&cn)>T17?>_Qs_JP$B zEEWl}$)W<{tk#4c%VL)}I3WWo5WQC=I)@lDvNC4v`t$bs&WGmU+o_k|H)dY^dUI!| z`E&jAqtVwh{*NzvOyNVfP_SVW-7FHlpC&qag6QIDBtZD~Jp37=#mmUgVx|S)>#$#Q zwV+|SJTBiDj`KP5{-D!yFp7oq`hOkm>ScIf!s1F^`L8qa$=~+{QZBhRPR9sOj`6b% zSrE8pahb=}=a_-@#xochLvlO62SFTVAy{S_GdJ5u;jR4&Q^kyCI#X@wzs~uKhtN4+ z-sfPN|67djo+XlZO|LHQhV7h(_eoXZ{KE3R2l~Ac9uU8w3sBxaL5~tXO1=f3Hg`uL z0+sf4ef&&xJf%8h9xHg`3R ziE(qP7xGv|%#Nud?*GQ?)eGDezGTLUdSP)-gT;!KRS2ID^MQZ`*%HtGSkgZJ*V3e# zUMIAr%NS;aC#CHYsCaG)y^fko`eE8qY0#*8P7?LvhMH@tP{m%VeEGO9pL#*{iE5-# zEX|fkwOkcY19vaoRycg{YkGdX1K_7s8P~%k#%mGsES-taS}wKMBAG452Lc-;Q#;t literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.json b/wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.json new file mode 100644 index 000000000..088ff9d6c --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":2561,"h":1440,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.wvg1 b/wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..0d2cbb9fc65e529018efc887cfb9a90a6b64532e GIT binary patch literal 1178 zcmaJ<&1(}u6o0du54(tnu85a7f>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQkcg8m^MJmgqJ1rH+CtH)fd*7$ofyKM@^x4fD6@q54bc4n3qZ(J5c^zI|CW?!?~ zg2f_1Hd$0aoYk7pBU$VM2PZ^0uZ#VcWjccxGqN(~(bZ?2)$I?hwQnb0d|#h_{_D-H z?bgrL&ksglPx(K->@tN9-9*8&;uckb!;MtDH{hR#8G{{%fu_$c`neA?I< zfsFry@$5H{u#uni3-F5*`67Hiha6vm&okvR1&{d&d|PGav#E@)pwG)TSIUiPBsO+5 zjfrt{Y83KVRm_a3D(?Qq>(vX~Wxiy_iAG^zSA)f}l~o9z5c7e61=$o&|5(yK`q$E= znqDWgrOOy*geRq~GN^cN3caqHO$K4wR%y_zc}^1b89ChVN6nFa_FL63SQ-!FU>v_$#s$HpHa-93^Adyi&?F6BciAuqwOEc;q xlqn-()r*n<^n-((b$K(D$ZP5Zv-Cq>#i&uzbde2iny9K=RB;kSp+wud^ADlP;iUio literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-size-w-small.json b/wai/vector-conformance/vectors/refusals/s4-size-w-small.json new file mode 100644 index 000000000..0879bb00a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-size-w-small.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":15,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-size-w-small.wvg1 b/wai/vector-conformance/vectors/refusals/s4-size-w-small.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d34b26111d86a18f5e88363ba643ca2e185580e0 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vejfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;yN|q@ea&eJ z7Ka46&@-$ z=Fip74~Jh*2S2{-GDQI0M8UdCbYqg}{S?uOV?-BDApyd-=ipBhEnGr=1~bhAUx)pg zs|5|p)yrVtgvFJ-@?Yl?P_X9|wh7~a{dFjdTGrZd%!{%gxWc>rzs zY@hvU{%1_UlNv$dCI4_!DFK3HW>t7C#A}XRILpHUozuFy|A#W!D89TD?~tu1wg=pY>H=p9O)kY>u6F< zuM^tRWehXIlhRfZR6I9Den-uw{U~dxENoPLFO7RiL(Mi-q!K?7hHFb(vdQqSf)F^4X$T~MoRYfkUBn{(8qHWFl2eJ_1Z2$lO literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.json b/wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.json new file mode 100644 index 000000000..49bd0495c --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":79,"h":45,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.wvg1 b/wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..6c6750794501bdbea1c65344289d98fffeaec091 GIT binary patch literal 1178 zcmaJ<&ubGw6n?XtHg*vajfj^xf>4ko{y0bv7Hlbq5UrrLy{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;pBT$ez~^(Y_(}LYla(oW%unFkE;64>MSKN)Uaq-PZcIb5xvObR zjGI%vU}F_AGop&P_ZzQQFK}1*k{KuJg@rv07AsC(Ap$}y00I_dOFaAINcZ?(N0VxL zozRvpW0(=1l(vhY;<+jEJ8CxVM_Ef{VWaAMY1~U1YPP8&mH3$oW9@Qs*%Ns zG+Qc>m#azKk*jgi>9zgTYljULp>nS4H(IKCt#-xp9<;(##=Wc^MoOkC1CuVzsl!NS vj7U^BPD9Z54|CS!?Mx!CsZ-3-ivpFPMoH5}*12h_Dso9BX&6TmZEM~?!?EFU literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-t0-before-dur.json b/wai/vector-conformance/vectors/refusals/s4-t0-before-dur.json new file mode 100644 index 000000000..4a9ae90cf --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-t0-before-dur.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":2147483648,"dur":0,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-t0-before-dur.wvg1 b/wai/vector-conformance/vectors/refusals/s4-t0-before-dur.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..84bb8af7451993aced47d7eb709dc2a42e8b4363 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>ha7t7 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+on)_%bR&0zxR7@XJ&cn)>T17?>_QM1HD)+ z!D5jhn=C3I$ZAdKu`G6pgA+19ZSPfy&LPH(tc+Q^{=B`u^PxHTcIxH#jhPp}-rU(~ z{#^h3X!P}r|KrOZQ~1y=6l~Z;H;Y8?r-@FUAi8)O2@t+L4}XSe@iOwWm}vp{I_%e6 zEofLSkIOfP<9yD%Kj`!vjAG%u{$EGCdKn&=u(*;}{_9M9^7nm#luNFS(=o!6WBhDG z76h(YT;_50Ic8wJ@eD@BklfDiK@dk-2$q?~%+2;ucx%7HR57EO&Qx3auXFz5A#~1{ z_c@s6{}$uBXNlxp)2oZSVLRvHeNt68zp#Aofqrj<2gGma0+jbp(4&Npl5fGM&D{~m z_&*rWejN!L`ANS3e`+E>1)t9$#~0!AOu0~*!w#2hPmb8!mwKS=w z*9mRuGKLx9Nol(TDxRA{ucPLYewemY8Z@e&lSI9^q2`(@RI!&TUq0^3r(RHfq8e!w zOS2^sdAS-#9l09ConG5ZoOaMqAu8v)UZbU|*J@WB=V2>IWYkOBL8xS+QZVV#j5-Kq w%7|EXqa*-*|1f7w-cBX*nmWNOz0g-NYLqlxWSyHPsv?(EoCHxQ(YEIN1GgjK%K!iX literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-t0-over.json b/wai/vector-conformance/vectors/refusals/s4-t0-over.json new file mode 100644 index 000000000..4f47a362d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-t0-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":2147483648,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-t0-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-t0-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..6143295f4da83b73269ef5a087ec1d708b6725c2 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>ha7t7 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+on)_%bR(hzxUgjSzfwzRS?m;kG#@=_kqVa__4511%!^-d?(8&w zu77?s`g+Fy@nw%8eCQS$Hf*AsMWXl9L?=%WT|A8h0NE%88(JD+eg(~`yHl>5e+-jZRx+x@r#G5bG&@c z0h|9@T;DxQB=4G8UEB@ZIS%iWs>1n&<$DkGdm}s`enS_aynlioC47{83qEb`jsV90 z!S(Fdk+6}U^b7E(Ch}A8`5f~4B7EkQ%QQU3C*WzJfk4+gvFRrjgj()i5T; z!>L}#V-+zwri!@#8?RR{a98+}xlYszi+j3QtXNrx@Ch*=6|f*%;@KZd+Q+&xuyzL?4`<=kNfhe7gV39MjFM^ zY>7l(uEtSEu10aE*Y*;p9W+#k&iSs_XsPP8+7-un*a{LE_0o0_Dw(JhNV+wH4nmo7 vMXb6}5&*t`7_%mCrxJM$oq$U(^i_-=CCwCB=b?$J$R!mgK@>`itvUYy4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw&30dxz-hD&sFlIZ;u(a94;7f&Mr!nfz)PZKR%Mt%k}%>!SD{Tg|6 z8kEbU@{PgB&T0FDPS3$87S8Mc^|Y&(!GQ^jD|zL=&LyB=-xo-gsN~{wjPT?bKi`lA zLCGv7<|*lO%)xr&8H|h|*0%Q`h@&h7%S>bDX8S0-vtMDVn9)pUsvZ5;mVfdP+Va^x z2h;rDVtn^3k-Teqb#XUrTOQuWRYi02OZOh=_eOX?{Dv+-dH)1GO86-G76RJb9fFMi zgYoRwk#Lb8_Y3eR#_|*J`5Y{M5gY8n&c z=2S1(SVhc?s3PwF#_QD!+-1IG#)*1iVNZj_vXfVcfDj9SfCbqS&;B^lJ^t6xq?%qQ zw57`!W`rlD?INgnZi@Vlnoavr)>2v6sQO+S_mYO1ZK_Bmex?HXxG$gjVfBe>WN{+R zmP+L1N)mVEN}P0hZ9nzeVM9fzoa_3Hma1N>UGcn!tuU2wFKdU9lBvqTq)T(^Fp?P~ u64i~<5cK`SoHcnnlgMl86tncAKqaVA(sYq^Zkno!TvSOK#*swZn)eT*eBt2$ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-table-e16.json b/wai/vector-conformance/vectors/refusals/s4-table-e16.json new file mode 100644 index 000000000..428eef27d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-table-e16.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65535] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-table-e16.wvg1 b/wai/vector-conformance/vectors/refusals/s4-table-e16.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..4084cb3c67d358d6325f618740a3d14e7275d748 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejG{<7Hlbq5I;a|dtI~BWNES+b~lw!4?XnI zoAoGq(?7(6ha8Kj;6bE%^_Yv*y8hnGZks~!EpOlV@4b05ON+O!3nF^=k^e?+SZ%>% zkszBaD!|Wdjq!=hcZHo}#I^lbCAt6~BQkT&>h$x@`tFC;#x`1R)QZtLgz z=f|V3=e!?Z_8GzhZ=+z-Cc0H5dOt~Y`V`USvj_n2?M2vALFLlqiV@}Ezgkw@NvEf6YG*~WGZ@#Gjk6Nmz! zY<^|NDeFCE$y)FXhEh&N9=2Nhgr@XU0k+S0d|;}?%)=lOY` z!)gAnaenVSk-SHG6FuAw>p2d~aaO_H{L=l0`n?ez5Wk^IV3wc2#}TiRZ^5Ijy%E6p z9GuT~0|6WHak~I}Vk|xZoA;3C7h&^EIZeW1d;;E1iScYI;VbBU+2%^QF^$C5o`x|# zZcdFt?yHKKl&a#vZ@gapgSpI?%z2_wSlHLeV%f?ngh%js$bbgg7SH}z(mwgu(x4h% z2ehWkIL#1GN;@S$@!S-+T{RmIf~2hyzgcsgIP6DFHQQ2wirhqb^2tCxb^Y3!Y9?VM zjff@UawQ78awUwq{f-+u9lxmpRL=F>W?R*6)UP?tqqZN*u%C4NK*?AoK+>fdv>(WX vGa}UsV;}H?qnLGhCy|J2=oqu~15ZV$QPOmg4Q?8%s$5i2?1zCw+q&})H*e$J literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-table-over.json b/wai/vector-conformance/vectors/refusals/s4-table-over.json new file mode 100644 index 000000000..088bc0800 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-table-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,65537,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-table-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-table-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..06dfb19706511a80a6dab72479fe8bf2617b5092 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCc20ejfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFSTv4{#DM5~rKZ}051ey)9f zH2Qib`0-^A5CQ8JH*B~>H;d>MG<}lj;%QDW;Jfog(=$YimpMPnoEEsg!S)+;3mR4` zJW!M*4(jralK4P9Wx{)zP{!BOHC0@~aiF&O>>_3#^< za5+Ee7ucVg$WO74bFlSA_QA=@arS^ujJI6^o=YYE3i`ZUbEOzeBeA)wVN49esZp@8 zs+b*9Rows0uU9YZuHceUCmMytJzXqToV-H>#Ib-Y*kaid&;K~mJ@MDkpc-B$w58in zW&})WyTnl7O_ASKbLk+;+A0g1HQ!6)e$rHPEfuN6&r~2E59BjHtUXoDEKa1^QptI_ zn#5hX8YkU;$4|XZ*i;dB&iDLgTh*@BuXx_Wc9_bzpLN1W$y8;Gq+4_7Fp?Q664i^- qkl_c1G3)YnCONO6Q|8i-0+n!&l4go*U}&nUa!Dm=7)O%F*1dmp+Tj%d literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-before-record.json b/wai/vector-conformance/vectors/refusals/s4-tb-before-record.json new file mode 100644 index 000000000..9daf92c8e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-tb-before-record.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":0,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[1,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-before-record.wvg1 b/wai/vector-conformance/vectors/refusals/s4-tb-before-record.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..84a61aba4dd3a5244f05add89f492d9c20f2fa7a GIT binary patch literal 1178 zcma)4J8KkC6h3!mlQoNo=!)3HD+mF}#z!G3444oQVSRv_q#bu|c8BcFEHksp5{ncm z(iuz9PJf7nMam#5ScpVh%WaIt_51GZBpXQK8Sa_$_|A9EeJn2Ax~k+r-hEWE<}?(= z5hboTQb3x^8Cu5%u}cgN32QsAigFGy@+v4|R<1v9uI_xOuYEi9^85P4i(hZcB6oq;2Q%csgYU{v+#Y$@KdLX{|`@TY|EM?a+GtbGP20vs$ zP|j4DJY{>11m(gRGU-EddoUL&7^MiTY?^Ft+DGA?{fexLjNEs=7su{8=N~%jk}?p^YA~sOgKBYc<({>-td6=gCQjL$V^(Z7a0mStmk(>|=;-RrPjM6~Q|w`=}7#~(dVo#W+m z_SyX3Vtwbdh`McOb#OPda~$r&s>7Mtg**4mdlNh$zM*qa?w_EC36GMu;LG|>A7K0s z*3+*c;UPcl7vPT!dUawi;F7lFD=hO;wyQbJ#bh8e}7sPy2z=CWzPye{eJNnl(pa$L~ zjAhzbW`#^;s|YCamayK|(@8H(n>q~|ll4*(b>oJfUe=+G>#6qD!=8Fl4<;Y$MjFM+ zZizx(EyYn=Ek$v=+o~s}R?yHPI%hidMpI8-sa`6T?l*%(McuR&gjyv!1(Ipapo37Q vtcZ0dN&>+54q{f-%~T<8pc8QEhQ5x`qm`YaY8;yA2{o_dB#1(VvDMN)n%Lpr literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-over.json b/wai/vector-conformance/vectors/refusals/s4-tb-over.json new file mode 100644 index 000000000..e0dd53409 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-tb-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":1048577,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-tb-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..f45717f85953bcce26fa41ed4e4452a7b82c7111 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}i8WAsX1fd{F{5VJtE!a{JA%1|`_PS=L$zrk__M;N&p@$xN zvmQln`iFS%kYf=QJcv}U9&@o;`ym0Dqcj@e1-Y;Ix4H2JF|| zEoe}wj4HE(QO+};4>-+*t5`VC|4EK^^)fg#VR0v~{MVUyaBwg)5VB}o$0ppU+4J6Bh@)x zKIf3l|1GZXogtd3_N+bIN5B9^(`6c1nzAQwd)|pOE%3-2aW&s~5N{e92rV8imDuT`X3ttV4K&n1>2jkZtkok0tGse=QBF z;dMe=x{b?>FjLwo0g8E3;C9tq+z*nrO8jQcb>c9Mnrg140u{N5^5o;beCqnOHPuYQ zNSZB{$jj9z?8?ZTnxb~=7j1?Zgbxy`n!U9VqtoQG{cmSLK7{6NWAB|y@x8MGhB wgexM|3u7Pf{iB$5c{`EFYv>qU(!f&@dXzL%WP^vssw$UM6#HQyF}Cjf1F~=6TmS$7 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-zero.json b/wai/vector-conformance/vectors/refusals/s4-tb-zero.json new file mode 100644 index 000000000..49cf34693 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-tb-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":0,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-tb-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..cbf66bfde86f62928cf0efea927a8bacf02b89f4 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+oVu@%bR(hzxUgjSzfwzRnS=8eH64|wFHYr zf^4#=fHbQ$p~te=B@Rvq_x4_u=p15<%gQxt*Ppl7cRw^YzMXpceRJl;uQzvgn?Kh- zKN@~L!`)Q(+Cx|YdMgo9u&%>V~TD*+>EI2Koz7G2}cMBSn z%cJs*!6@gM&j+05!Bs4r=l>)}yLuUnO<3H?EB|#SKKTc}K*}Z8#_1Sg=AfT#$O6DM zi_18!KF6$BZ_L5S2$I_wFLZE}gUPsL({V;8*G-y;kCy9D-L(Mf+sA4ZwzI@!5Prab}L^aYVmS#&N z@^UqfI&w9NJH57-IPIXJLUhh|y+%t_uhp(N&cjxa$f%dLgHXvtr9jfH8FUcJlq+J@ sjgkQH{ll0wc{`QJYv=@AdZDjk^eAbj$T|;AR7EbSI0>RqVr literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-dir.json b/wai/vector-conformance/vectors/refusals/s4-text-dir.json new file mode 100644 index 000000000..460296634 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-dir.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":2,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-dir.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-dir.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..6d4ce1467303f1e4ad440b2046fccb180746df88 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$QSU*5*dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVaO?WRzC%bR(hzxUgjSzfwzRS?m;kGz_F!)gf@ ziv-zZQ2}vQYeJ8WW0yEMA>7-0RibltMDM4GPM#pTcp3=+zC90rhG_9J^0VNyfO;49Ywi{_ zs8mLk8-r2CGn)@M&4a60IIsWL(XL(wxe1FqdF8(zi%4 z{%>)8_bidTYi4zEH*9A(yickM=NFdmJ<#us@PPOYU4Zib33`<9QSvSLw6!+`82<;? zv+p8dBR}aE;7?8Dr{MEBWc5Y(%qf#;c#KcL+bJ=gO(lE#F!xP`@iT`X3tafk2;F&`DMAlu^EA4}TD|5_SU!|Q~$ zbQ_l$VWzZG0u=M6(CetVq#vd&l?IKP=Oj@tZm7AY3RUc-%9oG(@~Icpo~T9|#nNnv zL|(4OQAe&uai`bz5~m$BREW;`uGeU(+O_%>$9dQa5*hWOyN{p>L{{W@T;o<-Q literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.json b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.json new file mode 100644 index 000000000..bab72e06c --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":64,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..278b9c30318b0125d3ea41a81f567e2e2f382360 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3vDTg5I;a|dtI~BWHH$dyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{Gqb#O^Qs`CcOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V;*0B-d@}J&|Lp^>gD&1=@-A=+}>&a zT>JcR`1MTiolSJ>Qh)$j$x_BB15WYPRf0}6VGV(K+X#w~;?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${CqeSiXB-zc<1I;x}{w%KIniQNl;bw-C_g?hs`B zAB<GTyv$|n1*6=SJRjn zH>Y~R#wucFL=|!GH(sw^;I8l`GfvbCi+dU@R-C*-1cX=s1T4swc=pGU?(x5lCe`#h zp)Fm;Fe5xEZ5Khsb5rDZ)NI<1vX;uiM%DMyxR*54Y*R%l@iP_3M}7I!535g9Ba0Jh zwp1c7SChCSSL3A9Yx}9!4jU>$<$Tv~v{dz4?TY6;Xoabads#b-luT6yCS96Shmp(} uk*IE*hM?~s=B&wEnM7VwrhaP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVauo2F2F%bR(hzxUgjSzfwzRS?m;kGz_F!)gf@ ziv-zZQ2}vQYeJ7@u}d7B5bo{0D$zN_7?G80)~-KqukU_nZhSlS^84n@i(hZ<>^6U{ ze||LlddC0pWuGB@=r$TQZK9h+qW9B8Cr=PvJdFeZ-=2p*L$r7q`B`vUKz$wdYwi{_ zD3?d&8-r2KGoKGQ&4a60IIsWL(XL(w2PQ1;yz>!*-6t`=qLHeqs6E1O46z4~XB;1t{;IphpQGCEtQiTYE!*@qchV z`*kF2V?I9T`X3ttV8&On2!orkZtkok0tHne=QBF;dMe= zx{b?>FjLwo0g8E3=ylXw(ht*?N`pq#bCReRH`H8Hg(~(^<;%x?`P2)lPgEm~VrjNS zA}?3ts3TXSxYKKUiPH`mDn#de*K4#?^;+$U<2-ByiHv$_I|!9bR0<^Bnn4GlOt~Uf s-6#nF-#?65lebfeyoOG|r5E}tMvszaimda{L{;RHijyD;CC1jAf0+v5-T(jq literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-mode.json b/wai/vector-conformance/vectors/refusals/s4-text-mode.json new file mode 100644 index 000000000..bf5e0a65e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-mode.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":3,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-mode.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-mode.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..62417f85a785b61e0d18a829a2f3c3778cb46ee5 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejG{<7Hlbq5I;a|dtI~BWNES+b~lw!4?XnI zoAoGq(?7(6ha8Kj;6bE%^_Yv*8h>vl)22{-%bR&0zxR7@XJ%>f_H{u-?>_Qs_6?^g zSR4}Ml0!MfS)DOGF^XN`;Fxf2_f>%|AjXWWj9Hz2-df-N(AfBP=H>UzsTaTA+}&;b zT>t!d@bz5q#NJE!drIz0!YSU9i$*VC?E`iCYguH=>fdL#h_2fje6NJST?V}vKi_@fP3 z5ERW)WS%0QqXp{{p25fvVr_d5f;h@Tu*@`OZnlrZI|mh}iWyBqQ|;)#w*2`cXv=5& z98U9pi}9WFMDm{L)xq7cZFzVfR~608FWrBr-y7ip@f*4X<^2=%IN_t@TL@@tZvZm> z55}`!L&8OV+|R+E7|Tz<=X0?5Jba$X$|OAIC-ChQn9rpGzMMWU*IX$#rh(Yn(=;Z= z&8e2Nv9g#MQdvCsjn}IexXXOWj1#ro!oCKJWoJ|&0zxbR0v2RjJp1EF_vBwklWKaM z(3UP^m=T_ob_$^4xheA7YBudfSyN?Uz2bXm+)e6gwxJ@G_?Zgilb(F)hm|!|&*DUy zEtSa2l_YMv1mT8Q}^ZRCQlM4jjGH>3G?|tv>%*@T+x~fFv-A8J-uX;^I z@kEI)o)i%0@&?wie(Vy11H#(wtD>AkjEr2wEM0%zTG{@vxccqX%kOKWFMhqbv%UCp z<@2MRuV;cEU-n25U~Qma%@?^jEb@LtHwQ;oI}@M@42XBR_$erh%`)e$8qn zo0Uqha$~cX&zbiJot=Xy3iI}VOV+h&^T33~N^1UfUjhmCeT7t6%05oV2`9(+{S8?V zl$|P*2g-JJXll;jqzB3E{2r7rN)cFY8dpR6D7?2{;i|~!rgPO^zoWb7;X~-0FYj|O z&HpXpJ7-1oUDvCFyP=))a35SInwp-w_rSh4!2{wOx`4&~6V_3}qvS0Fvc9_mGX4kg z^lM1?$PfAj_(KEvA^1Fp96t=7GvzV@kNg6@ts?n+DdH>G^YY!5va#%_^<7KjVr(w8 zLLM7a6FnJI_kZK{S_OBWmrR_h6=wDDU}{J!&JxJtQAH^rzQiFE$vf>k4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${Cqa<1z)TB>@jcE$4^w!&1#y{sKZN~S6UlP=Av!$@X~ uNK`jYL(umRbJpbTOd_wTQ_Rwf0+pafNz+BvxoN5@a#1B|7)KIqYu-Pimf_(5 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-ruby-over.json b/wai/vector-conformance/vectors/refusals/s4-text-ruby-over.json new file mode 100644 index 000000000..17f858192 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-ruby-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":2,"ruby_start":0,"ruby_len":1,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-ruby-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-ruby-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d439e09f0c982fd125e0e9d69e29169751b8cdc9 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejG{<7Hlbq5I;a|dtI~BWNES+b~lw!4?XnI zoAoGq(?7(6ha8Kj;6bE%^_Yv*8h>vl)22{-%bR(hzxUgjSz5e(T@cZ`kGz_F!)Xc@ zhXlFgP!4fcXG~9wVpljgCfwV7RiF!qF(ND1tWG~~t?zzlYf6 z(JV#ADe7}HlMOm^FfxQ#+unm9jP-ZQg0xEr=D4)5ctqPh8{`w#VdBRn8}Lzkeue}Wz-e3X0(0d4IK0LK5p z_3YP>aFHMPbMPm|@)Pj+9Bh3aK6A1%36Jp!csm8gbE$wYr_akZSIUEFAhz~2jEV7Z zs^x5~EM|sO77u>o_38!gGG8*+iCS)9Ul)sIXVf7ALM%W9EXcNa_Q#R#$-j;U)$lr@ zE#1atMwlt>6adA%De~KDHtj`OQ)OYj;(KY_P3mg4p(2&|nF{2So_y+ul{Hn*;zXJ) zmB`DLByP)A- ts7{=QfbSi}tjar?L|#Lu;L?o(m7qsSGey>TXsXI`Q6*^@M-pSJ-an}5;o|@R literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-ruby-start.json b/wai/vector-conformance/vectors/refusals/s4-text-ruby-start.json new file mode 100644 index 000000000..60f487e70 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-ruby-start.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":1,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-ruby-start.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-ruby-start.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..13bfc0d92d635bddad05da1826bb1f456240b6f0 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3JyuD>^vZMIN+%bR&0zxR7@XJ&cn)>T17?>_Qs_6@5o zSS%7`lSKu@S*@HN8^>u6Um!-)xtD|zL=9*albfiI9MQ`yGp7~#n={&+(c z1ZA_7nWwDJkwJ#p%)mZT3NaS1<{pHOnoOGJYuG*tZyi)j_{?;s+R}fW@fQ!FGrp|P zWSak5jPIQ#l6Og;L=ShvcE-bdUR5x^uzc@a#Bb;Vl=n~2qlAx=Z^5Ijy%EUx zKN!z`0|^`XykCGnmCH}T=X1#LMff~ZCe!ekpTM_MVm_Nn_zL>GY;&dDm_}l2Pt%wf zH>XA+i&e#JN>y?HH(sw^;I8mPW1MId7WXw+tXSg;;SpjU5U?QI;@KZd+QE*o!+z9Mb1fC9$W4?d9}nbH*RMTM%_NMZ z*?a*RP%>5tm~`ow+7D#H vh)DIq*a!XKFlSxfP9*Z0I>s#hz*7-wlr&vrgPX>xDwk9g`(Yr_w(k4`qLks` literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-str-len-over.json b/wai/vector-conformance/vectors/refusals/s4-text-str-len-over.json new file mode 100644 index 000000000..2aca41b59 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-str-len-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":4097} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-str-len-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-str-len-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..72b2bffcdf492366c2749a96f2aa654373bc8571 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vy8WAsX1fd{F{5VJt7Hlbq5I;a|dtI~BWHH$dyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{Gqb#O^NJv%cOQ8*`?}K- zEDi~B$)N(`tj?Go%VQTgI3`@%dsU>fh%qB8V;*07-d@}J&|Lp^^5yr9nHRs_+}>&a zT>JcR`1N$~CW+op5lx>Ux^M~!5WYPJe}-uB67sW{X#w~;?AKf^ zXizSX%GU=YJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${CqeSiXB-zc<1I;x}|2%KIniQNl;bw-C_g?hs`B zAB<GTyv$|n1*6=SJRjn zH>Y~R#wucVL=|!GH(sw^;I8mPW1OfL7WXt*tT=gv2newN2w0FU@$8Qy-Q#~9O{(d2 zLR-3wVMcgT+Ae~M=cdT-sJXNsWi6G3jjHdZaW848xu%L#;%6$5kNWbdA6B2JMiwX1 zY^g+Et|oCuuEt5H*Y;Dd9X3>i%K5I}XsPPe+GWps&O%vqDSGKsvVPBBX_3RHp`B~2Gu=ccKu$R(AeVH`=ct$F_d&RF5^ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.json b/wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.json new file mode 100644 index 000000000..dd52ece54 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":0} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..e6347a2e8badf85fc2a36d2175280859904b1f5b GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWHH$dyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSZBi+|<;}d0-}}9{Gqb#OEX(ndd)W-`Z*Z zSo`!~_~n%U{qr7E_|PpBY}iECi$w3HiH;v5I)4%g5WYDJe}-uBBJ#7CX#w~;>{nbZ zXizSX%GU;?e9pW-==2T*)i{btXRf`@TTRCD+F37~#n=ezqYC z0@o}q^SJsPGw?s#2r>?tdl1A?7J_A_F>|wh7~a~iFjdTGrZd%+{_FgniwDp-U*2at z&HpXNcTW?^+oo3+cf)qh!~3MFaDHL=&OQC!2oH$g&^ajYAEAc{A0^*{Pn)|#knw*o zp8Yx!Hu95x0shoPehNOHLyj-P=b3VuhR6H_zU>n8*;K+;(C1~FE9J&C6q~!6#>BWe z)eCv7B4$Ta5qE##_38!g3O_W)iF#piPlLsZl~o9z5c7e61=$i$e_PT%`p43wnqDWg zrOOy*geRr#5~z4?3cZe+OZs8jQfbhrdQKAc;)a@Qs!+vVs(ksdFQ0fp^|5NCQ7p}t zNaW>e9ChSs6nA=UFLByILxrfE?|O}vs$QvGa-93EAdyioZ3m%}iAuqwOEc;qlqn-( t)s2z>^!haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+oVu@%bR(hzxUgjSzfwzRS?m;kGz_F!)gf@ ziv-zZQ2}vQYeJ7@u}d7B5bo{0D$zN_7?G80)~-KqukU_nZhSlS^84n@i(hZ<>^6U{ ze||LlddC0pWuGB@=r$TQZK9h+qW9B8Cr=PvJdFeZ-=2p*L$r7q`B`vUKz$wdYwi{_ zD3?d&8-r2KHJ=YS&4a60n6my~N4t6%j7?bF$txpe;*)>i3#43fZJdq~W)AwT}GB^)^1X5oDY(_aKO)ECkE2F}&G6s@^*2FkOsj*qLri|8;)P#Y5FOUOs2c z=KmJgch3^ZyJl7wcf)p$!~3MFaDHL=-UI#K2oH$g&;=;(pP)wxA0^*{Pg{FKfboBD zJ^OVeY~&~X0{p3o{1kjXhrGTBpE>0+4Uh2&csnJ=v#ErypwG)TSIUEFD7N-AjEV7Z zsu%KDMa+((vX~6~1Jy6ZOL4zAhFkR@NbWLd-`6EXcNa_Q#U;@xPV^)$lr@ zE#1atMwlt>lmNxNDfBvOF6oD9OQk`h>N!c&iyLaLsX`Tdsq*FHzI^Hh)hDWvMzJ(o zB9WJ?anzBkQQYaZy~Jq;4HcquzUwtws(P(<#c>|Cf<#8Wv>k*>CMpGzZq1;BP^MfF tt8SD8fbSp1tjXJ{L|#KD;L;0y6{ANUXrd}|NySMJg%V?H&OfI1;o<-Q literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-track-kind-zero.json b/wai/vector-conformance/vectors/refusals/s4-track-kind-zero.json new file mode 100644 index 000000000..8bfd4ef4a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-track-kind-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":0,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-track-kind-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-track-kind-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3f2c4f7aac333a659bae97d88dae10de71d1a9d6 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVau+oVu@%bR&0zxR7@W_Ee$)>T17?>_Qs_6@5g zSS%7`lSKu@S*-~@mc=e{a6-7Y_o_ta5MxGG#;jd`-d^AR(A@ZT>gD&%nHRs_+}UmZ zT>t!N`1OqcY}!OOi$w3IiB6s%x_BB15WYPRe}-uBGV-&SX#w~;?AKf^ zXizSX$~Oih_IRwkKj^g0aTd<$^E%qq%V2E6;!0lm)S39?ANT?(ms}gSV}vKi_}PXm z2wbzc%;V~N%)ol%8H|h|xt+g*Ada#SEHlmcOh@6Zg9=l{jAlAhZRu0z{KZ4)oGwUI zbE+5eSVhc^s3PwF#^0+KxGVg~j1%?3;=Trp6)UR{J|X4<0SmG%p8c_;ef+PbNj1Gr zXiJwd%m`0PJ0(!@+!T5pHJ9|mw58IZQT3c8>ctH;*Hod3y;S+~abG_5g6b31NTXPq zEs@B})i~qB@>l`Ntb5SK`2v3 u#Ht%50qFaOIcxHEDv{UJ31;bqzKT(!r0F8-+%!=YxuoJGh(d|BHRm6f-r?Q= literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.json b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.json new file mode 100644 index 000000000..601ffa842 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":4097}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..b7fc9c16883db0fa04dbc7347c2d0e1631b45bf5 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}i8WAsX1fd{F{5X^zEZ9;IA%1|`_PS=L$~1Qd9(w4Z zH|tUKrhkYB4>=Z5!GlQk>M<9qHNM|Wrl!z?Z+UOt=kL8Yv&&1jt_dP~`vKCNn@&@J z91`S`Lpk@k>k$PM9NL0IMJl=)8F5U`Vsvnn z0g6Txfm77?h$Ksx!O)P&>h>K3!3!eR%rs_h=*Q(dhZUv@h}hfi;^?g{e*Q?d#j|~M z*?$P+cg_*XyQWu%-v+wH!8y(ER2E!i6 zhh5`<%kgnL$M(cne1dJvITr%yxjuuTq^LF)A!|?Cq-i#i0yq1V|-{% zwVd^p#q5yE;{GrGd$nM51&@q8QOhkJ=wz|tj4DJx>nh^P`Ho+2s>=21RnL3a3{x3*vsM@>nW~JDbm<5>jAVw4 uM0MgcWcc1u%&NSdNsepilxOKifl9bWNz+Bv&@@$LxulXbj3dcytKMJQ`r+^Z literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.json b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.json new file mode 100644 index 000000000..3c0bd20bd --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":0}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d34c790f9829f0dd9b2f73228f90f4eccecbab83 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}KT@f#F1fd{F{5VJt7Hlbq5I;a|dtI~BWHH$dyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OC)D(K~Ei>~ze((3*o1NvQ8E6d}j0YJu=7&_h4iMvAX>ag4oMK(Ci$X!}?)(XFtPaF(c1yXL0n@mcMuaZTV~+ zo%SCa7O3sd#>2`OZE4-Uttf-_SWMK0jg|CVZ9r_Cng+9fFMK zU_9G(1YE=??E>tniTD(3z6Xmh!sec=Ov7S+0^fFt`CKaDE9m=j%`fG`G!&b=n#TCJ zIMoZ*R}r%#s))P4@Ot$IbA^8x<3zo%xTnEl#TjRakl+h}fCkwTPk%eoJ^IJdq?%p_ zw5HP-W`sMX?GmWCZ;FGCn#=le-cotgs0Ln^^wNf!YpPhKL9RmiurHqkQT4HE;q4)?V9r-(3HC;>EX(ndd)W-`Z*Z zSo`!~_~lgi{qr6uLS9>3u;CJ2FA}|*COUqM==@1eFyWiC?9UJ_UgZ2N&$Ph!I@_;M zEoe|KkIL5uBRi+y82U4v-hqN3ug~jgSF6E4lPy$1yz(lX5=wBtMSHJ zCh(2&!Q<^~In-P1(!w&~U7w}EYWuum=(&o3nDTq^Nb(D&t!S?4%$^%M?{Vv6FGkp2@t+M3x8B(<|6VFm}wgL8tj*> zR?@3f`jug4Dan#l`Y=eYn zBA$K?2_O0WegXc_zWfk;-igBx!{;ncM&OZOz_(c>pD#sx1$%dX{(IS2w$=KMrO9J# zF13P-Rn)YqrW{%YUypl zTDFX^TsWz07D2_iC8{r($#gl&S|$q{WA#!Rcaw&hY?{a<^~?nN;j(^Q562#vMiwVJ z-%^ddUP$64y$~l$-F7`KwZn#qP&w79H(F-w%J`*H>3%Crb==L`VPte_GBDZF0d*MZ wjEKZ^;xq*P@4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;USD$s(cHXzvzn*yUZDZ#7&)2th zT0ho4Js5pC6@34^#}ol{3k4f!biGLQZkp)$F{1M)kpSVFv+!q#7B3<{i)bILbn>?Ce~__F;Huzrs{8BmcMk7f0Wmi`3Zd6CFXOfgs-5_&NbJ|jcFt{cQuWP zadT=EY^*9~$5a(}f8izT1?~!89^*u#u(+qeV#UcTL_mlIK)`}*iKo9E=^p*#Xi`nD z6WY>c3^T%$(sl_{JU2ytSIwn^C~K=MY}R})jr&Pc&9zjd5|HM2O8 zW=kdVay5y&ay3r6{f?h{ov^7QRL=MOW?R*+)GvA7{dSnjxSw^xNXb-XVA7>Ibr{Kv v5sB)>X$bnkLC(6onMvd|b&6T~QJ@mkC~3OL1~*MrRW7L{4dY0nZQc6|_PXKX literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5a-held-sum.json b/wai/vector-conformance/vectors/refusals/s5a-held-sum.json new file mode 100644 index 000000000..a2b9d851f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-held-sum.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":32,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-held-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-held-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..fdd78695a65ee53a9f43d1780e2dbcb028b364cd GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=il(4OEZSPf)&LO~ztc+Q`{=B`m^P#!^?bOTf8`Cd-y}7f~ z{JHk|(eUe;;K!Fet`DGFDA;g`ZcY-tpCUSWg6QIDBtZD~Jp5^*h0Dm#V5WKC>#$#Q zwV*+{JSyK9jO?7YKj`!vjAG%u{$EeKdKny;u(*;}{_9)<3if@0REbJ1PR9sOj`8yi zSrC-WQevKxKF1uaH=e=B2x4t}4}v(#La@vX%vf{j(g%!n%D{%^cqy}(`OOJx+E%EG+Bi-YF9Zjm~ zbwXRZjA2H2Qra$pisz=t@2J_dA7w3-g^jB3rExE5sM)59RN`kUkdOQFsUKFKs74ki z(rl?jUall@N3O(4r`PsVuN^j2gvzm3{1K-rw${T wF(OgjI1NGHKg?N^w=;>nrcNnr^q+uLMw5@sn04h1+00000 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5a-inline-sum.json b/wai/vector-conformance/vectors/refusals/s5a-inline-sum.json new file mode 100644 index 000000000..1b52da2cc --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-inline-sum.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-inline-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-inline-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..61fb26b21e46524f65462476cedae94b346d980b GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKES7Hlbq5I;a|dtI~BWHH$dyPHa=haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVaOi7E8pTi(3y-+OO%R+evG6-4y*1D{52I!(dk zkRX>F%E8a=XgGj_VkFP&#ZS1{oY<@lU;@j5D^PjJ8?=^mG ze0n(eawhox`G6q;@D7T$T%sF!qIc6oCr=PvJdFSV-<*d%L$q`m@mb8Yi2NG#S6nTq zUn&htbN!*6llwCRZafQAy@%e{W6MzADq5P!h2DA;2q+la0&qntx*D0|JUNb$KokH) za}>FEQQspcS^9TvLy+~_{~(CHOa#qLW9DZ4sC;K!VX7FB_qLlmdTWcHKa_3pY#&|r z9|z}m&JxKxrdJ35hINa>a*|cFu()#fzJ70n2gGma0+{7T@KMB9$!{;9?fn73cn{8J zyM};^_@teKJv9-Zg3b3}^YgHICQH+>7@vT*TVOnw3ixvRzFhN5xiJmI_P&NOK5kC6 zob{E(?2yXh-Y>jfeZXAhpUiopmRmZ|$zs(RRfvG#3y=W~v?HGWcBFg!kE1~~ybfqh zmvNdQo|JYAfa19+^4n@Y?L}ErWnsPIduiNF>T15BB9-`=3gn}neBy_dbyd&eL>iGw z#N}ENx8+)#w7V@o^;%(FMW|fp`1Pi$T&rI3ya&xNm2o#~g^`k}%7COxN6=v;GtNj< sCr(4a_YPxL<*iI2uAx)R(v1R@phij4Mb@}!s>*U%C21H(5^byAUz;%D-v9sr literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.json b/wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.json new file mode 100644 index 000000000..a877bbbe0 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":3,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3,0], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..bd22e520597fd2a20251376e156b4002a5e66767 GIT binary patch literal 1180 zcma)4OKTHR6h3z*P3#~d8WA_~3PM4W_*h667Hlbq5Fenn-Hw^tWH6ZtGZQ7$MHgLk zXI+Z!^oO``k!2ATT!>V+F0-*(<9F_zTT|%5Gu%0^?|kRn$MVvR%YumBe&D~+>rPv+ zI3&m=hYE=Ea`NRuAIW1EI5;6(+kaW2Gl(%GFUCB&`mD3I^S-tI^~8&B8#B*;zP`27 z`my%u!RX7W;QQx2rU_qq&-1cvh4Xs9o{bO<|Cz81TIgNpiGYHAUjR_1vWwHP!n0!oxk4Tk zW%DaDUs<1|MYHB9jEo`Hwl^V&qbvl=PR})LABK1KD@+wLn)yt%lXo;XT|9uce6|nQ z{*N%ecbZ7vHobbd9kwkG>&c~}`Gw^>_w)@{@i6{?tT%3O=8M#TVi8Ojf4hF+YKCyTp7hmGBkxdAa6FxiO8z=B}nOF>X$c zf{j(h?3k+J?k~Jw{e!#07sfczC@k)2uvl^O3K0-u0T8etTjJ?&N4iJx8y+ z8N-b5q_kZE70*qP-&J$zAj;Y*3!63HOXGghRC6sAsl?AzARi9o6F;myR?RFm3{1K-rw${TF(OgD sI1NERILKL-H#3R6rcN&smq+uLMw5@x80rs@v;Q#;t literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5a-path-points-sum.json b/wai/vector-conformance/vectors/refusals/s5a-path-points-sum.json new file mode 100644 index 000000000..e2a8d9e44 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-path-points-sum.json @@ -0,0 +1,65 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":9,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0], +[0,0,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-path-points-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-path-points-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..7e59f71f8a19a6e83bf888a2e2f5849c7b19727d GIT binary patch literal 1183 zcmaJ<&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSZMIN+$(wnfzxSJ&U0%9%RS?m;kGz_F!)gl_ ziv-zZQ2}vQE2q=Fla!oB@hB|3)~BeHVM+V$t1_1zDxjc=!3e&3vV@$1c<-PX_b z&yPl5&v-w+>@$Q1-A2QvO?0zJ^d3V_o*=q-8VLZtJr93|Xz?=gv*5IV`UdRR+%0HW zsf;T(hU1K9HXm@B2UoFhUZ2;|u3m-{6Bc*!%BN1nBk#Z$NR_E<<93WNbI?yWWC2h% zOPO)7u<&K(W#Ww?lZ<%`K^$cvScZ}z&-PLE)qMilxUY-Fij{TM@qHfz+UEB@r9Eba`>S%iA;ryL@=D`VG5FgPwDECj$!-QwaYY1d*XB%kz z5!TbMBjF)G>=)qkVdnV}_&kW*FTy9OTt?v$Ux2q+BAzEDd9Ex58A#y{sKZTBSMzl4%`4hmp!y vk?3xmhJar>h&iEdW(s)&oq|g*3Uq=Vt?U$4=g?G-t2v#dVH_!pohbhU#8=`w literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.json b/wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.json new file mode 100644 index 000000000..025147397 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,256,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..76524bb9d6ace8ea0ef2fdac2df7c5d7076d047e GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%&|?u5Jcv}U9&@o;~ze((3*o1NvQ8qVk>(?rLQ5uHDY00`flg*`*GcoFeg^t1qc1Ntk@ z7PMWdj4Ic*N48I{&kJKhx!7j4X$+yK&f@_EV_Sf(Ol4OybDTTJmLG_M zplr4>*DmXOWRR7A*EWJ!ul)~#*vmrDY-^mu`eAryoMEz|FPJ9=u%Up#=ee725G z`;U$Bz0*YUwyD*_zhT|-@Hx3uG{3NX=bnCVga^cL=o}WGAF&P-zDj<30d4LLLB?}1 zp6vz#F5;7R0ru2HdPk3E|u^V^nJPJmvUhmip@PuV|-kk z8U^dCirEoW#ob?cy?TSW!at00qET4f*I=>YC*6L>PrXjqR1q@gdw#R6YFFx)Jnw!xOl929I$@+_sxmO?)SNnuWX6a@ t_2M)H{oo*HUEa(j;+i@|Fa0P`338M)Rb+#Urm8BJRFZ~qBvH2R{RPy7;TQk_ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.json b/wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.json new file mode 100644 index 000000000..0589cd044 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.json @@ -0,0 +1,65 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":5,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]], +[0,0,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..c16e2eedb9ad7b0974115d5aa98364a81a7b94b9 GIT binary patch literal 1190 zcma)4ziSjh6n?XNxigE1=!w|G5rlvw@kb#k444oQ;rsz=lJ>lv+$~;qkKH{b#3DtC zbjDJ&(?7(*B4rR2EJUKMWg4UL{Jz%OdZFMUEd6Ie!uf5WYDJe^g}lBJz{yKZE)j>{mo9 z*&G?^ja=L8xj9{b(AhayMPc5aH?XcfpZDPWGJMYDWEdX#1$_WS>21PV z7RItdIH_z^K*hNwt}mIXY&p(bCXX89^&m^SX~Rr4O>EM7ZbJQVSwE>qa!%-*xklbnXPBiMhb9Ha=%S0Rv1w+;^qfhvD2X-NP6U4ei8|ro literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5b-keys-order.json b/wai/vector-conformance/vectors/refusals/s5b-keys-order.json new file mode 100644 index 000000000..c96e699b3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5b-keys-order.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[0,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5b-keys-order.wvg1 b/wai/vector-conformance/vectors/refusals/s5b-keys-order.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..017d6edf263ca7a0bacf5ef8d1b541f33530d7d3 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3JyuD>_4o1{>D%bR(hzxUgjSy{eyRS?m;kGz_F(`pG8 ziv-zZQ2}vQYeJ7@u}d7B5bo{0D$+T`7?G80)~`QrZ|r?&ZhkxU^8428i(hZ<>@|OG ze10_iddBBD=D}4gBg&5Pc^!;RSlr1g|8*uFc_UvSRicuO(=o!#K|kA&1whFx zCB`Y~bIgkMHsU}jWSlYgAavAZ($ugqyxBgg-Wqj`@eDiDZDoIL@TU(|=Xm*?F`NHe zT;DxQB=3?wi7xJj?Hq^qNmaqZ;>x`T`n?ez5Wk@dP~Ja5j}ksgz6FoA_lE%E|KNJ| z>qywhPx=M;Qxo|q_1&z z$YT{Tmr_OC|BctH7r3i@$y_Jug{1>sELN?oLwJOkhYDDb9r5gsCGF#XEe)#SbwXRZ zjmwNMQ`#*8ig{DucGP^_50aKj{6^Jv;;4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d$-}~*%EG^!;Dv0RaM_$do?z9Ap zLxNm#sDL=DGp5J#*d-2*3HSD173myejL6D0tJj~m*LFTM*T0>5`F&&h#jiJacA7ue zK0g|MJrn%+vd0hsbPEj|F44_NqW4ooCr=PvJdFeZ-=2p*O|)2u7B^~M~Gj3Cyw_aKO)ECkE2F}&G6s@~b}FkOsj*qLre|Fy-RJXCG*?3@EO z|F^ildzMJvHM6?78@4SD@8hbXx%s7g5A=H@JRp8U7ofaM#{a?f z?AMWSkstR9@F&Ld6Y%*QZ2csB=453G9^(`6wu_ACQW0N4pO3p6XW4j zFW6W`%#5fa?*GQ?)eGEZzGSWw^}@oQE*8s9-XQ`)EI=+0mZy2@;hoa?MGQlWnrW0duiND8fvzwB9-`=3gqLyeCmhQC#sRfi8Na( zk(Vn;+>tAB(&@GR)N6+g6`^yk>o;1edaZWF^B%UsRK~rm9Y#u~Dg%;k&7s3cW?Ye| sZk&dI?;pmj$=jJkUPGtg(u)F>phrnFMb>#}sw#3(C21H(5@T!LKcfWU;Q#;t literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5b-rates-order.json b/wai/vector-conformance/vectors/refusals/s5b-rates-order.json new file mode 100644 index 000000000..19d109831 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5b-rates-order.json @@ -0,0 +1,65 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":2,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":30,"den":1}, +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5b-rates-order.wvg1 b/wai/vector-conformance/vectors/refusals/s5b-rates-order.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..c75ffcf99e0264f50ede09fbfedd908a004eb453 GIT binary patch literal 1186 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9&@o;~)_g!G;1aWQuWr-^AG2)qAvd+1Wu0HFm?YwWTe?9Ty+s4fEpRaH2 zw0^98dNBHOD)|0+4`~#Dw@|R*5?wD6y_+UFevIh+Ndy4+<}BT5w1m*aaeZ$ucR&pPsnEEJPriLl0R{WEK&VV*S0i(rC&!Ts zL;+AXN11WT`aL}(M zwvR6RkAw4jr-|fk)2oNwux@c!PO^&T7nbkb)88H8L*j4g9GK-t@L|MH$y*3$b9V$V zz6a;C-9W%ae9|t!o|=eH!RB|c`9;_~lci}`j8DMZE-{`S*$pDg$M|~02$CgTjJ?&N4iJwwmD8K)WINol(TD4v@lzpLibL6o&s7B*|Xm&X01speWLQi-3bKt3GECw^FateRPz zNF!2-xLi%*u3U|iZolKFUMFm-2$l0azu8u`EA>mBcfTE`GVW)cFj6vA8IW{o4jo1^ wsQ-pnN88al-+{U}fgYLqlxWP_Wgsw$UMl7?|4(YEgW1!Z*N00000 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5b-sizes-equal.json b/wai/vector-conformance/vectors/refusals/s5b-sizes-equal.json new file mode 100644 index 000000000..1a6599c06 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5b-sizes-equal.json @@ -0,0 +1,65 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":2,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549}, +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5b-sizes-equal.wvg1 b/wai/vector-conformance/vectors/refusals/s5b-sizes-equal.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..7d0bf0e4fcf1a5c081fecde0d7f5ed0c68abadac GIT binary patch literal 1186 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^W#)bV-fw4SY4O%oK}7F9@^19H(-Mvl z!XZH}IaENLmov7G<*`c~924&Cy(*H`=a6G$UR=9+{ds$B=RO|wdUI!| z`E%{_qv6*x!H+L{3>9E)p<%-%x;aVoev0Vi38IUqkpSS^^YEvM7A_+{18(!Eufu-L z-GTLl8$<2$o@Ec(Z*}y|dq8x){;0Gu@8pBT$ez~^(Y^^@?Kla(oWj8DMZE;61=MSKN)Uaq-P9!x{AxvODJ zjE7UbU}F_AGop&P{~NDYZ*Z6SlDSUQ3k!R?SS&kvhX@F<02QzxTjJRtN4m%VIvP~N z>x8y+8nhEBny7X>OokCJAJtn<)RRpg>d(lCxB#@4)lceUf= literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5b-sizes-order.json b/wai/vector-conformance/vectors/refusals/s5b-sizes-order.json new file mode 100644 index 000000000..bdf313c51 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5b-sizes-order.json @@ -0,0 +1,65 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":2,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":1280,"h":720,"cost":0}, +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5b-sizes-order.wvg1 b/wai/vector-conformance/vectors/refusals/s5b-sizes-order.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..5e0540758419c045ab094588724418ad79d18742 GIT binary patch literal 1186 zcmaJ<&1(}u6o0du54(tnM#M`TK`2NPKMvA^1zQRt#1By0Uf1k2S(@yI-Hj6Jp@$xN zvmQln`iFS%kYf-PJcv}U9&@o;(`&RH+DZXH@}^F`F(5l#jiJa zcAGypK0g|LJ>&iOvd>T+cn1YrHqp%j(fb*qlP8ESo<;zGZ_mS?C0e?S_#9?iM1CFm zYpxbFD3{0O8-p5XLgg+tjH zUe;$a&Hpvd@17-+cTKM@?uPXYhvhV@U}16P-UI#a2oH(h(giTfPvE17SIM{F(e~a5 zVEiAP&vqRF8}Vs72RlC%&%@?DWcdZyJX1z9uo$0!H!L!qO+|b;y)WBbDL1B(*xu7H z#>dU6p38g{F*l})xc?ikS06A}`I0$L)N@PwI$5k*X@&3zJ`WktKs(~uA4}TD|5_SU z!|Q<7bQz}^;z?;(1QgFrf!k5@aX&~}D)Adt*NMYk)KK$H6{yHflqVne#VMnfoQK#2-W2fymRDjBbuG?s->b2Sx$9dTDV;T06wjU@Ns{}~8G==s9 xnQ%s=x?$`CzJD0ACT}MaaSa_~mR{hg2sKKYF0#%|V^xvMDvJFukZ4haP(9 z&3Y8Q=^x_3LykpM@E}sXdd$UYjlVauQ&Z@{x4fD6@q54bc4n5BZe9^Y^!5X{oYfiAV|nZ%2gihKdoPQ07BOaIWz5>OXYKXf_sxy3CtrNqoO%B9_3ho} zkM&OvhhI(y-#_m&MF8DK!KO=eW0L6I6w&kvq6?>x0O6Z+@Mnk?FCjmRnHGSr!+yop zf(GUCsC<1evUA%0pwn|OiiPv~e?9H$W$@1gc3OKv|8<@SC^+y1ASEifI2|KAImXX7 zWYM~0mJ;_a>2u7%dgB?4j3Cyw_aKO)ECh@HgN19@J__#~RG2Epo9RroqpL0d zvwgVse}wVfGeq)^>D9&Eux)vGA6FI4FD&1^uiqQt0r49;59R$M^eEw@Gzm9~9{J39$KQWe{fY0Y(@ssd*CM#3$n4iG6Q)E7uiuelpyj*jo+?a-9Yfsad z7&oVS!Nw|Lc0?6%?-yRLUf{0qg)vUl3yb?2ELNPnLIi|Z00b<^ws`v6k?!$7jwaRg zI-xCH#xNs1DeV+N#dA~Schp?kkFu7^!ba8i(zus2)Lc_VD)BQF$VYwo#1E^FRU?ZN zX|_}%FISVeBUj_3(`);w*A5#hLgjqdZ?shPYVES;J!plgjC)x-jFe1O1}0saQ-_hv v7?G%MoQ9z9ALgvdTbV>&Q>U1v7X>OojgqE|taH;;RpgRN(lCxB+Sa_k*R0|2 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5c-opacity-key.json b/wai/vector-conformance/vectors/refusals/s5c-opacity-key.json new file mode 100644 index 000000000..11742e1e7 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5c-opacity-key.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,256,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5c-opacity-key.wvg1 b/wai/vector-conformance/vectors/refusals/s5c-opacity-key.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3a61a1f1ee0aaad3f36f06b47b85777c31be27b5 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgip~oUBco3;xJ?3Jy#^0OS2`Tj8Ti(q3_`TnIJ2T5mx2_5zdiRl6vu`+U z!Qzl0mmDe}&gx9)u{?H(gA>BF{Z}PAhZr-mGG^`i^UnI-ht|foQ!l@7&b;{b=FVR0 z=lbVI!>?z8A72ibB7knAVACbKStNQtO?2`E(Z$n9fbi{k_%lR{myw^vObfs_V87;S zK|7VosB&XxWaqT~L8s?n6bt9||9aXr3xmgE9HIX@4+a#BeF3^Mm0g^U5uP05=Nqyh zD4V6sz03L>bFkic1|uVgwe39!;wTHjvZHYg+ehJ@afPX3Ml+qMcJyCc{^B9D<+FXb z_J4%&y|YB}uIbgo-LP$Wc%M`i%`Yt9d!XMN;Q{d*x&Y<<6Z9zIqvW?2(ANGCWc(kD zXTO1ji~OWtfIl^npMuZlVDUxxJd>4ac+5}W+buDlOC@{-eO|7)Qf^E`v9+&hOpKdT zqhMoIF*~BFxc?ikS1)i^_`(<`8imCJ4Hhd-ULgWPEC2!)WLrG@<4E`TUq_Q_dY#ag zE@PMxo|JY=pyIhH^1Es-9Yk4MWnr`CduiNHnrg14B9-`=3gqK~eCmg_C#spni8Na( zk(aAU+?A_w((QNr)a!&z6`^vz=QrD`cCCKJ^B%UtRL1?R6Glp=Dg%=)&8fpkW{gNw sFHS?y4-RwIwQw~0`E%bR(hzxUgjSy{e$RS?nJ54@Uv(`pG8 ziv-zZQ2}vQYeJ7@u}d7B5bo{0EYUf{7?G809$$af-q?HJ-28g##kZ}Q=RaTH-fRBY z`1El2<&6LR^8rKn&>b{v*+e&rMDM1FPM#pTcp3=+zBvznhG^+B^0VNyi26G0SKKXV zP%e+kbAwUNGoKGQ&4a60IIsWL(XL(wV-ps4^2&dmiBJBaFOYJ{wQ)K|m^tWY8?pd! z&EhhStIshj)*Ev$GJ@oGeh-2;%0jRV8^fFJqw2>Uri&2`JJW6Hzs~WChxmF(Hb0*; zX7hiG>$_)(_>gwLFEnTE&s1ial6ctH;-&CQBy;S+~QC~jsg6g_zq){x* zmPq8~S{!xcS`>GBZ7*@!K|_V;TU2&WTtss$6FKq{*l8H)zq+2uSAe1Rr u#Ht%50pR=pV%FrXR3fjT6L9H;zKYSKq?sb?JTy@ixvb(Oh(d|6HRms!nBm_5 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5c-translation-key.json b/wai/vector-conformance/vectors/refusals/s5c-translation-key.json new file mode 100644 index 000000000..b943f3b9d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5c-translation-key.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,4194305,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5c-translation-key.wvg1 b/wai/vector-conformance/vectors/refusals/s5c-translation-key.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..1c663a54ff74e261e012a38a3eaf53fe1147a2d4 GIT binary patch literal 1178 zcmaJ7Vmjfk6g1)(5Gd@M>A7TQt}AwEEDyB#yP$ z66BIYIgVpFW9vi~yMo}D0NZ<6pbH!WBNl4brk}Mp_TD!)zn*#VZENcJ&)0YMnm;x^ zJsN&F=YRiv01BVi4g{>2u7AwZaTWMl9C0_aF#S2(e|RF>}K{uHHFB7!(-IbO!C{U0eSAk!s6l`}~{c z{}$@I=ZWN9)2qvO1KaXIk1rL@FD&1Cpx+zu1Hv1+#0&Z(uj2$qiCge#dw+|emCM%QdfuERfw*Wqu3jF2tdAa6F(U^u}dtcL-7@AW( zXJZvHGop&P|BGL*{;|7)OGcfj=N1oiu~>03gz$-DK3A~CvLl}UcBFgqkE2O7y-sLL z!%$`flhSU1sW3N%UPsL){V;8*G-y=4ViNV@hMH}vP{m%VeEGO9pLjuaT{Y4umPRF# z^KvzgI&w9NJH57-6x%^Vg^ZlOyN^V;#{sm?A;uin_ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.json b/wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.json new file mode 100644 index 000000000..12e1f3330 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.json @@ -0,0 +1,63 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":3,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,256,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.wvg1 b/wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ffde4dd9cce536c361ff303bd6cbd54e4d6924af GIT binary patch literal 1130 zcmZuvOKa3n6h1deXKWA=9T7L<6@-G!jE{wMVZoMy2=M`G+ijfO&ID(YA;~C1U3Ae! zch;roPJf6C7hM)n!G%b5>vA?$>-e3U+>%01IJxKXo$s9cSYEnyRS?npPyEln|lz%Q5J$_M&lZ`kHT9A6?qji^1jW+EPZ>1zj6p|_?UZemPp>s zYX>-MwoQLt%c`RJh2?t>^!p(^2!0b6puB#D9wmG<{FVaR+#7?8=VCnj9uhY4W#556 zRmxAn=Y1J`1wPMYWEvjx6Zm$j%x6;-pQHD0=U2pyX)HGPG)*4k=Hxjh))2E3YKZ%P z@EY|G?h0Q325MlukupnFF`Cm)g$NyQHRMYE(wsaZ8a^Xp7rwS^b znQ`s&X&BL iN#r$kidlwHpc2$5nRk&MH%(PTE~z99<4B@y%l!`&`r#J< literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5d-depth-five.json b/wai/vector-conformance/vectors/refusals/s5d-depth-five.json new file mode 100644 index 000000000..1baf2fd27 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5d-depth-five.json @@ -0,0 +1,44 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":11,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":1,"path_points":4,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":1386516} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":256,"ymax":256} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0] +], +"texts":[], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":65535,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":0,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s5d-depth-five.wvg1 b/wai/vector-conformance/vectors/refusals/s5d-depth-five.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..d23e1dac7cac81bcd6b65919ea0e054b4e960082 GIT binary patch literal 666 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!pOi4mO&68aTWv@g$2?pq9Mv42^0mXJ0U0c zpAlI#BLgEdR0r66ARoj96Ab^s04fcnV6K9Q!$^euP*%?b^~V4I2>(F*%LokzRR2Ok M2%(k`YpAOS0FR7?$p8QV literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5d-end-first.json b/wai/vector-conformance/vectors/refusals/s5d-end-first.json new file mode 100644 index 000000000..2c3788983 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5d-end-first.json @@ -0,0 +1,65 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":5,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]}, +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5d-end-first.wvg1 b/wai/vector-conformance/vectors/refusals/s5d-end-first.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..3a86a055ec66c295b428a5718facbcf3cc907f59 GIT binary patch literal 1226 zcma)4&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vY70K-Hj6Jp@$xN zvmQln`iFS%kYf=QJcv}U9(%D`xmcN)~BEUe0^)X z`D69dgPkv@g72UAm?D5~qF~)6x;{ztZi?vmF{1M)kpSVFv+$>h7A_(`gPG=mufu-D z)q)1)^00huFtl^p{-D!yFp7oq`hPv`>SZu8VR0p|{MWez6zux~sS=f3oQ@Hm9OLI3 zvLGm#rNlfXeU3R;Z#;wPG9LXOdk7if%)JTXC=0=|ytc<-cxS)DR57FZ8&mD*Q?l=3 z@&MZM**>Fb{%tY7dzwhzHodyIOSUZ!@8hbXx%s6#_w@TDJUD)H=b*fQgdQe*^n7ap zZS3xVjQ@l2?AMWSkstR9@cDh)`~-YH2kTG5=b5Zb!DD^`-&T?NTq@!#=<{+>2jRw8 zHg+|QiE(qP7i_E|W`jmyIUl`*=y|A#S!D89TD?~tuF+D8Erg-|>k?zqy zjwaRgI-xCH#xNs1DQy)&#dA~Schqd!kFu7^!ba8i(zus2)NE5lD)BQF$cKIT#1E^F zRU?ZNX|_}%FISSdBUj?2(`);w*A5#hLgif7Z?shPO6`*8-EW1djC)x-jFe1O1}0sa zQ-_hv7?G%MoQ9z9ALOjbo0&vjQ>U1v7X>OojgqE|taH;;Rpg>d(lCxB+Sa_k$rj<_ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5d-open.json b/wai/vector-conformance/vectors/refusals/s5d-open.json new file mode 100644 index 000000000..8ca388ed3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5d-open.json @@ -0,0 +1,63 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":3,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5d-open.wvg1 b/wai/vector-conformance/vectors/refusals/s5d-open.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..0ad43bb8683d2cc60a457928a6b250f21fadf6a2 GIT binary patch literal 1130 zcmZuvOKTHR6h3z*P3#~dIwEf36@-E$@v)FDEZ9;IAwEEDyB#yP$H-mhmPM1%h(EQ1z$*W*M;;ejsz@X2@e$#9-0$8WqK3j*K# zd}j0YIWou!&tPN(v9`SjK^$cvSax=tvB0uRD z;7?8Dr{MFxEWQYzXRI)-TYH+u#JD-t3pQ2}vm>gA z`@iuT^$+d}UjXAoy|B2i!D7W3SBQ`h3xR+I*%r_KIMO}-*U_Y!UMIAr%NS;aC#9Vd zsCaIQgN~ZZ`f=V;dDN%|UY7LIhMH@tSfxR(LixBap9WF&iE89YD$SBfd$J9|Qb4H}9n`9B_`-eGe k@^&tf*VGwi>BXT+QKO{kBJ12VQx&4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP56eB`Uc%9V0wB#?Lnt zf}muU67!VwIp$!!@eD>r5Nq3e5X4ayf@P*LbF+OE-r27(Rm^CnGu4j%Ys)`*2yOXn zpMz=sZ!x}mmPp<;y}Gy?wk;3u?hZl5 z|G{|n>qxlBkNXAq6Jz-a_c3^T%$(smJ4JU2ytN6n`FC~K)KY*c+OjeAK$%{En}5Ibr{Kv v5sB)?X$boMVa}Sook`?1b&6SfQJ@mkC~3OLIyX&KMJ}o&4dY0nZO!`!qRipp literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5e-ends-last.json b/wai/vector-conformance/vectors/refusals/s5e-ends-last.json new file mode 100644 index 000000000..934b16fec --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5e-ends-last.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,2], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5e-ends-last.wvg1 b/wai/vector-conformance/vectors/refusals/s5e-ends-last.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..6b655bf378585a7627ba0280dfc6799c797bbb74 GIT binary patch literal 1178 zcma)4&1(}u6o0duCUy}Kjfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3JyuD>_4+oaHgZ+SEC=-o$N&Awr^ z1&c+3Y_h0;IIA_G$FkTZ4o(Qy_Ft9g9AeDK%9yq5&pYe8A6gsVPQCoTIrHMzn>)L$ zpX;9=jlQ1oetg+y3JEsZ0m8TE;m;5)UPgWvGc5q$fc=`Q z1q~~ev~pvZ=5yx#L8s?n6bt9|c^&QQWjHoraV4*O>P$TH4t#-BnaX@OMtE|JpKZv3 zplp^h^OW^HW?;SLl|(6IoH6epbktzHwA82&BcQtX{*F<)?6nJ`%zQPwN#)YH&LE^JdjUazxG5mlQ5EI zizV`MH43|OHH^CbjvG52zo`OL&iCAATh*@BuQ<-bwjax|pLF~{$yg;|(xn--AIO9e uk?Mu95BkAj&bqvvNaQtjj9L1Dry|rSX}ZV;H;q+QE~zN?!$6{K-T4Qc4&mPb literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5e-ends-order.json b/wai/vector-conformance/vectors/refusals/s5e-ends-order.json new file mode 100644 index 000000000..b0e929d2f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5e-ends-order.json @@ -0,0 +1,36 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":0,"n_tables":0,"n_paints":1,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":1,"n_keys":0,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":6,"strings_len":0,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":236588} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[200,30,30,255] +], +"tracks":[], +"keys":[], +"paths":[ +{"n_contours":2,"n_points":6,"zero@4":0,"xmin":0,"ymin":0,"xmax":768,"ymax":256} +], +"path_ends":[5,5], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[512,0,0], +[768,0,0], +[768,256,0] +], +"texts":[], +"items":[ +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s5e-ends-order.wvg1 b/wai/vector-conformance/vectors/refusals/s5e-ends-order.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ca3d24a456bd157e4d7e73515a5cc429277faebf GIT binary patch literal 198 zcmWF!b2nsUU|=|K1w=yV2Br)~Mj#g=!U(0o(qMuKNU|ZgC@hd(ojJ@5l0Z?A{u6R? u|Cx|gGcz!4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSZMIN+%bR&0zxR7@XJ&cn)>T17?>_Qs_6@5o zSS%7`lSKu@S*@HNOJkQfm=mt;zber=#F&wlF>BYKch+}5v^Kt-dii~G=Ebi!cXnGp z*FQfReLds-__EIw9&{T8n>NwSBGLP4qLU|xE}ljLgm2HopCMYjjQlKSS^&NQ`!!b! z8dfUf%8lVTn=|VVIz0!YSU9i$*U_$Ch7%JOSMth#or*`^fiI9MQ`yGp7~#n=e!3wG zf-(t>GGIQ(yiB|?WRfxWAc&(Z1j|fg=4SgSyme4vs+iGCXR58Vzu_+)LT7wgpUE`; zw;10$OC;}_UOn6m+ZhkW2%b#zwvtY0(XTknQ@{~SlriOv0|ka!Xv~yAYehZ#j`(_w2%L_G^wW732o^z zh8f{WX{Q7#o|^)Q@}+VcU;o*iSlspk%BPFzM2i+7D#Hh)DIq r*a!XKFlSxfP9*Z0I>s#hz*7-wlr&vrgPX>xDwk9g`(Yr_w(k4`rQhM= literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5e-grammar.json b/wai/vector-conformance/vectors/refusals/s5e-grammar.json new file mode 100644 index 000000000..56aa1da93 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5e-grammar.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,1], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5e-grammar.wvg1 b/wai/vector-conformance/vectors/refusals/s5e-grammar.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..f935cc8200b920ab5513fdc0de9b9d623f47f3f5 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{GqbdK>#884cOQ8*`?}K- zEDi~B$)N(`tj?Go%VU=~I3`@%dsU=!h%qB8V^*&}Z?ElqXs&-d_4511^ow6_?(8&w zu6=$q{CXz%@nw%G0_YYBHe8~clSJ>Qh)$j$x_BB15WYPRf0}6FGV(K+X&(4G?AKf^ zXizSX$~OihJE!drIz0!YSU9i$*VC?E1_vfAuH=>fI+uWgeP19|qLPc#F~XB${Cq=J zFaRt-F;7XKV-D6E&tPN(v9`SjK^$cvSY{eCH`_GTyv$|n1*6=SJRjn zH>Y~R#wucFL=|!WH(sw^;4bqeGfvbC3ws(YmYuvp1cX=s1T4swc=pGU?(x5lCe`#h zp)Fm;Fe5xEZ5Khsb5rDZ)NI<1vX;uiM%DMyxR*54Y*R%l@iP_3$9?(K535g9Ba0Jh zwp1c7SCY6RSK_48Yx}9!4jU>$4koejKC+3swpu#1By0Uf1k2Sxk1r?nVjq&_fTs zS&yPO{X;x>$gzkD9z?2FkGWW_@%LtS+7ya!c{A_h_kQo~%q%V5yex?5-A7){zUH(A zi$j83a;Shft23cT^4J9qP6*fbUzO+#V$8_On8#P2cUHGQwAQ|zc=>&O=Ebi!x3^nA zS3f@-eLWTY__E6s0dx}u>n_ptBGLP4qT|Pi&YwgAgm2HnpCMYfi2N*Ox&eFx_G_*d zG^|v{m21PXozwOQot}eHES%T>>uFan!+jGLSMth#ol8K$o-dFpQ`yDo7~#n=e!d|K zg0fl4%v09qn1l7kGZ+~|tZnZ>5Jy=EmYK%P&Gun8F#~~-Uttf-_SWI@1LND2_GfjLO>fkBarcb zFrNJe5-#$SegXc}M1BfBpM%90;qy#Zrr|L^fp4qCd@hyn74&(z=1RFSjl{-|rZF*Y zPK|<%RmJR>s^Z>nyk5P)UFJ(>oM;plb~RWmJ9&i&2(bVNSddNe?2jYeqkkPus_At? zTe^&4MtD-%DuIgUrpWKAxpWX^ZIy-1n(w7?KWVDDmWov3XDX172J)#N)}E+l7AMkd zsYG6`Bym@+#7Vc`@l&r8HdTbm`JUfwtJ;4koejKC+3n~Q>;s>a0uWNRiEGD~QccX-Q=%GSy z)}!c6{}2%mITlgDgGlx2F&C>f{@%<^n?mVZ-pu>>z2AE~GYj)KE(#)g_lZ}tuQ)Bi z;*cPh94a8r>Wt~3Ja&$QW5Tt)S4BF77&Edm=F#Qn?d8pn&6V%RUjA5}e)0RwtbDW_v%pvr}QJn9)pUsvZ5;mVa^&+Va^x zyVD$OF}{0}NZvNRy0{y*Ef4SGs-pML7Vg~B?~U+)_zj(b^8OjRpYT!gEd;c-H3S*| z2jkhVBjF-H?ib)sjO8cb^Ep`jBz&I9$`m~2C-7|)na`ynzJfk4*IX$#rlDBd(ljQ< z&8c3nv5J@(QAOPSgV(DUxQl$rj1%?3+_nabMJKNi0U;Iu0SmG&p8j>Dd-$KDNj1Gr zXiJwd%m`0P8%0p@+!Xm8HJkRMtfjKBQT4qv?j;R1+f@fcER)Rx58A$y{sKZN~S6UlP=Av!$@X~ uNK`jYL(up4a@OR{Od_wTQ_Rwf0+pafNz+BvxoN5@a$Y5A7)KIqYu4koejKC+3swpu#1By0Uf1k2S(@yI-Hj3|*h3G! zS&yPO{X;x>$gzkD9z?2FkGWW_@%LtS+7ya!c{A_h_kQo~%q%Y4yex?5-A7){zUH(9 zi$j83a;Shft23rY^4J9qjtSTHUKQyKV$8_On3b!~+pF6jnrq)qy!^gC{o>b~+uO~b ztDheZzn%(yeA#7+0J@2Sb(iS+B+>gRqT|Pi&YwgAgm2HnpC+2Wi2Mv@x&eG0_G_*d zG$@xx>uFangMAYgSMth#ol8K$o-dFpQOU*W7~#n=e!d|K zf|6NE%u~|mn1l7kGZ+~`tZnZ>5Jy=EmYK%P&GunJwB@sX z_NV#3#rW=NB6-L3>f&zLwmiI#tBU5HE#AGa-y7ip@f$h^<^2=%FyW)*TL@@lX9zO> z55}`!N5VyZ+%LeN7|Tz<=X0?5N%%aIl__}4PvF}sGM`IDda<1z)TB>@bcFFS|w8B)zy{sKZN~S6UlP=Av!$@X~ uNK`jYL(umRa@ORnOd_wTQ_Rwf0+pafNz+BvxoN5@azQ0&7)KIqYu-O2xZ)iE literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-newline.json b/wai/vector-conformance/vectors/refusals/s5f-string-newline.json new file mode 100644 index 000000000..5d01a42fb --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-newline.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":5,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":3} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enA\nB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-newline.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-newline.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..09f67a87283b11293de256148e597a0991ef061e GIT binary patch literal 1179 zcmaJ<&ubGw6n?XtHg*vajfj^xf>4ko{y0bv7Hlbq5PyK$_PS=L$~54$4?XnI zoAoGq(?7(6ha8Kj;6bE%_1KHmx_)ma)1***%bR)ceeZqm?aVAK-nuG?=-o$N&A#rm z1dBt0Tym&@IIAG04h<*#pxK~$ua(L z0}6tYSxU@P(&so#)|;&)${{1f+=I|jgXFoH#>~z3QTfh6#fZ=JFx8I!YkSX=hq5i7 z?K7I@{}$(W&l1VIq)(!YyJ6e%@IJ08n)BwD?mf^Cj_`u`5nX`t{t0@N@LBRT1hl!g z3pV}{&S$?4zy&_;7vS^5wD<&kJ_zei!snr^Ou=J*0^fF#`CKaEE9e7rQ3v71ST^@G zjfrt{suygmB4%=`i2J|seDwl%nO_>`iF#pSUnh%YXILQuLX7EQLAJ!RKaO;d|8+E} zrq_VBbQz}^;Yn$`2r8bNBEO?%(|(k-R2DX>zL&5w{% xWX2hZ>c(jZ`u<_gn!KG!;F>zcEWIdD32KxyU1Xh`rm7+rRg#8rB+<6!{R0`&;p_ka literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-overlong.json b/wai/vector-conformance/vectors/refusals/s5f-string-overlong.json new file mode 100644 index 000000000..0c838a8e2 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-overlong.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":{"hex":"656ec081"}, +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-overlong.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-overlong.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..520875cae74fb21ae6bc80f1ec40d41a14c1c09f GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3n~Q>;s>a0uWNRiEKPR9?nVjqP@#w3 ztVhwC{vkbh$gzkD9z?2FkGWW_@%LtS+7ya!c{A_h_kQo~%q+~`x-5uj^CPcjUv*l7 z#UVj1IaENL)fv+xdF%oQ$AoKpuZwgBF=k|C%<|P2?Un5h&DC!wUVUGie);R|o$cn& zmCuicUrz-;zU(qZ0Np^rnoD$jlIZ;u(eYzM=T9O5!gpukPZP~uM1BS{-2}c4`wdqM z8kEbU^0mRp&T0FDPS3$87S8Mc^|Y&(!M+KLD|zL=&LyB=&lgCQsN~{wjPT?bKi`lA zLCGv7<|*lO%)xr&8H|h|*0%Q`h@&h7%S>bDX8SO_vsYoNn9)pUsvZ5;mVfd9+Va^x z`_ug2Vtn^Bk-Teqb#XUrTOQuWRYjZ67w$dK?~U+)_zj(d^8N{WnD9~ZEd;c_GXxp` z2jkhVBjF-H?ib)sjO8cb^Ep`jBz&I9$`m~2C-7|*na`ynzJfk4*IX$#rlDBh(KIH; z&8c3nv5J@(QAOPUjn}IexQl$rj1%?3+^z@bcFFS|w!&1#y{sKZN~S6UlP=Av!$@X~ uNK`jYL(umRa@OSSOd_wTQ_Rwf0+pafNz+BvxoN5@a$Y5A7)KIqYu-OQ@#3BU literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-surrogate.json b/wai/vector-conformance/vectors/refusals/s5f-string-surrogate.json new file mode 100644 index 000000000..3178dd5f5 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-surrogate.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":6,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":4} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":{"hex":"656eeda08041"}, +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-surrogate.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-surrogate.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..9f511d9bfb31a3858728eefd99e126d1d204020e GIT binary patch literal 1180 zcmah{&1(};5TCc3Hg*vajfj`{1fd{F{5VJt7OWIRh##P~y{_5UWHH$dyBj6cLk>Ok zW<81?1pPxic*wDc3LZqNSH0z8w8r1Ox0^&Lbe5SnpTC)%_f}V~Ulc_2_5(|E_N<0r zvPh6k7Uke)wx;+H^jYvZc1{u3c3$M^6nu=x%sCG)KW%R8zOVPb9((?6bN<<{*Ee_T zKQ=zyAAC9CegC}25FU6N1)Da}Re-;nBRYD7=0QlxK?0KT)^N25CrfbNrLVwBC zg8IecsCcD6%I3`a15VGuSxg+)|LbT|i~dA~#+5AjuT%2K8`}b*0u^j*#}H4B@zVoQ z02GWUFit`5F-_LT1bGCSM9e)1VlNXxGt-#4S>G?;8dsPqMl{ozYD@oh`ro)Y4L%m8 zf7ZuX2TRUxpCppEOs_WXhV=}G&uLb{&sV*r)!TRViz7TCenn@%e0~J)N4!klmPcE| z0pR#gIG^n*0yg5)b`JK;RD1?DZz9W|h0RlCGzZJv#@28r&v-WF@#XZ!Y;&pHmBe*!9bg zR4oZ3X^vPTF4v>5CD+5K)oHr1)AVa9K;=@~tu<8nQssi<+-vx;3_D5F50s2m0wi6U zLi>SCI3rT+F!ll8{U5U;ZzK|N4IN{aPT;8sHA4koejKC+3swpu#1By0Uf1k2Sxk1r?nVjq&_fTs zS&yPO{X;x>$gzkD9z?2FkGWW_@%LtS+7ya!c{A_h_kQo~%q%V5yex?5-A7){zUH(A zi$j83a;Shft23cT^4J9qP6*fbUzO+#V$8_On8#P2cUHGQwAQ|zc=>&O=Ebi!x3^nA zS3f@-eLWTY__E6s0dx}u>n_ptBGLP4qT|Pi&YwgAgm2HnpCMYfi2N*Ox&eFx_G_*d zG^|v{m21PXozwOQot}eHES%T>>uFan!+jGLSMth#ol8K$o-dFpQ`yDo7~#n=e!d|K zg0fl4%v09qn1l7kGZ+~|tZnZ>5Jy=EmYK%P&Gun8nk(hTG!h#-n#RPq zIW-D4Ru!{js)~ER@p|kN$NusixNn zZRs+G8R1E3s{|^ZnC&7!jAX`$ uMD^k{1pVM3XI*^V8UW2SDtz(zWDpTgH&0{9&X19nS=gtLlyvK zyOfDjMkNlE6LPRJfMoWN7djZF2rSFS@}_-My}RFGyNGDn*>2aII>R45RGr~va}L=2 z-(r3Dtcbd6XLa#5v@;y;dDUUH+FY8MUAXta{B!()_zzuxa{mN9N_d@o312pLcL2z< zu%3Pm2@mx~W4Q*Hi7Qr4{wG9#o&`MjFM+ zZizx(EyqzuEk|*u*RCg}cF@ovI%m4|MoU+(Ov1mT8Q}^ZRCQk_!ai@@C$z?|W}&W_IS*RZm3TedKEQRlns? zeDNd@UkZp*{Q*4&dkA`o!2uz*`>H7C5F;a%HH+7uw^z15EUbPz_451L=!;)(?rbmo zT>1QH=j)m9$Co`)gwPED)&h~6!y@lTL{6R%xp*205WYPRe^g}pGVtd+?=jI=*%3fqA+j%w`5$iY#x}fh~&z@?n@})zV9JbmU4j8vBJqQet$z2 z1ZBIF$x}w9tF;KuV5J9fwz~&U7^Mg-JB^*2_EGizKEk5NXggZ8Z~ofx4)G zdir%F0^|q%0(?G9mmh-9gK+*Zd=BMg1RnVXd|O5G1yaOUFb5U@2Vr9@>$`@=#@Jly z1s5Ch#(Og6-T#f}YZkb3yk*vT^}_U?DfZ_4KEewHG19|=YY)dDN^nN?FoPn|fkF$2x7~I#iFB)zd~)eWIIrk}A7p z3VAi3CQE8QNte3qMpkM^O&tR{*=aOex_Yg4rBr&@iZYdS^L7+#mFXNz2HK~NVwJNZ u)tw}ZK)-yLv!-t63VB1FVU}(j>J%8QY!_8$(@c-48J%WP5-YT=mHq)`SKv1mT8Q}^ZRCQk_!ai@@C$z?|W}&W_IS*RZm3TedKEQRlns? zeDNd@UkZp*{Q*4&dkA`o!2uz*`>H7C5F;a%HH+7uw^z15EUbPz_451L=!;)(?rbmo zT>1QH=j)m9$Co`)gwPED)&h~6!y@lTL{6R%xp*205WYPRe^g}pGVtd+?=jI=*%3fqA+j%w`5$iY#x}fh~&z@?n@})zV9JbmU4j8vBJqQet$z2 z1ZBIF$x}w9tF;KuV5J9fwz~&U7^Mg-JB^*2_EGizKEk5NXggZ8Z~ofx4)G zdir%F0^|q%0(?G9mmh-9gK+*Zd=BMg1RnVXd|O5G1yaOUFb5U@2Vr9@>$`@=#@Jly z1s5Ch#(Og6-T#f}YZkb3yk*vT^}_U?DfZ_4KEewHG19|=YY)dDN^nN?FoPn|fkF$2x7~I#iFB)zd~)eWIIrk}A7p z3VAi3CQE8QNte3qMpkM^O&tR{*=aOex_Yg4rBr&@iZYdS^L7+#mFXNz2HK~NVwJNZ u)tw}ZK)-yLv!-t63VB1FVU}(j>J%8QY!_8$(@c-48J%WP5-YT=mHq)`(BcmO literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s5f-tag-underscore.json b/wai/vector-conformance/vectors/refusals/s5f-tag-underscore.json new file mode 100644 index 000000000..8dca76aef --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-tag-underscore.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":7,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":5,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"en_GBAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-tag-underscore.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-tag-underscore.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..63761b8402c77e7e2ee0f8fc7d06d2ea4c9599f7 GIT binary patch literal 1181 zcmaJ<&ubGw6n?XtCUy}Kjfj^xf>4koRu9sH1se)Qh(ADWdy_RgO%{{gu)9%0J@n8+ zZ`PyeP5%%N9&#+Af(Mc6)nhMKYy93!rcI&vmN)Z$e(&3vSz27UB8ceSM_$do=ClNh zLxNm#D2F(!Gp5I27oe9oI40cNdsU!wh%q87*F3)VyuG^pp}F?$)XVSdQ!jqKxwYN= zx%&CR&et=+k1u-+5kNQ5uMvBszJ5=;CQ40QmMi{3)XO%gE1wQw{ZX*sr-; z(4bTrmaY$mmZzN$IL(8rSU9i$*VC?E1_vfA?&OvKdL#h_`@TS`NJST?V}zN5{%AuM z07bJD8K;QKiBYZDn1hia#M<^A1aXvwU>P=sH`_ z2YCD|T+eqX6!{%BoA#rurLwS5@x3(eB@H#(RFO*jOa<~$Uq1E2$`jSd z;zXJ)mB`DLB<{$SIO+7-e(JTuhKkTR*Yz7MRk>Q7_PqP8FqLsHYlo4Nsmg$)TSw4g xBr~o^R5wmT!1oVhR^`o1BCnxSaOp*XO3)y&I!ce34E`aT%c*XFlw_8$ii@mEvajDF4DiwJ1P zztmX)7Lss1lO9_(5DXXr@d6a=w3MBqWq?5SssHR|=(OW?aIQ$0#Wo01p)A+fC x|LV6D!?UEQy~F0#Z5{OEU)@13yyIy9IMm;t2IhABTYdf;;h>{9?1#r2ogZXaSjqqZ literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s6-held-not-held.json b/wai/vector-conformance/vectors/refusals/s6-held-not-held.json new file mode 100644 index 000000000..a9e3db535 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-held-not-held.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":0,"held_len":40,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":40,"sha256":"22b94c8c4fa46c25e33acb82f6071fa66e39381e35c18faf635257340879c8e8"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-held-not-held.wvg1 b/wai/vector-conformance/vectors/refusals/s6-held-not-held.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ca2ffcc6cd326d6b74fd85f65a339cfaf9d30c49 GIT binary patch literal 624 zcma)3Jxc>Y5PiERNwg5b1F^Y?DB6jj5XC}+U=tK9%n$Gc3khi~>_jXD?X?WH)^-XO z2e$qL8-IcA`QFZLh+yHseC^Da2`o&rK)^wh`4X_Z!g`CG+U)Nze$cc-k!5AJRg{sZ_DcyjH(W>Ul; zcw_Fu)m0%!KFl5AQlv>hR$a_#D#t1TQZuP`r{O!QDT+9nl$039|KOlk2^bk0J^%m! literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.json b/wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.json new file mode 100644 index 000000000..672e04947 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":0,"held_len":373,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":373,"sha256":"32c21dbbd02fc491367cd7c5bd3727141d810aaecd16204ccd08b71819372b7d"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.wvg1 b/wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..de65d384bb58558742704bb796a3c32b9322213f GIT binary patch literal 624 zcma)3u}T9$5PiERF{Ti~MNN@2g^D zSmJ2w(lTV#-LT}~60fYfCg)KGRw>}Z;iTjIcT`g}%^0kpMI8TwfwD3Xg=xav!hiMK uiV;{+)ZTG(>$i^jwO`#)FTUex|2Wh?S_Rri;jIz>jd0Xaob}W5{lO1Oj#sk) literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s6-held-shorter.json b/wai/vector-conformance/vectors/refusals/s6-held-shorter.json new file mode 100644 index 000000000..5639043e9 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-held-shorter.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":0,"held_len":375,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":375,"sha256":"32c21dbbd02fc491367cd7c5bd3727141d810aaecd16204ccd08b71819372b7d"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-held-shorter.wvg1 b/wai/vector-conformance/vectors/refusals/s6-held-shorter.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..cab992c0ed70cbd3bdc7a812204907239bc51ad4 GIT binary patch literal 624 zcma)3u}T9$5PiERF{Ti~MNN@2g^}!SV=v z6iXa!U0Q~$x*L`pT;i2g*W^6Pz$yh?IGl8x|Bh;krWu13w20$>Fi=(oqA*RETllYj vTQLGlirPDFZvEC#zxJy;>cw|F?H`BwN6SF_AiOo=zY&f)iqn34x;yv*QT|uA literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-hash.json b/wai/vector-conformance/vectors/refusals/s6-inline-hash.json new file mode 100644 index 000000000..fe55033db --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-inline-hash.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0b" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-hash.wvg1 b/wai/vector-conformance/vectors/refusals/s6-inline-hash.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..879b0d77def50c5936d364977bd595b37ba997a1 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duCN_$Qjfj^xf>4koejG{<7Hlbq5I;a|dtI~BWHH$dyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d0-}}9{Gqb#O^Qs`CcOQ8*`?}K- zEDi~B$)OzLtj?Go%VL)}I3`@%dsU!wh%qB8V;;{uZ?ElqXs&-d{qp<9^ow6_ZtpaI zu6=$u{CdX!@nw%GeCQSmHe8|`d7}4|M5j&?U7SJ!gm2HopC($ojQlKSS^&Nd`!!b! z8kEbU^7X;U&T0FDPS3$87S8McEoxUUg98&5SMth#orzEWzAum}QOU*W7~#n=ezqYC zf|6NE%u~|mn1S`iGZ+~`tZnZ>5Jy=EmYK%P&Gu1vXTQQ!F{7EzR6F{wEr0$H+Va^x z2h;rDVtn^3k-TGib#XUrTOQuWRfY2l%XjbV_eOX?{Dv+-dH)1GO86-G7JS;=9fFMi zgYoRwk#Lb8_jB+k#_|*J`5Y`h51(hUG6|3Q34GfH=5wilFQ?DTHCM`wX(%>#HI0dJ zbE@ZTtRiMdR1x=nRZ7(UdgN6!GIp6gfEmgf%yHYGZXa$LkdTBcdl}uC$CS96Q2cb+E v5vy*L1fcI9=B&wEsYG5=Czz!d`YJ|^lBSESbJIjsyhsm<|42{uNBrK*PMbpUEpO)i_}=&4&dj~l>lXzPefrL;*`GQc z!Qzl0mmDe}&gx9)kvw*RgA>BFgV!ZGi5N4oGUmyL+2?mR-)~)e_vPp2<@(HvSJCX- zm&29D>2DuTb>_b^MF8DE!84cWYLV#kG|};6MCVQ*0m3(D;GZXI%pt#knU;ZX!rtO) zL8D4#T)8qD+c|B2(CIlC#lm_0zn*sWGTJv`aV4+(*SQ1~?D+zzGL>DNjuD<5*6 zvp>!MEynj}h~y2^tB<>3+w$-}sVZ7pZr!}C-y7ip@f$h|<^2crFyW)*TL@@YO7#;RgrOjU8~7hbPk;I{aZ87G>B#vct9Ehn!K0U;Iu0SmGr9{+Zvd-SiPNj1Gr zXiJwd%m`0P+a*x(+!XmewU`d0tfR89UGu#(9wcqG_&`M}@iP_3`$PH24{HxqJBt%( zwp1c7*OIs=*W#o%==!PG4cjV06;^dQKZoi+=}ZrI&a0wNwf zG%S_Ir5nR>)@N29bh-~lv2a}fucJ-94G&akoXI=?bt)ct`?f%+NJSgdF~Xgr z{q#T-1VytInWw1dn1c1eJs257GCjKoLF{EAXr>#}H|s~?t^Ev>#f+vqlWpn0&iM0( z&>3G==b)SaYmD!lA(D4Ztq$&n^^Awl$)$p&<@)M<{oV)9WVbadQo|=eH!R9$+_&jXxDU)ef=9c@TodWaORKSIlK222Quu&AIUxsEd(cVKsBnVD40|@J8mhYgi_?1_)KXtl- z#UVj1IaEQM)tS;`W$Y3Mr-W;VFY9y$F=k|CO!(!;>$h(8Lh$aBda}9EoBjU&!;3l9 zdbU~rd7?e1m?DC1qu{wqbfZS}d4}lZaia65kO1MEv+yqxEnh}{9y2Wg-+}##s|Af4 zjY;GBcw*)yw$6gvFJ-@?Vz{QMB(1qi8=9yj*jo+?aO7)}E#@F>X$s zij6hJ{Dhj~?k~Jvy}(`LOJN{X&3;;&2l;P`Nk=!mesvYhUra``tK~>9FXNt@FBQiBe r^BDA_!<=n-tB}ZR>KwBSlSpN#QPOmg9d4Sdrd&~39;b;!+qU-)61CkK literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s6-order-held-first.json b/wai/vector-conformance/vectors/refusals/s6-order-held-first.json new file mode 100644 index 000000000..03f0a36cd --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-order-held-first.json @@ -0,0 +1,70 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":2,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":5,"n_keys":4,"n_glyphs":4,"n_clusters":4,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":40,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":40,"sha256":"ffa63583dfa6706b87d284b86b0d693a161e4840aad2c5cf6b5d27c3b9621f7d"}, +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"7db129895592ab9c46a9c7d792362e178b946e29a5917949441cceb61b6830c9"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"584f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-order-held-first.wvg1 b/wai/vector-conformance/vectors/refusals/s6-order-held-first.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..a0352d615277dbcdabb3de4ccd0e895b3d99c096 GIT binary patch literal 1314 zcma)5&r4KM6h8O8(aE7AXh@@7}qlA>n!4d(S!FIo~<=$Gb9e=BOZ|*Pk() z^_Ei+LO8-9K`uGe!v55{;jq4~X&+|e5bIWuTYH$Mz3ecI25&4Lzx{2oI&o)Z=Hz=a=mu-!>CbcFFxmoThLN2*T|h( zYG5B2sExsNYdy27F?}u>SVoqtqE}=g2dC2%kGwToFqEaNtC@kLbDo+DqfC%BQx-f~ zeclMNg8qy&SgdaEOAx#eV$F2(cTbzeJ8Kyx3yj#e-MOQ8ZTVX_L|Z;{PNv#c;%#5L z%oZlZSKEo?In!H}?-Kg|{GbK?@7T<*f`P%&^B48I$3wS?IgbT}d753- zG{%SGR7_c4x9Dw9x47_w{|-H|If_SwI8jUu{nEi=)M;i2kJtx#)>!7m&7Y2RxBqrD zsixO})^r-ejG$9mPBRtyrl2&X`r>+!R8-=Z^QBB2)}pfNyQTsal@jI2vAVob^7GeK zISC_amRK?_$D?pcj)&1yZL$<+CjGJsICG#{DpyqgSfMAAxm59E8P<|XKTtAO2{Y-` zCbb{P1QC&{hOy7|^^KebIh;twHFeCr)B;aMoTH?vB8w;*t8O`>qSy}u$z=<{9 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s6-order-inline-first.json b/wai/vector-conformance/vectors/refusals/s6-order-inline-first.json new file mode 100644 index 000000000..e87056967 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-order-inline-first.json @@ -0,0 +1,70 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":2,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":5,"n_keys":4,"n_glyphs":4,"n_clusters":4,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":40,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"7db129895592ab9c46a9c7d792362e178b946e29a5917949441cceb61b6830c9"}, +{"carriage":0,"zero@1":[0,0,0],"length":40,"sha256":"ffa63583dfa6706b87d284b86b0d693a161e4840aad2c5cf6b5d27c3b9621f7d"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":1,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[3,0,10096,20000], +[1,0,6000,20000], +[3,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"584f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-order-inline-first.wvg1 b/wai/vector-conformance/vectors/refusals/s6-order-inline-first.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..ae48f1c622399e13effa513cb5b9bdf036fed617 GIT binary patch literal 1314 zcma)5&ubGw6n?XtHa4gT28$@^2tuv2u?k8N3vDTCA*i6%UOc4Psae|YhTV-4upn5l z;-waE_NWE*r6K}2uA@^17U zt1N`DghhgEvZw{|)TU*@-Vysp;T(aT2=`VWr)fU|jL3^?W?pvPzq;^Z@$9pY-xp5h z+aEmgx}H9)jSL_B{OUlt_Y?OsPGjlh-5*Pp$$KlauP1l8r}yQ~4?JJ_@MZFP=esxK z9Wz|#V9f(~)+QQgC3@dRv}ZTb;k`)U;3pmMJBfymA>Rk?L#QvnUgT~;^<1uzJ5z7) zbMQ)d0#4gdS~#cYl8FOQ^$imick<5DiNzsj-4{q@DQjbjMwmJ1#|l{hWX+akoUERA zT&xvyFw%e|c5+{WILd;_H4K}LXKGe&t#_C%Ml|e9x1}eN;J0q6PVmf}{=YuqwZVRS zi|Z@xMDl{+R>57ey@;-=xb27xbzEOhu+|h@k_*YqL3Q?t&7E&6?X`S5My{)ka=-?&64)cKb8j7 z@H(L_-Nt1`m?zEk{)ly1plIY(DcBHg5k3 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s7-before-geometry.json b/wai/vector-conformance/vectors/refusals/s7-before-geometry.json new file mode 100644 index 000000000..b7b6c9e12 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s7-before-geometry.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,8388607,20000], +[8,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s7-before-geometry.wvg1 b/wai/vector-conformance/vectors/refusals/s7-before-geometry.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..601554c9534958f6978dcff3b1ea6529b3a84e41 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajR!Ar1fd{F{5VJt7Hlbq5I;a|dtI~BWNES+b~j3>U=Ka? zW<84D^bhgiA;%&rco3;xJ?3Jy#^0OSX;Ub^<;}d$-}}wXE-l`?B8ceSM_$do?z9Ap zLxNm#sDL=DGp5J#*hLPG3HSD173nNujL6D0tJj{l*LFTM*T0>5`F&&h#jiKFcbY%f zK0h3OJrn%+vd0hsbPEj|F42uiqW4ooCr=PvIE@4V-=2d%O|)w}TyY3Bn@^WZ8L&g=7f+SSY8z=Xw}yz;4Y2`Je21yUs{xwsu8%pCOd4Osw` z%u-^UlD@~hSZ~b1$OvL>`woIQ%0jRV8^fFJqw1ag4%5YmhMnnl^r1&z zu(67m8Bs;t`;EU>FL0Onk-1LP3k!R?SS&kvhX@F<02QzxTjJ>-N4m%VIvP~N>x8y+ z8m3`n{)hYll|aYdrK saT)@?e;BhSZ)FmB4V{8ZFA7wG9wp5bS?8gts>nr^q+uLMjIDY907d2F+W-In literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/s7-glyph-missing.json b/wai/vector-conformance/vectors/refusals/s7-glyph-missing.json new file mode 100644 index 000000000..2cf48e389 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s7-glyph-missing.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":1,"n_rates":1,"n_sets":1,"n_tables":1,"n_paints":2,"n_texts":1,"n_tracks":3,"n_paths":2,"n_items":4,"n_keys":4,"n_glyphs":2,"n_clusters":2,"path_contours":2,"path_points":8,"strings_len":4,"inline_len":554,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":498549} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":1,"zero@1":[0,0,0],"length":554,"sha256":"6b368f6c7be1d26780df1299e2842791f9a34de167ec7bd655f4dd1564e3d9fd"} +], +"tables":[ +[0,100,400,900,1600,2500,3600,4900,6400,8100,10000,12100,14400,16900,19600,40000,65536] +], +"paints":[ +[200,30,30,255], +[30,60,200,255] +], +"tracks":[ +{"kind":2,"zero@1":0,"zero@2":0,"n_keys":2}, +{"kind":1,"zero@1":0,"zero@2":0,"n_keys":1}, +{"kind":3,"zero@1":0,"zero@2":0,"n_keys":1} +], +"keys":[ +[0,0,2,[0,0,0]], +[120000,2560,0,[0,0,0]], +[0,200,0,[0,0,0]], +[0,65536,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":25600,"ymax":25600}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":256,"ymin":256,"xmax":5120,"ymax":5120} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,0], +[256,256,0], +[5120,256,0], +[5120,5120,0], +[256,5120,0] +], +"texts":[ +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":2} +], +"items":[ +{"kind":0,"rule":0,"zero@2":0,"ref":0,"paint":65535,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":0,"ty":65535,"op":1,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":1,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":65536,"m00":2,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":3,"rule":0,"zero@2":0,"ref":0,"paint":1,"text":0,"zero@10":0,"n_glyphs":2,"n_clusters":2,"t_on":0,"t_off":120000,"unit_scale":393216,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":1,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":0,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":0,"unit_scale":0,"m00":0,"m01":0,"m10":0,"m11":0,"tx":0,"ty":0,"op":0,"zero@42":[0,0,0,0,0,0]} +], +"glyphs":[ +[1,0,6000,20000], +[8,0,10096,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s7-glyph-missing.wvg1 b/wai/vector-conformance/vectors/refusals/s7-glyph-missing.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..7a05efbd0f092f51656d03d9751a3fde9e977458 GIT binary patch literal 1178 zcmaJ<&1(}u6o0duHg*vajfj^xf>4koejKC+3$_$Qh##P~y{_45vNYKZyBj6cLk~Ul zW<84D^bhgiA;%&rco3;xJ?3Jy#`l}qX;Ub^<;}dW-|xMd*`>u>R|OHh`-s)->rP8R z91`S`Lj{gQoiRO@$1Wi_CcySy73mzuzz9Xn>h3$Me&3jW@$1cT-33r>}&S z{5mIG&X4;A_9w>j6YS$2Z2ctrn90f%d*CPL+b)97r6PX?eP6D5QZ%Na*xc1LCWhuz zFW6W`%#5fa?*Hb$S1;@?V<_pT`ZQJ93cYYSilu*v22NFe;nx^|LbT{O|KK$ z(lC@6!KAcZWGc)}k>63XX+O$ZDhnG`-%I0O(onNa6{*C}R3IPslQ-`u<_gn!KG!&THzFXX!s{D?;ooK;pG4T literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-box-empty-glyph.wos1 b/wai/vector-conformance/vectors/refusals/wos1-box-empty-glyph.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..b0b54605e89b0ca6000697ad16a5e33fe178f11e GIT binary patch literal 554 zcmZ8bJx{|h5Vez(Ld1_a_O=2hmJUcPNRdDSLD!I6X{6SvYzI_{k)b0$tqcEzseHb3 zid49>?0fg_-t+Cn)sa?+-Eh=FTdG&-{R^4X$OLbxmg_e(A|zG=&OpTAw{Zg8+2T9E z@fO|z4*uv#>;Z|sg8r&2da>#v6Zi-!g%V?2%XP4Adt$D#Dem?g@O5cKAzUO19WxYF#K3 QQ^!5JVe6{e5NrqO4@xhDfdBvi literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-box.wos1 b/wai/vector-conformance/vectors/refusals/wos1-box.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..68d72517c17912936030fb2324ba6b7091360a08 GIT binary patch literal 554 zcmZurO-sW-5Zz5utHB>J-rJ&{y!0S=5dsQ|_8OC^4YZrGyHN@r1$*?T_2NJAR6pNr z6e>6yHuL7qdvCALE)KLpZHG_owXJ%Q**~R~Rte^%dRo6i7~wz)yj*7>V(^}h;3&QuCnBJ*3(B{s;AH2)MFej zz>!$Up3ah!kFcyq(T_rx3Nx`shkDiz?-9kjpHVOk_JIgpkjYwG@=~?x!b;w)Og`hG zTNpoKUlsj4b#-G49^SHHn|m(lWJ-rJ&{y!0S=5dsQ|_8OC^4YZrGyHN@rJ@n{L>&1WKseZoM zRH)z#?CzU4@4dafxH{4bwX2jyAGA;PDzkq|b`s1>wOqeJ7@;8zI0F%b-^K}WXN&Iu z$6I&@IOJm{wFe~r3jV9E_{FM=PLLz06iR||EY~5nok_ULlHXZRpM0yHzI<2DaX0`+ zVj+7vOU^#SvK~bng)S9lVviTJ-rJ&{yc86?2mu8}dyUD|F0`Ann6yHuL7qdv9;fFAuarZHG_oq1EbGy~ymJ(qI$JOSN3TLKxvd8gK?82EU0D;LZl$ z0ggBD7I4VNOlk*6{1yCHUGa-m7biiEpi(Fa#}0divr`J;mVy z9EpYO=`1<@2+MjD{U~&)FcW)psAv879#Ope83of|ABfNenXI)XFIB59tmNIw<})7p zg{>!Co1&kmzG_^-!#lR@@|sJ!UC={r`uAMam816O2|SHmHKTFmX3aGB>C_Z#p*)%A z#f1BZgZ(tUnix-2Q%{X$@?66yNPn!2rCK%|&ns_WzxeApptG952WyYFG`3_14O5#! RnS^@o(KS17DocnRq~E@mgt-6! literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-contours-over-points.wos1 b/wai/vector-conformance/vectors/refusals/wos1-contours-over-points.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..5b15c53bf0e0baceee82883f495d9c196b3f0ed1 GIT binary patch literal 554 zcmZurJx{|h5IrX;g@_+<>}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEa6W@1E zky?p!*mMTpcOk+KnF^v@N^}_fIM4K*oFx%l9`HCVW^LalwNW)E3SdcQ)o7 z#_0y$VI1?BliFh>{=ojLuK1JOtRFR#1#bq^0)(TYvb7IdO*Nb}kOfcR5PNHeFkAv7nnXI)XFNIZ?t>oQc${7v) z!h{J0UG>Y{+s0KiyeC7h3{>OY0v}7=f1oN@hwaZJ&vESR49C{ZnrZ3tsjkSd@^oHS z6Y3ui4)gqaqCMIsOtm5O6xbowaiwmk=U9+2nJ+Vfi)Q~dzfci`ga7~l literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-ends-last.wos1 b/wai/vector-conformance/vectors/refusals/wos1-ends-last.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..76d929ce4b5f9edb639ec9d1039ae453e270e23f GIT binary patch literal 554 zcmZurJx{|h5IrX;g@_+<>}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic}=dk#q0fz4v^3ado7CYd3yy(6;a@vwuo~f{f=iEZ1)=O!%-g;)02k`E8sr?riZL z#_1N`VI1>$Cbh>%{DJ*fUGYz$%O~Sb+-spEn6KqJ#4*(g*EJQI8FxL(xLM}q18R}xL5eI#NRWwO?mycAYlwvu;)DQ7hF z3lk<3bk#3&ZyQ(9@SY60GEj|o3w$hf|ADGt9kxG@%;VVE8IG-+HPh1PQ(ci^<>|bv zCe%M39On7;M0>PNm}*1lDX>$NZmhMzARCV6)@!z3{Pi5*c|hi)wdc1qrY6T4!Zrm9 R3H8*&8**M-gB&}^e*i|Ogns}4 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-ends-order.wos1 b/wai/vector-conformance/vectors/refusals/wos1-ends-order.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..3387d951d4e61f04e838981cb111a8a55006bcc1 GIT binary patch literal 554 zcmZurJx{|h6tt6+Ld1`F>}>^1EFF+okRpKug03NXrIuQ|vK>$*Muv|3v@ZM;rt*1q zic}Mj>kfF4&_(y~wAJgwp-5B$`J1IEY=8g|)WAOU0@StMG22%NY;d zLi-7ORrSl3f*woNf8fd+OYP4Q<}|iuMq^`V&9rp+R8_2@Je`-- zg!{*X!#uy9C`YF8Q>B?4dpJeu##(9eVZ-v=I0gH~U(W%Zd%`?gJG`aQHCt$y+7v26 QsN){puyx94LhK;_0YVvsd;kCd literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-flags.wos1 b/wai/vector-conformance/vectors/refusals/wos1-flags.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..98cc7a9cc5bd15902fa892e2e4979238a757b7f8 GIT binary patch literal 554 zcmZurJx{|h5Vez(mWUs5>}>^1EFF+okRpKug03OCQcG=8*$$`@BSS}iS{MEa6W{Ng zA{B|VY~QS6T8~>+9oh)z=sA>M0Hn z;8-N2PiM*LXK2>rXfvTpg__7CLpYfJ6t2s}+}J*P=+=glm4>C6;dVe({= z7gHV_4G+@vYHA$Sjh~r{$+3r07~M#lioA4KUewM&e)(5(NN1kF2Wf|0nyO@r8K%~S SGBI`Br)##()D^*YnEn7vafE^Z literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-format.wos1 b/wai/vector-conformance/vectors/refusals/wos1-format.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..3d30f21020a392c7ea40b6c39898b53ac95894ed GIT binary patch literal 554 zcmZvWJx{|h5Qfi5N+IG$9D7><6H5mq7NkfZfuL(huGCU%SGEJH#K_Q*pVozc!o>HT zQ&5pON6x+X@w~o1yEsUIV>^DZ*QW3+wSPi^f{g1mEMH#~K*EPtqb|6Sa(`22tUDY1 z4(oJ7Z?R^~Z|txVJ}`gP6WU0+9?#2a zLjA+Rex6@Wv`5>7sWyb30+ZtE8m$cmnQ%0>UNe62mpQ=GfZUI0&u?i=O^$a6TNf}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic};nk$vyoz4v^3ado7CYd8LI(6;a@+&`s2LB@Oy%k>)z6(k~!xZpv`%r?##cedso z#_1N`VI1?BliFh>{=ojLuK1JOtRFR#1#$`21HVRb(b7IdO*Nb}kNHE?1N}_4BkAv7nnXI)XFNIZ?t>oQc${7v) z!h{J0UG>Y{+s0KiyeC7h3{>OY0v}7=f1oN@hwbH&=QwtDhGXky&9wCSR99qJc{(qv z3H6T$hk1TI(H?CRrrHpC3hWf68*6Pa$cCf2^_uM$e?13y9+2nJ+Vfi)Q~dKSoD{e*gdg literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-glyph-zero.wos1 b/wai/vector-conformance/vectors/refusals/wos1-glyph-zero.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..a433cf0ddd6b3285195f8ab6ec5571df4965eeb6 GIT binary patch literal 554 zcmZuryH3ME5WKS;5-dJq>5~YkXi^~2AXx$l1Zj=EA(oPJbaw_tqNGU4r={UfsCdtw zgA^q8{MgyqnYo+u%R{YDz3{00wpA}O`=_+hD#5%|tG8DOBOFKr&OpTAdw7KxoS^S) z@g3lJ3-17je9WYFfy7@yzwU}(thzV}as-t^NiaUEw-D3LBur(=@2sznzg1sfysM`; zd;rH{A$vMYPCvu49!DF6E)`~Cj}G;$A3q|B_r9WF8telRx*(Iaw&bR2-G!ChTbX>$ zBeyhu%DyTFdFtxM7CgFR!#4L^((RHS@@jC;g|98OKS$tcV(U3gYCCUcxl3nN!3N5c zMP5vKa5Owf)2nIasBZkMGE9y=oPu;?T^aJSVR=!z3iivto}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic}=dk>hvo-g|d@ado7CYd3yy&_3Z+djFIH1sV5iSgzk#nDAj~#03*6^V>LM+}Ywg zjMFW=!#L)1Pil{m_yhZ|y5g5Ymruqyf@+~8n6KqJ#Ymj3H`434OgnJ-rJ&{y!0S=5dsQ|_8OC^4YZrGyHN@rJ@n{L>&1WKseZoM zRH)!=nCyFR=DoeWxH{4bwHrQl&|cN6aQ~E6S|#91wOqepF~Y%Wz!`)X`Zi90J6n1O zINriLz#$);)EoqK{FtR3Fcn364anA#M| RB-C+_ZrHl2HiXzg`U6Tggn|G7 literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-length.wos1 b/wai/vector-conformance/vectors/refusals/wos1-length.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..15202bc335c2aaaf2d0b29e9760eb9d78bda28db GIT binary patch literal 555 zcmZurJx{|h5IrX;g@_+<>}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic}=dk#q0fz4v^3ado7CYd3yy(6;a@vwuo~f{f=iEZ1)=O!%-g;)02k`E8sr?riZL z#_1N`VI1>$Cbh>%{DJ*fUGYny%O~R;LA6j4%-3=qW80a8Ly`T?dg|mGdg}5Wp3`_S z9EpYOsUkc3jLT}2Y!s>no{2qoTrcYBBf)h4D~YDjJ`%BuGFfX&UJ9!&Tgkh@lrtLo zg$WZ1y6Ts?w~ec4cu$608K}m)1wNL#|3Fo+4%?qc=5g%o49C{ZnrZ3tsjkSd@^oHS z6Y3ui4)gqaqCMIsOtm5O6xbowai{(27ZJRtMY+Vfi)Q~d`47yygo*$F literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-magic.wos1 b/wai/vector-conformance/vectors/refusals/wos1-magic.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..26b85c03ea57519d14197d5f1cf913dc01a496b1 GIT binary patch literal 554 zcmZurO-sW-5Zz5utHB>J-rJ&{y!0S=5ef>5^cs_?U1&FDccTB~3ul*S8i zEEck-N7>m&T-M{{N1-c)nb@O4J?qE!gwp-bB$`J1NW?D6WUVcEsakhoCGS?YnDfvt zZJ2T}WxvRM-MEs6cWl`efh)RQ(nDeT_gseBQTy`*o+hrI)1-FuW>)xoW=ghDo-T@V z%KhWPVV+-4ji-N2RKFPkF~KBWW({I_6GLLzn%j+4+K71d%UHw6+38{+7uc| QsOKKtu=A$2gxEp;4N6;tfdBvi literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-n-glyphs-cap.wos1 b/wai/vector-conformance/vectors/refusals/wos1-n-glyphs-cap.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..ecc4e6ea9078ac80dea2c7c207bd54197c0733ad GIT binary patch literal 554 zcmZurO-sW-5Zz5utHB>J-rJ&{y!0S=5dsQ|_8OC^4YZrGyHN@rJ@n{L>&1WKseZoM zRH)z#?CzU4@4dafxH{4bwX2jyAGA;PDzkq|b`s1>wOqeJ7@;8zI0F%b-^K}WXN&Iu z$6I&@IOJm{wFe~r3jV9E_{FM=PLLz06iR||EY~5nok_ULlHXZRpM0yHzI<2DaX0`+ zVj+7vOU^#SvK~bng)S9lVviTWW?pU49w+2&#n=V@}I;v~7E04n_9c>#37(=&8$hcur$t zI1&k&Q$=?68Hd#<*=(p9xF_;lalELfj|9{GuOx~_`AEbnuE|&%aw)93EG2h?DQ7hF z3lk<3bk#3&ZyQ(9@SY60GEj|o3w$hf|ADGt9kxG@%;VVE8IG-+HPh1PQ(cka&C_{V zO{jl7IL!0wiS}rlFx7_8Q(&dIx{=lfgG@M@Td!Gu@mF(z=K-0I(w=W=Oihk=2wN8{ R#MDy{Z^(IV4YKVZ{{c5agm?e| literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-notes-cap.wos1 b/wai/vector-conformance/vectors/refusals/wos1-notes-cap.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..6842c3fddb5ab5c97ef74a45f9e38392d1f048cd GIT binary patch literal 554 zcmZWjyH3ME5WKS;0u}|Iu=Gg;R5U4&Xpk&{1cJ22-jI_LJGwiAB2iML8p435{CyZ`_I literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-notes-utf8.wos1 b/wai/vector-conformance/vectors/refusals/wos1-notes-utf8.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..d3161b1107e058dfb19bdbc84cff465418d080d3 GIT binary patch literal 554 zcmZurJx{|h5IrX;g@_+<>}>^1EFF+okRpKug03OCQcJB}*$$`@BST026Mvu!|AeW0 z-Z>x@iF4%KyLazBU!PqZDB#+TAMCX)yvXdIQlKE?c@4|;D+?1oERDEeB4vIPXN)@= ze1~zmfwvgPe4a_|FcN=Y|5aD~Qt0x@I7d(|lmzp&T*ugUCgD(Izq6h?`huQ1e}l&~ zUJOTKA$zLGPCnwY8YMppRRhn&o;$85_3)lxy8D?#(`X-w*hQJFwIwfwRhO;g-C)WY z4gJD|2?bsC%iP<>RW!UML#_-|t@Zg^!Zd*WLSAT zFRKal4+r~semT(|Z4;*25PAyi6s14b+F+0kM|0~n+b{ll4)8P}^U>P#TN+c7V+~=O Tf`x>7>fseRudP9j9Xx*nNa}?- literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-notes-zero.wos1 b/wai/vector-conformance/vectors/refusals/wos1-notes-zero.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..54b6d1e78039cd3911ccc4c3952716b256226d32 GIT binary patch literal 554 zcmZurO-sW-5Zz5utHB>J-rJ&{y!0S=5ef>5_8OC^U1&FDccTR}V;;-Pp?uuWkx;Pnf1XV&wFs{`m#jyz_D1! zo*rdqA8}calOKhy6lP+N4)vm+-V;jqKa*%0?IRJpD3i6e z!Ib?X_jTh+9^SKMR|Kx;Zb^@Y=|6B8YDewQ6L^}qdQOwt&6`=_^O-5xLV3C<$|?7c z2ZwonJvE-{Cd`aw@*Ln4r9aljQjiVDi`pC5FaLTD=sXbkXzlTq##Zd0VQN!oB%z*r Nbi>Y@+7e<1`8SUlgR1}l literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-16383.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-16383.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..78e3cb43ba6bd3bc09dcb61041b1b2df05b227e5 GIT binary patch literal 82187 zcmX8Zb+qmYS%%@~z!1_QA>AP%AxJZHcMPcm4BZGQDc#-OT`H}B2+~T2(jkhV#4vOW zUiabMd)?o)f8SYa|8>@R*0;`K*SWz356m5R>-Be+{r&6Ldgc!J>Y4k|5&PYVkIp~Z z5yiVnwqqpOj+taTB*}KHB-^o*Y{yCBS0~y2Ajx*TB-`+gXxqXHBx5Ey;HFB-=TXZ0Ag}oh!+9?j+kEC)v)EWIJz??R-hL^C#K7f-TXBFT2iB-^EuY?n^5T_(wP*(BSc zNw&)+*)E@CyF!xfib=LBCE2c=WV=d|?W#$(t0md4o@Bd5lI@yFwreHXuAOANPLl1q zNw(`H*{+{tyFrrehDo*?CE0GAWIHU$c9SIAO_OXlOS0WO$##n*+bxr9f1YIfizM6O zNw!-h*>0U=yG@eqh$P!>lWez3vfVz(c84U}9g}Q#O0wNK$#$0{+g+1vcT2L}J;`>D zB-=fcZ1+mC{biEv-buFmB-!qpWc#Zm+g~Ty?w4e{f0FG1Nwx!E@JvPbqxFp--lWb2&vOO`$_M{}+lap*u zNwPgP$@a7)+tZV5&q%U8Gs*U>B-^u-Y|lxuJvYhryd>N6lWZ?Yvb`|L_M#-)i<4|G zNwU2($@a1&+sl(|uSl}JGRgL;B-^W#Y_CbOy*A1Ax+L4{lWcEDvb{0M_NFA;-zM4q zF3I-yNwzm9+1`?5dux*IZArGbC)wVSWP4|l?H`hC|CnTZSCZ}BNw)VS+5RcX_TD7h zKPTDVmt=c?lI>rTY#&IneK5)Pp(NXflWZSJvVAnk_OT?}zb4uKEy?!rB-J4v?xNwR%6$@aY@+y5rn{x8Y){UqBDl59Ur zVp%2Gj!d%sILUTYlIMTZ{dORU{g=f4OJe^evHz0T ze@X1WB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-T zUlRK-iT#(v{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8 zm&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2 zC9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$ zN$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw z68kTS{g=f4OX4qn68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$ zN$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw z68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^ z#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^e zvHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq z?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt z`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v z{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v z|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!8MHK?gtVJCMXr zN$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw z68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={vYjc3{g=f4OJe^evHz0Te@X1W zB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK- ziT#(v{!3#2C9(gK*ndgvza;iwlI_qW_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK- ziT#(v{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={ zV*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK z*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ z_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw68kTS z{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS z|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0T ze@X1WB=%nt`!9+8m&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-T zUlRK-iT#(v{!3#2C9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8 zm&E={V*e$v|B~2$N$kHQ_FoeFFNyt^#QsZS|0S{ilGuMq?7t-TUlRK-iT#(v{!3#2 zC9(gK*ndgvza;iw68kTS{g=f4OJe^evHz0Te@X1WB=%nt`!9+8m&E={V*e$v|B~2$ zN!&3>dEARl35V&`d(tt}N{bo%^1SGDoq++P^QFIg?#Yf3E>ooa`*#XG+9?NN#1pSwR z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`27Yy`Y2Kp}p{g;9M%fP)E=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`+U@GS%Vmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H!|;@W{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1M?FD{g;9M%Rv8Sp#L(^ ze;HVnf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvU>Ke<(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWiSlS8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1vNy8R)+Z z^j`-0F9ZFTf&R-t|7Bo(2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk1bQoPqw!K>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y(fF_@06O%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p^E11=uy2=v{>woBWuX5u(0>`|zYO$W26oCo|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmw|c3F0X0cWuX5u(0>`|zYO$W2Kp}p{g;9M%fOx)=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ6_U!U;j$H=&F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUj}y1K>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Ie)pe3EUKf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>#8Q8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9Hg`|zYO$W2Kp}p{g;9M%Rv8Sp#L&(Vg~vz1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zz`SAL|GydNzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!`#XQ2Nw(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8JJ%g=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%fM4) zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GB9r$=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8S;CV98e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6-VV#*ZhF5yF5Att&Bv?z)4Xi!)$wq@Ur!I` z*JU6>2CaTI^R9q9@hQse4G|5|F}OK zZ>Fnv*T3)gpKj)LJUwi;^D>R=wAtyh^uMj=W!$>sJl&tx+4hhB-}8F>u#K)?wq8BU f!}57LTQiM6P8mOT=sNv2{yCl3`Lv9Vz25%|NFbX! literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-16384.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-16384.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..b29f4e03656ce8a40134bbfe0cd3108a9be7c550 GIT binary patch literal 82192 zcmX8Zb+qmYS%%@~z#t%{fCxw_(%lUMNK41i3@~&_cPJ>Kgc6E`(%m5~E#2KnNH@cf z!*w6uwb%V!`?t?p`=7nne%80nVOPKQc@E4SXFK?M=>NZdsb}s$PY*rFA04ryPjvL9 z_(waU_-c~v7)iEcCfN>2vK=eQ_6JF}V<+*glWfOLvi)I_?RZJH<0sipkYqbylI=uE zwm(X;{c)1*#7VZ3B-u`yWc!mO+sTq_f0|@Fd6MlENw!la+5RlacB&-XsgrD{NwS?b z$#%LV+n*=d{vyeC`Xt+5CfUxAWIJP$?Mz9wGbh>3l4Lt;lI?6swzDVM&XHt0XOit) zNw#w*+0K(>J8zQhd`Y(RC)qBLWV>LJ?LtYm3n$qwl4QGRlI>ziwu>j(E|FxrWRmSt zN&Gk_*)E-AyG)YpvPrhTO0r!p$#(f9+ZB>*S4^^9Dam%_B->SzY=50(yK0i{YDu=M zC)uu%WV>dP?OI8;YbV*RlVrPYlI?m)w!@Na*H5zDAjx*aB-@RWY&TA_-6Y9&(0X>yG4@imPxiFl5Dq1vfVn#cAF&IZIf)bOS0WQ$##b%+Z~f^cS^F|ImvdH zB-`I4+3uQTyIYd&?n$rUZ2y*IdvcQP-;-=lNwPgP$@a7)+tZV5 z|B+<-&m`M3l5EdRvOO!w_Ut6vbCPV&O|m^N$@cst+Y6FxFHEw%D9QHXB-=}pY%fi+ zy)4Q0@+8|Ul5DR`vb`$F_Ua_tYm#iQO|t!0lI?X#w$~@w-jHN_W0LJnNwzm9+1`?5 z`|l*%Ta#>WOR~K^$@Y#U+dGqN?@F@0JIVGxNw)VS+1{IEdtZ|6{YkbDB-uWgWcyH( z?ZZj7k0jYXnq>P}lI`P3wofG4KAB|uRFdt}Nw&`<**=?O`&^Rk^GUWZB-y^0WcyN* z?aN8FuO!*Nnq>RmB-_`LY+p~ZeIv>C%_Q6ZCE31}WczlK?K?@f?*Ccfs{e|&6>6dNL*n_*-+=B=qNf$j*@TIY5W(n1CZ}MmeVW= z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1vNy80fzY^j`-0F9ZFTfqOI1e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYK=qTL$_s1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vkx;VA?Cmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H<|PCDmx2DvK>uZ+ z|1!{j8CaEp{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R;27@jiFe;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8SFbvNb=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GB7_e z(0>`|zYO$W2Kp}p{g;9M%fR{!^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%42I!31O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk1bQZwC4=1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vli&+PKTzFh|TF9ZFTf&R-t|7D>6GSGh+*eL`3mx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2IdvJyry}Vf&R-t|7D>6GSGh+=)Vl~Uk3Uw1AAtm|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;8+v&+Xhb{Xiu4D??H`Y!|hmx2DvK>uZ+ z|1!{j8Q47o{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+nAhy`Nw!@E`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9YXfp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk2t4yL^au zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7GCB4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ z{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+ z|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`| zzYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0 zF9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M z%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ`GtZ1|7M{7GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYLt6f&R-t|7D>6 zGSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me% z4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8SV18ww|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw z15c5G{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2Dv zK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2Dv!2HHQ|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u z(0>`|zYO$W2Kp}p&y#`v%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p z{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t z|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^ ze;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~ zUk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|h zmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woB zWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j z8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W z2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFT zf&R-t|7D>6GSGh+=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8S zp#L(^e;Me%4D??H`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZFTf&R-t|7D>6GSGh+ z=)Vl~Uk3Uw1O1nQ{>woBWuX5u(0>`|zYO$W2Kp}p{g;9M%Rv8Sp#L(^e;Me%4D??H z`Y!|hmx2DvK>uZ+|1!{j8R)+Z^j`-0F9ZD-%yPJ!-mQdSQ8PUrFa&pNt3embA-#!sj7-NWr+-QUi~X|eMC z{o!~sUHx(W`+on|&Ag7MhwXM=rg5D%J6)FkzxBL~TX&qN`_nqx{_)2>ug4GD==x>r h)w4V-AE&c5)A;?A@y`xjr?=zZ(|Mgw%jnqa{eSbInLhvk literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-cap.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-cap.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..910096beceb8eb1b12d2fc7c54c48cb249b07341 GIT binary patch literal 554 zcmZurO-sW-5Zz5utHB>JKcFq@$xA`Oix5yywAYwS?LwQB-HlT4=%Gh{S}*<+PxbT7 zra}d0!)D%lGwtxlv>ufqLP8WRclQZ3hSSd4IFUT_8>hQ5sx;Leub z0gkuu4sgf^C$$G8{tAApuK2~Oi<2NnP$`lG<65pmY|BZw%93BMr;oo?PhY;P=Qvz| zBe9S4B7k@nmbnXdyuy%M$Qw}x+265(jSWPgrEQb literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-limit-before-gid-order.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-limit-before-gid-order.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..67e67cbec9f1f48612cb8c149b1b31cc6c419359 GIT binary patch literal 554 zcmZurO-sW-5S>j@tHB>J-rJ&{yc86?2mu8}dyUD|F0{L4ccTw<@%LN1&ORiUSt3%E1NuH-r4AP zn5P?ji+RjvO|Zj^Z5Ye-sw;jebot9TM_4T_3Fc$Dj72{bwz9*ROekRd0+Q&w$;+l-Lke9-$%U1GkFy)Mf zeqq9dg0A{y?rq~L8s3p1R|cx_c7YG2?%z`tti$&5$bB3;JHxScvu0ZQe5xxlym>M& zs|ocF2m5(`HPIez6Q`Q SEF{!Z53k92Z4GklApZutuY|h* literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-limit-before-zero.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-limit-before-zero.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..e9fcb84a2ff6e4d3658b1d15ff67c38836967f8d GIT binary patch literal 554 zcmZurO-sW-5S>j@tHB>J-rJ&{yc86?2mu8}dyUD|F0{L4ccT>k3_EeFbe#T`rO4bTh1JA^sJFaK-_>o|``;|n~Xdj8#MVYL%B`<}SE?ddF!IU!^ z`h^J-3cBi-xwnn0Xn044Tp6gw+XX(9x_?hqunyawN9J+t>YN9>bCQP*<^c2`BO4rufV2}+*bL%zRFaCNC@GKzn(c1G{8dH;F4Pl#t Rg@k(Q;Wat0twD|*j@tHB>J-rJ&{yc86?2mu8}dyUD|F0{L4ccTxp$35O#4o%Phw7xdJ{8$6}) zVmJ~D*;7S!`Vp7aDEU#S8h9r5+;Kgt$M*!&-OnVNM*B#_F3M!BEqN)dx@;xy22;*x z=ocnTDCnwR=H520qTwAGa%G?zZx{Gb>i#`d!8&Yz9+}6nvojo9H*2P)&!@T~!^)F+ zSxu;aIM~ngtBLk#n=sXe&{JTiDE+b427_!knp>~ge(~3HfM)@jkJg^w(wLeYYY5vE SEF{!Z53k92Z4GklApZuvnS{Im literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-no-contour.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-no-contour.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..01dd8cac2fed4a6773cdc3dbf1cc58029c1a98f9 GIT binary patch literal 554 zcmZvWJx{|h5Qgm}r4aEWj=imbiKPP)3sNMIK+rWLS8A!XE8788Vr1yZPwT=zVdDGl zQlwVm96NsR<9U61ado5>#jbqnpuMVB&ixbIo6)Y-^8JlOLW@R47gR`<-qIQA&PKgM zI^EDaq{W|d9DAgguZX|uGA~tKS{eDUs=36*bS&S+w#~7*Dzd*^PoMm#p1%B0?F zM~vV;U1Vop(yT|xdP3KVa*U@N#fyIWOd#F=P6R4=DacL6xUCI-sakaj#qU;Rlm%GYkY;nd$j1wh&9|T;ITCQ2dtv=(Eb8Y9md|xVC?*?nU*1+nhGsVp3ci^ zg8k#cVV+-4OaRx!sj&zFBaviujW!k{cX*t;UjDLv P2JFEN`e2*|vK{2VMmdCk literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-set-a.wos1 b/wai/vector-conformance/vectors/refusals/wos1-set-a.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..4881114df32fb60f289fe4127cdb8aa2462f16ab GIT binary patch literal 554 zcmZurJx{|h5IrX;g@_+<>}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic}=dk#q0fz4v^3ado7CYd3yy(6;a@vwuo~f{f=iEZ1)=O!%-g;)02k`E8sr?riZL z#_1N`VI1>$Cbh>%{DJ*fUGYny%O~R;LA6j4%-3=qW80a8Ly`T?dg|mGdg}5Wp3`_S z9EpYOsUkc3jLT}2Y!s>no{2qoTrcYBBf)h4D~YDjJ`%BuGFfX&UJ9!&Tgkh@lrtLo zg$WZ1y6Ts?w~ec4cu$608K}m)1wNL#|3Fo+4%?qc=5g%o49C{ZnrZ3tsjkSd@^oHS z6Y3ui4)gqaqCMIsOtm5O6xbowai{(27ZJRtMY+Vfi)Q~dKS(izfB*mh literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-short.wos1 b/wai/vector-conformance/vectors/refusals/wos1-short.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..704baa127584d0d9d4d4b4aee0fa8c2020ad7fe0 GIT binary patch literal 31 acmWId4>n|E00Is$Vo-!I8LooF7#IL7DgrtH literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-sums.wos1 b/wai/vector-conformance/vectors/refusals/wos1-sums.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..b2540b633c3d6098ac8a3f72e59a8e1f7ed070cf GIT binary patch literal 554 zcmZury-ve05I!dp3^`f3W5={5Ml4u(3<05uZCbYKXrLgLE=DJ&v87;n=!aGcA2S)fE|5p3ci^ zLjB{xVV+-4v`5>7sWyb30y{bWLD!JD^rZGu-CaPH7#TY9)4K3an9Aq# zr9+YMMUJ2C_nz-AuaC7t?8Z+Ww558J-anz0RvG%0TCU$gOz=RBc!)uY`8LjgJ6rP( zaJq$efTKTp5_>?Rub{u`ie9R^co}>IRWcG|q~$u5Guob*t6>%)(xE>6LAv@-FKJAG zBax6jJ z*f8N>%3hKCx^X2B9@w%g0#|gupr^w09=Qy)qxRMAb5eV}r?Qu(ED|X;8wJtOi QQ_qKV%g&qH5^VeVFHCiWg8%>k literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-zero-before-points-limit.wos1 b/wai/vector-conformance/vectors/refusals/wos1-zero-before-points-limit.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..7bad63c50fc94484cde0570e696bc4124e5df5e3 GIT binary patch literal 554 zcmY+8Jx{|h5Qfi5N+IG$9D7;;6H6tKSdb!t1cI(1xl&85Q`ruv5+g%Lep(m)2~+vJ za|)Dm%L4@*+u?(~HiZ|d{YIDwN&)A`02M4&ubf7Fcs1xe0f@Q3sT09#y(HCUu;tihS zaIqW;LgrMSoPLC1HH_99ssgSFo->YT_4poPy!#miXuyX?$ikY8wIMHsWtUO%ZZO4^ z25xTrn7l4~Me6FtmNd8{L$>f#;q4qB3f;S>($^N-pF{5B$ktOF)ppuU3YSiFNrpF1 zW<@!s-eG?~O|QnJKcFq@$xA`Oix5yywAYwSZJ^zh-HlT4=%Gh{S}*<+PxbT7 zrb5M8nB6yT-g|p{adoH_YFC<4TAhUFYYYE%jg17;QZ3hS5Jos66`X;H!EfUPxUc$p4yl2BU_gvE5f*$j#|GEwz^;@HDpdjK;N{HPhUs)2d(t<>@>x zCfq+79Hi;>q;ga@ep(qO#~w~Wy0NYddD*Z$uU!TE#b3_>oqGZwtR4Q+n363tOl=Bf R66&}|H*8&18$#?L{Q-IbgqQ#T literal 0 HcmV?d00001 diff --git a/wai/vector-conformance/vectors/refusals/wos1-zero.wos1 b/wai/vector-conformance/vectors/refusals/wos1-zero.wos1 new file mode 100644 index 0000000000000000000000000000000000000000..2f339ca35de78d69642756218d1156d2e526611d GIT binary patch literal 554 zcmY*TJx{|h5Vez(Ld1_a_O=2hmJUcPNRdDSLD!I6sioGgYzI_{k)b0$tqcEziSK8p zNa1YR_wL=jcefW;M^Yem;}r*ODqiu&df+-CQO$sBv3`F;LxO|Rhzk%Y_%6vUHc>TMWcKqViw0jTN`0hvFSr9>@9S;;IUh2 zKVz?|VVOJA*ow#Ztl5^HYr0#}W2uG@TzO-u{TzX(sWl6l8oOxbrOW54VvWhuWm(O5 zcsx4H^Xr*%WEwwLn#r+;QXJh%D@{IhSY8^ZAiw&rIihn<;G?v|E{(3)Vuq=8p(2<% O9?%V2r;H}pj`CkhKZJn* literal 0 HcmV?d00001 diff --git a/wai/wai-vector/Cargo.lock b/wai/wai-vector/Cargo.lock new file mode 100644 index 000000000..6261d0d07 --- /dev/null +++ b/wai/wai-vector/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "wai-vector" +version = "0.1.0" diff --git a/wai/wai-vector/Cargo.toml b/wai/wai-vector/Cargo.toml new file mode 100644 index 000000000..f13cc994d --- /dev/null +++ b/wai/wai-vector/Cargo.toml @@ -0,0 +1,40 @@ +# The reference implementation of `wai.graphics.vector` +# (`extensions/graphics-vector.md`): the `WOS1` and `WVG1` formats with their +# refusal order (§2), the arithmetic of §3, and the conformance vectors of +# `../vector-conformance/`. +# +# `no_std` with `alloc`, and no dependencies, so that a model checker can include +# its sources by `#[path]` the way `wai-verify` includes the other integer sources. +# SHA-256 is `wai-ops`'s, included by `#[path]` (`src/sha256.rs`), so the tree has +# one. +[package] +name = "wai-vector" +version = "0.1.0" +edition = "2024" +rust-version = "1.97" +license = "Apache-2.0" +publish = false +description = "WAI vector graphics wai.graphics.vector: WOS1 and WVG1, the refusal order, the integer raster and conformance vectors" + +[lib] +name = "wai_vector" +path = "src/lib.rs" + +# The vector tool. It reads and writes files, so it is `std`; the library it drives +# is not. +[[bin]] +name = "wai-vector" +path = "src/bin/wai-vector.rs" +required-features = ["std"] + +[features] +std = [] + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ["cfg(kani)"] } + +[dependencies] +# none + +[profile.release] +debug = false diff --git a/wai/wai-vector/fuzz/seeds/every-table.wvg1 b/wai/wai-vector/fuzz/seeds/every-table.wvg1 new file mode 100644 index 0000000000000000000000000000000000000000..473f5d14d87d8f06a81f91099449c8d0b3811743 GIT binary patch literal 2339 zcmbVNU1%It6h1SvyJ@xoZBwg760i8s(kAJehqg*uw^b>{H5D40y!f--ohH+4X2Z^G zOK1y;RJ)*}MZq8X5EQ|ODg^}#Dg;ppXd#F{^g*AF87|F z`lpU)n_|9>ysEbqHvOt{X;9XZGAQq+#)CIb^0IwSzFgE#Icuk>pkRXoqYBg z+AT`*(ElnMZwDV{W6UqWa)hZNR%tF^1FTG1k9ZoAWWk@S9VaJ6O|>ta_rKO}`)MvnGynDLago459j22a-}hj?!K@3tY<`~RoVYOm zc)m;5pS=xqy<`;0ZZtY8%id#j)|%aIbk>o5%;>CwvAi3^Pi`|hF}%R^>;B-AMP2is zL<}bJ>NBHjPWXtSe)^pSofykA{gk8c9%HReyw!Cs*p!PWb6X$dtrymaN8pz%6huu4O?5XbSj)S=5AISgs!D|=Zdg(xZ ze(LG@CtjGJdbt`Fx9_;u4+qPY;#j^iI=Fj}{^R3!j(7idOvSmYP*&9#t^A6R~3c~TE?7)*?%c16<| zACpTiVSQcBmOB0cANpO6d3u34L<-`ZT;jf~8te?YjR>bG@R1%G#`DgRKV0Rt{po5_ zO|Lh!ro#v`gO$o$3#eGPg!wUlYcvtYBYqqdy7TF%T&)!Rt;2rkSMsr6RQo2>p?uJN z&@aU0iZUWn*jM{2}J6#Nj8+sE^T5x={)CzDPOj0BM?SL0F;`YQ5c zFzL_+br7nUh>Aa6jsnn6T+7*`cEt+&nmR%)cqRM_Vti$?s2r0}>^1EFF+okRpKug03OCQcJB}*$$`@BSS}iS{MEaQ~A7e zic}=dk#q0fz4v^3ado7CYd3yy(6;a@vwuo~f{f=iEZ1)=O!%-g;)02k`E8sr?riZL z#_1N`VI1>$Cbh>%{DJ*fUGYny%O~R;LA6j4%-3=qW80a8Ly`T?dg|mGdg}5Wp3`_S z9EpYOsUkc3jLT}2Y!s>no{2qoTrcYBBf)h4D~YDjJ`%BuGFfX&UJ9!&Tgkh@lrtLo zg$WZ1y6Ts?w~ec4cu$608K}m)1wNL#|3Fo+4%?qc=5g%o49C{ZnrZ3tsjkSd@^oHS z6Y3ui4)gqaqCMIsOtm5O6xbowai{(27ZJRtMY+Vfi)Q~dKS(izfB*mh literal 0 HcmV?d00001 diff --git a/wai/wai-vector/src/arith.rs b/wai/wai-vector/src/arith.rs new file mode 100644 index 000000000..062ad1498 --- /dev/null +++ b/wai/wai-vector/src/arith.rs @@ -0,0 +1,122 @@ +//! The integer functions of §3.0, §3.8, §3.9 and §2.9: floor and ceiling division, +//! `R_rat`, `R_half_up`, `div255`, the two coverage quantisers and the straight-alpha +//! channel. +//! +//! Every function is total on the domain its section states, and forms no value +//! wider than the width the bounds table (§3.12) gives it. + +use crate::bounds::FULL; + +/// `⌊a/b⌋` for `b > 0`. +#[inline] +pub fn floor_div(a: i64, b: i64) -> i64 { + debug_assert!(b > 0); + a.div_euclid(b) +} + +/// `⌈a/b⌉ = −⌊−a/b⌋` for `b > 0`. +#[inline] +pub fn ceil_div(a: i64, b: i64) -> i64 { + -floor_div(-a, b) +} + +/// `a mod b`, in `[0, b)`, for `b > 0`. +#[inline] +pub fn modulo(a: i64, b: i64) -> i64 { + debug_assert!(b > 0); + a.rem_euclid(b) +} + +/// `R_rat(n, d) = ⌊(2n + d)/(2d)⌋` for `d > 0`: `n/d` rounded half up, a tie toward +/// +∞ (§3.0). Formed as `q + (2r ≥ d ? 1 : 0)` with `q = ⌊n/d⌋`, `r = n − q·d`, so no +/// value wider than `n` is formed. +#[inline] +pub fn r_rat(n: i64, d: i64) -> i64 { + let q = floor_div(n, d); + let r = n - q * d; + q + i64::from(2 * r >= d) +} + +/// `R_half_up(p, s) = ⌊(p + 2^(s−1))/2^s⌋` for `s ≥ 1`, and `p` for `s = 0` +/// ([integer-operators] §2). +#[inline] +pub fn r_half_up(p: i64, s: u32) -> i64 { + if s == 0 { p } else { (p + (1i64 << (s - 1))) >> s } +} + +/// `div255(x) = ⌊257·(x + 128)/2^16⌋` for `x ∈ [0, 65025]` (§3.9): `rescale` with an +/// `rq` pre-bias of 128, multiplier 257, shift 16 and `floor`. +#[inline] +pub fn div255(x: u32) -> u32 { + debug_assert!(x <= 65_025); + (257 * (x + 128)) >> 16 +} + +/// The non-zero quantiser (§3.8): `R_half_up(255·min(|v|, 2^17), 17)`. +#[inline] +pub fn alpha_nonzero(v: i32) -> u8 { + let a = v.unsigned_abs().min(FULL as u32); + ((255 * a + (1 << 16)) >> 17) as u8 +} + +/// The even-odd quantiser (§3.8): `m = v mod 2^18`, `m′ = min(m, 2^18 − m)`, then +/// `R_half_up(255·m′, 17)`. +#[inline] +pub fn alpha_evenodd(v: i32) -> u8 { + let m = v.rem_euclid(1 << 18) as u32; + let m2 = m.min((1 << 18) - m); + ((255 * m2 + (1 << 16)) >> 17) as u8 +} + +/// The run's coverage from its sum `S` (§3.8): `R_half_up(255·min(S, 2^17), 17)`. +#[inline] +pub fn alpha_sum(s: u32) -> u8 { + let a = s.min(FULL as u32); + ((255 * a + (1 << 16)) >> 17) as u8 +} + +/// One colour channel of `RGBA8S` (§2.9): `R_rat(255·c, A)` for `A ≥ 1`, and 0 where +/// `A = 0`. Its numerator is at most 255·255 + 127. +#[inline] +pub fn unpremul(c: u8, a: u8) -> u8 { + if a == 0 { + return 0; + } + let (c, a) = (u32::from(c), u32::from(a)); + ((255 * c + a / 2) / a) as u8 +} + +/// The greatest common divisor, for `RATE`'s rule (§2.3). +pub fn gcd(mut a: u64, mut b: u64) -> u64 { + while b != 0 { + let t = a % b; + a = b; + b = t; + } + a +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn floor_and_ceiling() { + for a in -50i64..=50 { + for b in 1i64..=9 { + let q = floor_div(a, b); + assert!(q * b <= a && a < (q + 1) * b); + let c = ceil_div(a, b); + assert!((c - 1) * b < a && a <= c * b); + assert_eq!(modulo(a, b), a - b * q); + } + } + } + + #[test] + fn half_up_at_zero_shift_is_identity() { + for p in -9i64..=9 { + assert_eq!(r_half_up(p, 0), p); + } + } +} diff --git a/wai/wai-vector/src/bin/wai-vector.rs b/wai/wai-vector/src/bin/wai-vector.rs new file mode 100644 index 000000000..0e1794379 --- /dev/null +++ b/wai/wai-vector/src/bin/wai-vector.rs @@ -0,0 +1,178 @@ +//! `wai-vector`: the vector tool of `wai.graphics.vector`. +//! +//! ```text +//! wai-vector check [--sets ] load (§2.7): the first refusal, or "accepted" +//! wai-vector cost [--sets ] each listed size's per-frame cost (§3.4(b)) +//! wai-vector pack the authoring form (§2.12) to bytes +//! wai-vector unpack bytes to the authoring form +//! wai-vector vectors gen write vector-conformance/ and the fuzz seeds +//! wai-vector vectors verify regenerate and recompute every file; require the committed bytes +//! ``` +//! +//! `--sets` names a directory whose `*.wos1` files a held set is found among, by +//! SHA-256. + +use std::collections::BTreeSet; +use std::path::{Path, PathBuf}; +use std::process::ExitCode; + +use wai_vector::vectors::{self, CORPUS, SEEDS}; +use wai_vector::{SetStore, form, place, wvg1}; + +fn die(msg: &str) -> ExitCode { + eprintln!("wai-vector: {msg}"); + ExitCode::from(2) +} + +fn read(p: &Path) -> Result, String> { + std::fs::read(p).map_err(|e| format!("{}: {e}", p.display())) +} + +fn store_from(dir: Option<&Path>) -> Result { + let mut s = SetStore::new(); + if let Some(dir) = dir { + let mut names: Vec = std::fs::read_dir(dir) + .map_err(|e| format!("{}: {e}", dir.display()))? + .flatten() + .map(|e| e.path()) + .filter(|p| p.extension().is_some_and(|x| x == "wos1")) + .collect(); + names.sort(); + for n in names { + s.add(read(&n)?); + } + } + Ok(s) +} + +fn sets_arg(args: &[String]) -> Option { + args.iter().position(|a| a == "--sets").and_then(|i| args.get(i + 1)).map(PathBuf::from) +} + +/// Every file under `dir`, relative to `base`, sorted. +fn walk(base: &Path, dir: &Path, out: &mut BTreeSet) { + let Ok(rd) = std::fs::read_dir(dir) else { return }; + for e in rd.flatten() { + let p = e.path(); + if p.is_dir() { + walk(base, &p, out); + } else if let Ok(rel) = p.strip_prefix(base) { + out.insert(rel.to_string_lossy().replace('\\', "/")); + } + } +} + +fn verify(wai: &Path) -> Result<(), String> { + let corpus = wai.join(CORPUS); + let generated = vectors::generate()?; + let mut bad = 0usize; + // 1. The generator reproduces every committed file, and nothing else is committed + // under the generated directories. + let mut want: BTreeSet = BTreeSet::new(); + for (rel, bytes) in &generated { + want.insert(rel.clone()); + match std::fs::read(wai.join(rel)) { + Ok(have) if have == *bytes => {} + Ok(_) => { + bad += 1; + eprintln!("DIFF {rel}: the generator writes other bytes"); + } + Err(_) => { + bad += 1; + eprintln!("MISSING {rel}"); + } + } + } + let mut have: BTreeSet = BTreeSet::new(); + for sub in ["sets", "vectors", "expected"] { + walk(wai, &corpus.join(sub), &mut have); + } + walk(wai, &wai.join(SEEDS), &mut have); + for extra in have.difference(&want) { + bad += 1; + eprintln!("EXTRA {extra}: committed, but the generator does not write it"); + } + // 2. Every expected file recomputed from the committed vector and sets alone. + let mut store = store_from(Some(&corpus.join("sets")))?; + let mut n = 0usize; + let mut groups: BTreeSet = BTreeSet::new(); + walk(&corpus.join("vectors"), &corpus.join("vectors"), &mut groups); + for rel in &groups { + let Some((group, file)) = rel.split_once('/') else { continue }; + let Some((name, ext)) = file.rsplit_once('.') else { continue }; + if name == "index" || (ext == "json" && group != "arith") { + continue; + } + let bytes = read(&corpus.join("vectors").join(rel))?; + let got = vectors::recompute(group, ext, &bytes, &mut store)?; + let exp = read(&corpus.join("expected").join(group).join(format!("{name}.json")))?; + n += 1; + if got.as_bytes() != exp { + bad += 1; + eprintln!("FAIL {rel}: recomputed\n {}", got.trim_end()); + } + if ext == "wvg1" { + let form = read(&corpus.join("vectors").join(group).join(format!("{name}.json")))?; + if vectors::form_of(&bytes).as_bytes() != form { + bad += 1; + eprintln!("FORM {rel}: the authoring form beside it differs"); + } + if form::to_bytes(std::str::from_utf8(&form).unwrap_or("")).as_deref() != Ok(&bytes[..]) { + bad += 1; + eprintln!("PACK {rel}: the authoring form does not pack to the payload"); + } + } + } + println!("recomputed {n} vectors, checked {} generated files", generated.len()); + if bad > 0 { + return Err(format!("{bad} failures")); + } + println!("vector-conformance: every vector verifies"); + Ok(()) +} + +fn main() -> ExitCode { + let args: Vec = std::env::args().skip(1).collect(); + let a: Vec<&str> = args.iter().map(String::as_str).collect(); + let r: Result<(), String> = match a.as_slice() { + ["check", p, ..] => (|| { + let mut st = store_from(sets_arg(&args).as_deref())?; + match wvg1::load(&read(Path::new(p))?, &mut st) { + Ok(l) => println!("accepted; costs {:?}", l.costs), + Err(e) => println!("{} (step {}: {}, at {})", e.code.name(), e.step, e.rule, e.index), + } + Ok(()) + })(), + ["cost", p, ..] => (|| { + let bytes = read(Path::new(p))?; + let mut st = store_from(sets_arg(&args).as_deref())?; + let d = wvg1::parse(&bytes).map_err(|e| e.code.name().to_string())?; + let sets = wvg1::load_sets(&d, &mut st).map_err(|e| e.code.name().to_string())?; + for (s, c) in d.sizes.iter().zip(place::costs(&d, &sets)) { + println!("{}x{} cost {c} stated {}", s.w, s.h, s.cost); + } + Ok(()) + })(), + ["pack", src, dst] => (|| { + let text = String::from_utf8(read(Path::new(src))?).map_err(|_| String::from("not UTF-8"))?; + std::fs::write(dst, form::to_bytes(&text)?).map_err(|e| e.to_string()) + })(), + ["unpack", src, dst] => (|| std::fs::write(dst, vectors::form_of(&read(Path::new(src))?)).map_err(|e| e.to_string()))(), + ["vectors", "gen", wai] => (|| { + for (rel, bytes) in vectors::generate()? { + let p = Path::new(wai).join(&rel); + if let Some(parent) = p.parent() { + std::fs::create_dir_all(parent).map_err(|e| e.to_string())?; + } + std::fs::write(&p, bytes).map_err(|e| format!("{}: {e}", p.display()))?; + } + Ok(()) + })(), + ["vectors", "verify", wai] => verify(Path::new(wai)), + _ => return die("usage: check|cost [--sets dir] | pack
| unpack | vectors gen|verify "), + }; + match r { + Ok(()) => ExitCode::SUCCESS, + Err(e) => die(&e), + } +} diff --git a/wai/wai-vector/src/bounds.rs b/wai/wai-vector/src/bounds.rs new file mode 100644 index 000000000..d0e5aaf15 --- /dev/null +++ b/wai/wai-vector/src/bounds.rs @@ -0,0 +1,105 @@ +//! Every cap of §2.6 and every bound of §3.12 that this crate relies on, as constants, +//! with the arithmetic that makes them consistent checked at compile time. + +// ---------------------------------------------------------------- WOS1 (§2.1) +pub const WOS1_HEADER: usize = 32; +pub const WOS1_GLYPH: usize = 16; +pub const WOS1_GLYPHS_MAX: u64 = 65_536; +pub const WOS1_POINTS_TOTAL_MAX: u64 = 1 << 22; +pub const WOS1_CONTOURS_TOTAL_MAX: u64 = 1 << 22; +pub const WOS1_NOTES_MAX: u64 = 1 << 20; + +/// Points per glyph and per path: the no-wrap cap (§3.7). +pub const POINTS_MAX: u64 = 16_383; + +/// The largest `WOS1` the header caps allow: 31,457,312 bytes, below 2^25. +pub const WOS1_LARGEST: u64 = WOS1_HEADER as u64 + + WOS1_GLYPH as u64 * WOS1_GLYPHS_MAX + + 2 * WOS1_CONTOURS_TOTAL_MAX + + 5 * WOS1_POINTS_TOTAL_MAX + + WOS1_NOTES_MAX; +const _: () = assert!(WOS1_LARGEST == 31_457_312 && WOS1_LARGEST < (1 << 25)); + +// ---------------------------------------------------------------- WVG1 (§2.2, §2.3) +pub const WVG1_HEADER: usize = 80; +pub const PAYLOAD_MAX: u64 = 1 << 26; + +pub const SIZES_MAX: u64 = 8; +pub const RATES_MAX: u64 = 4; +pub const SETS_MAX: u64 = 64; +pub const TABLES_MAX: u64 = 32; +pub const PAINTS_MAX: u64 = 4096; +pub const PATHS_MAX: u64 = 4096; +pub const ITEMS_MAX: u64 = 65_536; +pub const KEYS_MAX: u64 = 1 << 22; +pub const GLYPHS_MAX: u64 = 1 << 20; +pub const CLUSTERS_MAX: u64 = 1 << 20; +pub const PATH_CONTOURS_MAX: u64 = 1 << 20; +pub const PATH_POINTS_MAX: u64 = 1 << 22; +pub const STRINGS_MAX: u64 = 1 << 22; +pub const INLINE_MAX: u64 = 1 << 25; +pub const HELD_MAX: u64 = 1 << 26; +/// `inline_len + held_len`. +pub const SETS_BYTES_MAX: u64 = 1 << 26; + +/// Record sizes, in the order of the exact-length formula. +pub const REC_SIZE: u64 = 8; +pub const REC_RATE: u64 = 8; +pub const REC_SET: u64 = 40; +pub const REC_TABLE: u64 = 68; +pub const REC_PAINT: u64 = 4; +pub const REC_TRACK: u64 = 8; +pub const REC_KEY: u64 = 12; +pub const REC_PATH: u64 = 16; +pub const REC_PATH_END: u64 = 2; +pub const REC_PATH_POINT: u64 = 5; +pub const REC_TEXT: u64 = 20; +pub const REC_ITEM: u64 = 48; +pub const REC_GLYPH: u64 = 12; +pub const REC_CLUSTER: u64 = 12; + +pub const TB_MAX: u32 = 1 << 20; +pub const TICK_LIMIT: u64 = 1 << 31; +pub const SIDE_MIN: u32 = 16; +pub const SIDE_MAX: u32 = 4096; +pub const RATE_TERM_MAX: u32 = 1 << 20; +pub const RATE_MAX_FPS: u64 = 240; +pub const SET_LEN_MIN: u32 = 32; +pub const SET_LEN_MAX: u32 = 1 << 25; +pub const Q16_ONE: u32 = 65_536; +pub const TRACK_KEYS_MAX: u32 = 4096; +pub const RUN_GLYPHS_MAX: u16 = 4096; +pub const RUN_CLUSTERS_MAX: u16 = 8192; +pub const UNIT_SCALE_MAX: u32 = 1 << 24; +pub const GLYPH_POS_LIMIT: i32 = 1 << 23; +pub const TRANSLATION_MAX: i32 = 1 << 22; +pub const MATRIX_MAX: i32 = 1 << 20; +pub const OPACITY_MAX: i32 = 255; +pub const LANG_MAX: u8 = 63; +pub const STR_MAX: u32 = 4096; +pub const GROUP_DEPTH_MAX: u32 = 4; +pub const NONE: u16 = 0xFFFF; +pub const DECORATIVE: u8 = 13; + +// ---------------------------------------------------------------- arithmetic (§3) +/// Every device coordinate after the interval check (§3.4(a)). +pub const DEVICE_MIN: i64 = -(1 << 22); +pub const DEVICE_MAX: i64 = (1 << 22) - 1; +/// The per-frame cost ceiling (§3.4(b)). +pub const COST_CEILING: u64 = (1 << 32) - 1; +/// A full pixel's value `v`: 512 · 256. +pub const FULL: i32 = 1 << 17; +/// The row density bound `D_r ≤ 256·p ≤ 2^22 − 256` (§3.7). +pub const DENSITY_MAX: i64 = 256 * POINTS_MAX as i64; + +const _: () = assert!(DENSITY_MAX == (1 << 22) - 256); +const _: () = assert!(512 * DENSITY_MAX == (1 << 31) - (1 << 17)); +// The run sum S of 4,096 terms each at most 2^17 fits u32 and i32. +const _: () = assert!((RUN_GLYPHS_MAX as u64) << 17 <= 1 << 29); +// div255's largest intermediate 257·(65025 + 128) is below 2^24. +const _: () = assert!(257 * (65_025 + 128) < 1 << 24); +// The exact length at the caps, the inline and held bytes aside, fits u64 trivially; +// the cap on it is PAYLOAD_MAX. +const _: () = assert!(REC_ITEM * ITEMS_MAX + REC_KEY * KEYS_MAX < 1 << 40); +// A fill's cost p·(2^10 + bw + bh) + bw·bh is below 2^28 (§3.4(b)). +const _: () = assert!(POINTS_MAX * (1024 + 2 * SIDE_MAX as u64) + (SIDE_MAX as u64) * (SIDE_MAX as u64) < 1 << 28); diff --git a/wai/wai-vector/src/clock.rs b/wai/wai-vector/src/clock.rs new file mode 100644 index 000000000..ac264eea0 --- /dev/null +++ b/wai/wai-vector/src/clock.rs @@ -0,0 +1,38 @@ +//! The clock (§3.1) and the frame range (§2.7, *Render*). +//! +//! A frame `g` is in range at a rate with `P` ticks per frame when +//! `⌈t0/P⌉ ≤ g ≤ ⌊(t0 + dur − 1)/P⌋`. The range is decided by those divisions and +//! never by forming `g·P` for an unchecked `g`: `P` reaches 2^40, so the product of an +//! arbitrary request and `P` does not fit 64 bits. + +use crate::arith::{ceil_div, floor_div}; + +/// The first and last frame of the document at `P` ticks per frame. The range is +/// empty when the first exceeds the last. +pub fn frame_range(t0: u32, dur: u32, p: u64) -> (i64, i64) { + debug_assert!(p >= 1 && p <= 1 << 40); + let p = p as i64; + let first = ceil_div(i64::from(t0), p); + let last = floor_div(i64::from(t0) + i64::from(dur) - 1, p); + (first, last) +} + +/// Whether frame `g` is in the document at `P` ticks per frame. +pub fn in_range(g: u64, t0: u32, dur: u32, p: u64) -> bool { + let (first, last) = frame_range(t0, dur, p); + // `first` and `last` lie in [0, 2^31), so the comparisons are exact for any `g`. + first <= last && (first as u64) <= g && g <= last as u64 +} + +/// The tick of a frame in range, `τ = g·P`, which is below 2^31. +pub fn tick(g: u64, p: u64) -> i64 { + let t = g * p; + debug_assert!(t < 1 << 31); + t as i64 +} + +/// The frames of the document at `P` ticks per frame, as `first..=last`. +pub fn frames(t0: u32, dur: u32, p: u64) -> core::ops::RangeInclusive { + let (first, last) = frame_range(t0, dur, p); + if first > last { 1..=0 } else { first as u64..=last as u64 } +} diff --git a/wai/wai-vector/src/form.rs b/wai/wai-vector/src/form.rs new file mode 100644 index 000000000..463d2b891 --- /dev/null +++ b/wai/wai-vector/src/form.rs @@ -0,0 +1,486 @@ +//! The JSON authoring form (§2.12, informative): one member per field of `WVG1`, +//! which makes a vector reviewable. The form is never a payload, and a sink never +//! reads it. +//! +//! [`to_json`] writes every field as carried, zero fields included (named +//! `zero@`), so any payload whose length is exact for its header converts to +//! the form and back to the same bytes. A payload that cannot be split by its header +//! is written as `{"raw": ""}`. [`to_bytes`] reads either form. +//! +//! Layout: `header` is an object; `sizes`, `rates`, `sets`, `tracks`, `paths`, +//! `texts` and `items` are arrays of objects; `tables` (17 entries), `paints` +//! (`[r, g, b, a]`), `keys` (`[t, value, interp, zero]`), `path_points` +//! (`[x, y, tag]`), `glyphs` (`[gid, zero, x, y]`) and `clusters` +//! (`[glyph_count, zero, byte_first, byte_len]`) are arrays of arrays; `path_ends` is +//! an array of integers; `strings` is a string, or `{"hex": …}` when it is not UTF-8; +//! `inline` is hexadecimal. A `note` member is ignored. + +use alloc::format; +use alloc::string::String; +use alloc::vec::Vec; + +use crate::json::{self, Value, hex, push_int, push_str, unhex}; +use crate::wos1::Point; +use crate::wvg1::*; + +fn line(out: &mut String, key: &str, v: &str, last: bool) { + push_str(out, key); + out.push(':'); + out.push_str(v); + if !last { + out.push(','); + } + out.push('\n'); +} + +fn arr_lines(out: &mut String, key: &str, rows: Vec, last: bool) { + push_str(out, key); + out.push_str(":["); + if !rows.is_empty() { + out.push('\n'); + } + let n = rows.len(); + for (i, r) in rows.into_iter().enumerate() { + out.push_str(&r); + if i + 1 < n { + out.push(','); + } + out.push('\n'); + } + out.push(']'); + if !last { + out.push(','); + } + out.push('\n'); +} + +fn ints(v: &[i128]) -> String { + let mut s = String::from("["); + for (i, x) in v.iter().enumerate() { + if i > 0 { + s.push(','); + } + push_int(&mut s, *x); + } + s.push(']'); + s +} + +fn bytes_arr(b: &[u8]) -> String { + ints(&b.iter().map(|&x| i128::from(x)).collect::>()) +} + +fn o(members: &[(&str, String)]) -> String { + let mut s = String::from("{"); + for (i, (k, v)) in members.iter().enumerate() { + if i > 0 { + s.push(','); + } + push_str(&mut s, k); + s.push(':'); + s.push_str(v); + } + s.push('}'); + s +} + +fn n(v: impl Into) -> String { + let mut s = String::new(); + push_int(&mut s, v.into()); + s +} + +/// The form of a payload, with an optional note. +pub fn to_json(bytes: &[u8], note: &str) -> String { + let mut out = String::from("{\n"); + if !note.is_empty() { + let mut s = String::new(); + push_str(&mut s, note); + line(&mut out, "note", &s, false); + } + let splittable = bytes.len() >= 80 && Header::read(bytes).exact_len() == bytes.len() as u64; + if !splittable { + let mut s = String::new(); + push_str(&mut s, &hex(bytes)); + line(&mut out, "raw", &s, true); + out.push_str("}\n"); + return out; + } + let d = read_tables(bytes, Header::read(bytes)); + let h = &d.header; + let magic = if h.magic.iter().all(|c| c.is_ascii_graphic()) { + let mut s = String::new(); + push_str(&mut s, core::str::from_utf8(&h.magic).unwrap_or("")); + s + } else { + bytes_arr(&h.magic) + }; + let header = o(&[ + ("magic", magic), + ("format", n(h.format)), + ("tb", n(h.tb)), + ("t0", n(h.t0)), + ("dur", n(h.dur)), + ("design_w", n(h.design_w)), + ("design_h", n(h.design_h)), + ("n_sizes", n(h.n_sizes)), + ("n_rates", n(h.n_rates)), + ("n_sets", n(h.n_sets)), + ("n_tables", n(h.n_tables)), + ("n_paints", n(h.n_paints)), + ("n_texts", n(h.n_texts)), + ("n_tracks", n(h.n_tracks)), + ("n_paths", n(h.n_paths)), + ("n_items", n(h.n_items)), + ("n_keys", n(h.n_keys)), + ("n_glyphs", n(h.n_glyphs)), + ("n_clusters", n(h.n_clusters)), + ("path_contours", n(h.path_contours)), + ("path_points", n(h.path_points)), + ("strings_len", n(h.strings_len)), + ("inline_len", n(h.inline_len)), + ("held_len", n(h.held_len)), + ("zero@72", bytes_arr(&h.zero)), + ]); + line(&mut out, "header", &header, false); + arr_lines(&mut out, "sizes", d.sizes.iter().map(|s| o(&[("w", n(s.w)), ("h", n(s.h)), ("cost", n(s.cost))])).collect(), false); + arr_lines(&mut out, "rates", d.rates.iter().map(|r| o(&[("num", n(r.num)), ("den", n(r.den))])).collect(), false); + arr_lines( + &mut out, + "sets", + d.sets + .iter() + .map(|s| { + let mut h = String::new(); + push_str(&mut h, &hex(&s.sha256)); + o(&[("carriage", n(s.carriage)), ("zero@1", bytes_arr(&s.zero)), ("length", n(s.length)), ("sha256", h)]) + }) + .collect(), + false, + ); + arr_lines(&mut out, "tables", d.tables.iter().map(|t| ints(&t.e.map(i128::from))).collect(), false); + arr_lines(&mut out, "paints", d.paints.iter().map(|p| bytes_arr(&p.rgba)).collect(), false); + arr_lines( + &mut out, + "tracks", + d.tracks.iter().map(|t| o(&[("kind", n(t.kind)), ("zero@1", n(t.zero1)), ("zero@2", n(t.zero2)), ("n_keys", n(t.n_keys))])).collect(), + false, + ); + arr_lines( + &mut out, + "keys", + d.keys.iter().map(|k| format!("[{},{},{},{}]", k.t, k.value, k.interp, bytes_arr(&k.zero))).collect(), + false, + ); + arr_lines( + &mut out, + "paths", + d.paths + .iter() + .map(|p| { + o(&[ + ("n_contours", n(p.n_contours)), + ("n_points", n(p.n_points)), + ("zero@4", n(p.zero)), + ("xmin", n(p.bbox[0])), + ("ymin", n(p.bbox[1])), + ("xmax", n(p.bbox[2])), + ("ymax", n(p.bbox[3])), + ]) + }) + .collect(), + false, + ); + line(&mut out, "path_ends", &ints(&d.path_ends.iter().map(|&e| i128::from(e)).collect::>()), false); + arr_lines(&mut out, "path_points", d.path_points.iter().map(|p| format!("[{},{},{}]", p.x, p.y, p.tag)).collect(), false); + arr_lines( + &mut out, + "texts", + d.texts + .iter() + .map(|t| { + o(&[ + ("purpose", n(t.purpose)), + ("dir", n(t.dir)), + ("lang_len", n(t.lang_len)), + ("mode", n(t.mode)), + ("group", n(t.group)), + ("ruby", n(t.ruby)), + ("ruby_start", n(t.ruby_start)), + ("ruby_len", n(t.ruby_len)), + ("str_len", n(t.str_len)), + ]) + }) + .collect(), + false, + ); + arr_lines( + &mut out, + "items", + d.items + .iter() + .map(|it| { + o(&[ + ("kind", n(it.kind)), + ("rule", n(it.rule)), + ("zero@2", n(it.zero2)), + ("ref", n(it.reference)), + ("paint", n(it.paint)), + ("text", n(it.text)), + ("zero@10", n(it.zero10)), + ("n_glyphs", n(it.n_glyphs)), + ("n_clusters", n(it.n_clusters)), + ("t_on", n(it.t_on)), + ("t_off", n(it.t_off)), + ("unit_scale", n(it.unit_scale)), + ("m00", n(it.slots[0])), + ("m01", n(it.slots[1])), + ("m10", n(it.slots[2])), + ("m11", n(it.slots[3])), + ("tx", n(it.slots[4])), + ("ty", n(it.slots[5])), + ("op", n(it.slots[6])), + ("zero@42", bytes_arr(&it.zero42)), + ]) + }) + .collect(), + false, + ); + arr_lines(&mut out, "glyphs", d.glyphs.iter().map(|g| format!("[{},{},{},{}]", g.gid, g.zero, g.x, g.y)).collect(), false); + arr_lines( + &mut out, + "clusters", + d.clusters.iter().map(|c| format!("[{},{},{},{}]", c.glyph_count, c.zero, c.byte_first, c.byte_len)).collect(), + false, + ); + let strings = match core::str::from_utf8(&d.strings) { + Ok(s) => { + let mut t = String::new(); + push_str(&mut t, s); + t + } + Err(_) => { + let mut t = String::from("{\"hex\":"); + push_str(&mut t, &hex(&d.strings)); + t.push('}'); + t + } + }; + line(&mut out, "strings", &strings, false); + let mut inl = String::new(); + push_str(&mut inl, &hex(&d.inline)); + line(&mut out, "inline", &inl, true); + out.push_str("}\n"); + out +} + +type R = Result; + +fn member<'a>(v: &'a Value, k: &str) -> R<&'a Value> { + v.get(k).ok_or_else(|| format!("missing member {k}")) +} + +fn int_in(v: &Value, lo: i128, hi: i128, what: &str) -> R { + match v.as_int() { + Some(x) if (lo..=hi).contains(&x) => Ok(x), + _ => Err(format!("{what}: not an integer in {lo}..={hi}")), + } +} + +fn uf(v: &Value, k: &str, bits: u32) -> R { + int_in(member(v, k)?, 0, (1i128 << bits) - 1, k) +} + +fn sf(v: &Value, k: &str, bits: u32) -> R { + int_in(member(v, k)?, -(1i128 << (bits - 1)), (1i128 << (bits - 1)) - 1, k) +} + +fn arr<'a>(v: &'a Value, k: &str) -> R<&'a [Value]> { + member(v, k)?.as_arr().ok_or_else(|| format!("{k}: not an array")) +} + +fn byte_list(v: &Value, what: &str) -> R<[u8; N]> { + let a = v.as_arr().ok_or_else(|| format!("{what}: not an array"))?; + if a.len() != N { + return Err(format!("{what}: {N} bytes")); + } + let mut out = [0u8; N]; + for (o, x) in out.iter_mut().zip(a) { + *o = int_in(x, 0, 255, what)? as u8; + } + Ok(out) +} + +fn tuple<'a>(v: &'a Value, len: usize, what: &str) -> R<&'a [Value]> { + match v.as_arr() { + Some(a) if a.len() == len => Ok(a), + _ => Err(format!("{what}: an array of {len}")), + } +} + +/// The payload bytes of a form. +pub fn to_bytes(text: &str) -> R> { + let v = json::parse(text).map_err(|e| format!("not JSON at byte {}", e.at))?; + if let Some(raw) = v.get("raw") { + return raw.as_str().and_then(unhex).ok_or_else(|| String::from("raw: not hexadecimal")); + } + let hv = member(&v, "header")?; + let magic = match member(hv, "magic")? { + Value::Str(s) if s.len() == 4 => { + let b = s.as_bytes(); + [b[0], b[1], b[2], b[3]] + } + m => byte_list::<4>(m, "magic")?, + }; + let h = Header { + magic, + format: uf(hv, "format", 32)? as u32, + tb: uf(hv, "tb", 32)? as u32, + t0: uf(hv, "t0", 32)? as u32, + dur: uf(hv, "dur", 32)? as u32, + design_w: uf(hv, "design_w", 16)? as u16, + design_h: uf(hv, "design_h", 16)? as u16, + n_sizes: uf(hv, "n_sizes", 8)? as u8, + n_rates: uf(hv, "n_rates", 8)? as u8, + n_sets: uf(hv, "n_sets", 8)? as u8, + n_tables: uf(hv, "n_tables", 8)? as u8, + n_paints: uf(hv, "n_paints", 16)? as u16, + n_texts: uf(hv, "n_texts", 16)? as u16, + n_tracks: uf(hv, "n_tracks", 16)? as u16, + n_paths: uf(hv, "n_paths", 16)? as u16, + n_items: uf(hv, "n_items", 32)? as u32, + n_keys: uf(hv, "n_keys", 32)? as u32, + n_glyphs: uf(hv, "n_glyphs", 32)? as u32, + n_clusters: uf(hv, "n_clusters", 32)? as u32, + path_contours: uf(hv, "path_contours", 32)? as u32, + path_points: uf(hv, "path_points", 32)? as u32, + strings_len: uf(hv, "strings_len", 32)? as u32, + inline_len: uf(hv, "inline_len", 32)? as u32, + held_len: uf(hv, "held_len", 32)? as u32, + zero: byte_list::<8>(member(hv, "zero@72")?, "zero@72")?, + }; + let mut d = Doc { header: h, ..Doc::default() }; + for s in arr(&v, "sizes")? { + d.sizes.push(Size { w: uf(s, "w", 16)? as u16, h: uf(s, "h", 16)? as u16, cost: uf(s, "cost", 32)? as u32 }); + } + for r in arr(&v, "rates")? { + d.rates.push(Rate { num: uf(r, "num", 32)? as u32, den: uf(r, "den", 32)? as u32 }); + } + for s in arr(&v, "sets")? { + let sha = member(s, "sha256")?.as_str().and_then(unhex).filter(|b| b.len() == 32).ok_or("sha256: 64 hex digits")?; + let mut sha256 = [0u8; 32]; + sha256.copy_from_slice(&sha); + d.sets.push(SetRec { + carriage: uf(s, "carriage", 8)? as u8, + zero: byte_list::<3>(member(s, "zero@1")?, "zero@1")?, + length: uf(s, "length", 32)? as u32, + sha256, + }); + } + for t in arr(&v, "tables")? { + let a = tuple(t, 17, "table")?; + let mut e = [0u32; 17]; + for (x, y) in e.iter_mut().zip(a) { + *x = int_in(y, 0, u32::MAX.into(), "E")? as u32; + } + d.tables.push(Table { e }); + } + for p in arr(&v, "paints")? { + d.paints.push(Paint { rgba: byte_list::<4>(p, "paint")? }); + } + for t in arr(&v, "tracks")? { + d.tracks.push(Track { + kind: uf(t, "kind", 8)? as u8, + zero1: uf(t, "zero@1", 8)? as u8, + zero2: uf(t, "zero@2", 16)? as u16, + n_keys: uf(t, "n_keys", 32)? as u32, + }); + } + for k in arr(&v, "keys")? { + let a = tuple(k, 4, "key")?; + d.keys.push(Key { + t: int_in(&a[0], 0, u32::MAX.into(), "t")? as u32, + value: int_in(&a[1], i32::MIN.into(), i32::MAX.into(), "value")? as i32, + interp: int_in(&a[2], 0, 255, "interp")? as u8, + zero: byte_list::<3>(&a[3], "key zero")?, + }); + } + for p in arr(&v, "paths")? { + d.paths.push(Path { + n_contours: uf(p, "n_contours", 16)? as u16, + n_points: uf(p, "n_points", 16)? as u16, + zero: uf(p, "zero@4", 32)? as u32, + bbox: [sf(p, "xmin", 16)? as i16, sf(p, "ymin", 16)? as i16, sf(p, "xmax", 16)? as i16, sf(p, "ymax", 16)? as i16], + }); + } + for e in arr(&v, "path_ends")? { + d.path_ends.push(int_in(e, 0, 65_535, "path end")? as u16); + } + for p in arr(&v, "path_points")? { + let a = tuple(p, 3, "point")?; + d.path_points.push(Point { + x: int_in(&a[0], -32_768, 32_767, "x")? as i16, + y: int_in(&a[1], -32_768, 32_767, "y")? as i16, + tag: int_in(&a[2], 0, 255, "tag")? as u8, + }); + } + for t in arr(&v, "texts")? { + d.texts.push(Text { + purpose: uf(t, "purpose", 8)? as u8, + dir: uf(t, "dir", 8)? as u8, + lang_len: uf(t, "lang_len", 8)? as u8, + mode: uf(t, "mode", 8)? as u8, + group: uf(t, "group", 16)? as u16, + ruby: uf(t, "ruby", 16)? as u16, + ruby_start: uf(t, "ruby_start", 32)? as u32, + ruby_len: uf(t, "ruby_len", 32)? as u32, + str_len: uf(t, "str_len", 32)? as u32, + }); + } + for it in arr(&v, "items")? { + let mut slots = [0u16; 7]; + for (s, k) in slots.iter_mut().zip(["m00", "m01", "m10", "m11", "tx", "ty", "op"]) { + *s = uf(it, k, 16)? as u16; + } + d.items.push(Item { + kind: uf(it, "kind", 8)? as u8, + rule: uf(it, "rule", 8)? as u8, + zero2: uf(it, "zero@2", 16)? as u16, + reference: uf(it, "ref", 16)? as u16, + paint: uf(it, "paint", 16)? as u16, + text: uf(it, "text", 16)? as u16, + zero10: uf(it, "zero@10", 16)? as u16, + n_glyphs: uf(it, "n_glyphs", 16)? as u16, + n_clusters: uf(it, "n_clusters", 16)? as u16, + t_on: uf(it, "t_on", 32)? as u32, + t_off: uf(it, "t_off", 32)? as u32, + unit_scale: uf(it, "unit_scale", 32)? as u32, + slots, + zero42: byte_list::<6>(member(it, "zero@42")?, "zero@42")?, + }); + } + for g in arr(&v, "glyphs")? { + let a = tuple(g, 4, "glyph")?; + d.glyphs.push(GlyphRec { + gid: int_in(&a[0], 0, 65_535, "gid")? as u16, + zero: int_in(&a[1], 0, 65_535, "zero")? as u16, + x: int_in(&a[2], i32::MIN.into(), i32::MAX.into(), "x")? as i32, + y: int_in(&a[3], i32::MIN.into(), i32::MAX.into(), "y")? as i32, + }); + } + for c in arr(&v, "clusters")? { + let a = tuple(c, 4, "cluster")?; + d.clusters.push(Cluster { + glyph_count: int_in(&a[0], 0, 65_535, "glyph_count")? as u16, + zero: int_in(&a[1], 0, 65_535, "zero")? as u16, + byte_first: int_in(&a[2], 0, u32::MAX.into(), "byte_first")? as u32, + byte_len: int_in(&a[3], 0, u32::MAX.into(), "byte_len")? as u32, + }); + } + d.strings = match member(&v, "strings")? { + Value::Str(s) => s.as_bytes().to_vec(), + x => member(x, "hex")?.as_str().and_then(unhex).ok_or("strings: hex")?, + }; + d.inline = member(&v, "inline")?.as_str().and_then(unhex).ok_or("inline: hex")?; + Ok(d.write()) +} diff --git a/wai/wai-vector/src/json.rs b/wai/wai-vector/src/json.rs new file mode 100644 index 000000000..f8a164bcc --- /dev/null +++ b/wai/wai-vector/src/json.rs @@ -0,0 +1,406 @@ +//! JSON: a reader for the authoring form (§2.12) and the vector files, and the +//! writers of the files this crate commits. +//! +//! Numbers are integers only: every value the formats carry is an integer, so a +//! fraction or an exponent is refused. An integer is held as `i128`, which holds every +//! `u64` and `i64` a field or a cost can take. + +use alloc::string::String; +use alloc::vec::Vec; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Value { + Null, + Bool(bool), + Int(i128), + Str(String), + Arr(Vec), + /// Members in the order written. + Obj(Vec<(String, Value)>), +} + +/// Why a JSON text did not parse: the byte offset of the first error. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct JsonError { + pub at: usize, +} + +const MAX_DEPTH: usize = 64; + +struct P<'a> { + b: &'a [u8], + i: usize, +} + +impl P<'_> { + fn err(&self) -> Result { + Err(JsonError { at: self.i }) + } + fn ws(&mut self) { + while let Some(&c) = self.b.get(self.i) { + if matches!(c, b' ' | b'\t' | b'\n' | b'\r') { + self.i += 1; + } else { + break; + } + } + } + fn lit(&mut self, s: &[u8]) -> bool { + if self.b.get(self.i..self.i + s.len()) == Some(s) { + self.i += s.len(); + true + } else { + false + } + } + fn value(&mut self, depth: usize) -> Result { + if depth > MAX_DEPTH { + return self.err(); + } + self.ws(); + match self.b.get(self.i) { + None => self.err(), + Some(b'n') => if self.lit(b"null") { Ok(Value::Null) } else { self.err() }, + Some(b't') => if self.lit(b"true") { Ok(Value::Bool(true)) } else { self.err() }, + Some(b'f') => if self.lit(b"false") { Ok(Value::Bool(false)) } else { self.err() }, + Some(b'"') => Ok(Value::Str(self.string()?)), + Some(b'[') => { + self.i += 1; + let mut v = Vec::new(); + self.ws(); + if self.b.get(self.i) == Some(&b']') { + self.i += 1; + return Ok(Value::Arr(v)); + } + loop { + v.push(self.value(depth + 1)?); + self.ws(); + match self.b.get(self.i) { + Some(b',') => self.i += 1, + Some(b']') => { + self.i += 1; + return Ok(Value::Arr(v)); + } + _ => return self.err(), + } + } + } + Some(b'{') => { + self.i += 1; + let mut m: Vec<(String, Value)> = Vec::new(); + self.ws(); + if self.b.get(self.i) == Some(&b'}') { + self.i += 1; + return Ok(Value::Obj(m)); + } + loop { + self.ws(); + if self.b.get(self.i) != Some(&b'"') { + return self.err(); + } + let k = self.string()?; + if m.iter().any(|(n, _)| *n == k) { + return self.err(); + } + self.ws(); + if self.b.get(self.i) != Some(&b':') { + return self.err(); + } + self.i += 1; + let v = self.value(depth + 1)?; + m.push((k, v)); + self.ws(); + match self.b.get(self.i) { + Some(b',') => self.i += 1, + Some(b'}') => { + self.i += 1; + return Ok(Value::Obj(m)); + } + _ => return self.err(), + } + } + } + Some(b'-' | b'0'..=b'9') => self.int(), + _ => self.err(), + } + } + fn int(&mut self) -> Result { + let neg = self.b.get(self.i) == Some(&b'-'); + if neg { + self.i += 1; + } + let start = self.i; + let mut v: i128 = 0; + while let Some(&c) = self.b.get(self.i) { + if !c.is_ascii_digit() { + break; + } + v = match v.checked_mul(10).and_then(|x| x.checked_add(i128::from(c - b'0'))) { + Some(x) => x, + None => return self.err(), + }; + self.i += 1; + } + let digits = self.i - start; + // No empty number, no leading zero, no fraction and no exponent. + if digits == 0 || (digits > 1 && self.b[start] == b'0') { + return self.err(); + } + if matches!(self.b.get(self.i), Some(b'.' | b'e' | b'E')) { + return self.err(); + } + Ok(Value::Int(if neg { -v } else { v })) + } + fn hex4(&mut self) -> Result { + let mut v = 0u32; + for _ in 0..4 { + let c = match self.b.get(self.i) { + Some(c) => *c, + None => return self.err(), + }; + let d = match c { + b'0'..=b'9' => c - b'0', + b'a'..=b'f' => c - b'a' + 10, + b'A'..=b'F' => c - b'A' + 10, + _ => return self.err(), + }; + v = v * 16 + u32::from(d); + self.i += 1; + } + Ok(v) + } + fn string(&mut self) -> Result { + self.i += 1; + let mut out: Vec = Vec::new(); + loop { + let c = match self.b.get(self.i) { + Some(c) => *c, + None => return self.err(), + }; + self.i += 1; + match c { + b'"' => break, + b'\\' => { + let e = match self.b.get(self.i) { + Some(e) => *e, + None => return self.err(), + }; + self.i += 1; + let ch = match e { + b'"' => '"', + b'\\' => '\\', + b'/' => '/', + b'b' => '\u{8}', + b'f' => '\u{c}', + b'n' => '\n', + b'r' => '\r', + b't' => '\t', + b'u' => { + let hi = self.hex4()?; + let cp = if (0xD800..0xDC00).contains(&hi) { + if !self.lit(b"\\u") { + return self.err(); + } + let lo = self.hex4()?; + if !(0xDC00..0xE000).contains(&lo) { + return self.err(); + } + 0x10000 + ((hi - 0xD800) << 10) + (lo - 0xDC00) + } else if (0xDC00..0xE000).contains(&hi) { + return self.err(); + } else { + hi + }; + match char::from_u32(cp) { + Some(c) => c, + None => return self.err(), + } + } + _ => return self.err(), + }; + let mut buf = [0u8; 4]; + out.extend_from_slice(ch.encode_utf8(&mut buf).as_bytes()); + } + 0x00..=0x1F => return self.err(), + _ => out.push(c), + } + } + String::from_utf8(out).or_else(|_| self.err()) + } +} + +/// Parse one JSON text. Whitespace may surround the value; nothing else may. +pub fn parse(text: &str) -> Result { + let mut p = P { b: text.as_bytes(), i: 0 }; + let v = p.value(0)?; + p.ws(); + if p.i != p.b.len() { + return p.err(); + } + Ok(v) +} + +impl Value { + pub fn get(&self, key: &str) -> Option<&Value> { + match self { + Value::Obj(m) => m.iter().find(|(k, _)| k == key).map(|(_, v)| v), + _ => None, + } + } + pub fn as_int(&self) -> Option { + match self { + Value::Int(v) => Some(*v), + _ => None, + } + } + pub fn as_str(&self) -> Option<&str> { + match self { + Value::Str(s) => Some(s), + _ => None, + } + } + pub fn as_arr(&self) -> Option<&[Value]> { + match self { + Value::Arr(a) => Some(a), + _ => None, + } + } + /// Write the value compactly, members in the order held. + pub fn write(&self, out: &mut String) { + match self { + Value::Null => out.push_str("null"), + Value::Bool(b) => out.push_str(if *b { "true" } else { "false" }), + Value::Int(v) => push_int(out, *v), + Value::Str(s) => push_str(out, s), + Value::Arr(a) => { + out.push('['); + for (i, v) in a.iter().enumerate() { + if i > 0 { + out.push(','); + } + v.write(out); + } + out.push(']'); + } + Value::Obj(m) => { + out.push('{'); + for (i, (k, v)) in m.iter().enumerate() { + if i > 0 { + out.push(','); + } + push_str(out, k); + out.push(':'); + v.write(out); + } + out.push('}'); + } + } + } + /// The compact text of the value. + pub fn text(&self) -> String { + let mut s = String::new(); + self.write(&mut s); + s + } +} + +/// An object from `(key, value)` pairs, in the order given. +pub fn obj(members: Vec<(&str, Value)>) -> Value { + Value::Obj(members.into_iter().map(|(k, v)| (String::from(k), v)).collect()) +} + +pub fn int(v: impl Into) -> Value { + Value::Int(v.into()) +} + +pub fn string(s: &str) -> Value { + Value::Str(String::from(s)) +} + +pub fn push_int(out: &mut String, v: i128) { + if v < 0 { + out.push('-'); + } + let mut u = v.unsigned_abs(); + let mut buf = [0u8; 40]; + let mut n = 0; + loop { + buf[n] = b'0' + (u % 10) as u8; + n += 1; + u /= 10; + if u == 0 { + break; + } + } + for i in (0..n).rev() { + out.push(buf[i] as char); + } +} + +/// A JSON string: `"` and `\` escaped, control characters as `\u00XX`, everything +/// else as UTF-8. +pub fn push_str(out: &mut String, s: &str) { + out.push('"'); + for c in s.chars() { + match c { + '"' => out.push_str("\\\""), + '\\' => out.push_str("\\\\"), + '\n' => out.push_str("\\n"), + c if (c as u32) < 0x20 || c as u32 == 0x7F => { + out.push_str("\\u00"); + let v = c as u32; + out.push(HEX[(v >> 4) as usize] as char); + out.push(HEX[(v & 15) as usize] as char); + } + c => out.push(c), + } + } + out.push('"'); +} + +const HEX: &[u8; 16] = b"0123456789abcdef"; + +/// Lowercase hexadecimal. +pub fn hex(b: &[u8]) -> String { + let mut s = String::with_capacity(2 * b.len()); + for &x in b { + s.push(HEX[(x >> 4) as usize] as char); + s.push(HEX[(x & 15) as usize] as char); + } + s +} + +/// Bytes from lowercase or uppercase hexadecimal of even length. +pub fn unhex(s: &str) -> Option> { + let b = s.as_bytes(); + if b.len() % 2 != 0 { + return None; + } + let d = |c: u8| match c { + b'0'..=b'9' => Some(c - b'0'), + b'a'..=b'f' => Some(c - b'a' + 10), + b'A'..=b'F' => Some(c - b'A' + 10), + _ => None, + }; + b.chunks_exact(2).map(|p| Some(d(p[0])? << 4 | d(p[1])?)).collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn round_trip() { + let t = r#"{"a":[1,-2,170141183460469231731687303715884105727],"b":"x\"\\\n\u0001é😀","c":{},"d":[],"e":null,"f":true}"#; + let v = parse(t).unwrap(); + assert_eq!(parse(&v.text()).unwrap(), v); + assert_eq!(v.get("b").unwrap().as_str().unwrap(), "x\"\\\n\u{1}é😀"); + } + + #[test] + fn refusals() { + for t in ["01", "1.5", "1e3", "{\"a\":1,\"a\":2}", "[1,]", "\"\\ud800\"", "\"\u{1}\"", "1 2", "-"] { + assert!(parse(t).is_err(), "{t}"); + } + } +} diff --git a/wai/wai-vector/src/lib.rs b/wai/wai-vector/src/lib.rs new file mode 100644 index 000000000..f1efcc4c3 --- /dev/null +++ b/wai/wai-vector/src/lib.rs @@ -0,0 +1,39 @@ +//! `wai.graphics.vector` (`extensions/graphics-vector.md`): titles, credits and other +//! authored graphics as integer drawing instructions, rasterised into an overlay +//! layer. +//! +//! - [`wos1`]: the outline set (§2.1), parsed with its load checks, and written. +//! - [`wvg1`]: the payload (§2.2–§2.5), parsed with the refusal order of §2.7, loaded +//! with its sets, and written canonically. +//! - [`clock`], [`track`], [`place`]: the clock, track evaluation, placement, the +//! load-time interval check and the per-frame cost (§3.1–§3.4). +//! - [`arith`]: `R_rat`, `R_half_up`, `div255`, the quantisers and the straight-alpha +//! channel (§3.0, §3.8, §3.9, §2.9). +//! - [`scene`]: a builder that writes canonical payloads (authoring). +//! - [`form`]: the JSON authoring form (§2.12, informative). +//! - [`vectors`]: the conformance vectors of `../vector-conformance/`, generated and +//! recomputed. +//! +//! Every value is an exact integer. Nothing here uses floating point, wraps, or +//! depends on the target's word size. +#![no_std] +#![forbid(unsafe_code)] + +extern crate alloc; + +pub mod arith; +pub mod bounds; +pub mod clock; +pub mod form; +pub mod json; +pub mod place; +pub mod refuse; +pub mod scene; +pub mod sha256; +pub mod track; +pub mod vectors; +pub mod wos1; +pub mod wvg1; + +pub use refuse::{Code, Refusal}; +pub use wvg1::{Doc, Loaded, Resolver, SetStore, load, parse}; diff --git a/wai/wai-vector/src/place.rs b/wai/wai-vector/src/place.rs new file mode 100644 index 000000000..f517236aa --- /dev/null +++ b/wai/wai-vector/src/place.rs @@ -0,0 +1,334 @@ +//! Placement (§3.3), the load-time interval check (§3.4(a)) and the per-frame cost +//! (§3.4(b)), on the driver, in `i64`. +//! +//! The interval check is this interval computation, not the true range of the +//! device coordinates: every sink refuses the same documents. + +use alloc::vec; +use alloc::vec::Vec; + +use crate::arith::{floor_div, r_half_up, r_rat}; +use crate::bounds::*; +use crate::refuse::{Code, Refusal, refuse}; +use crate::wos1::Wos1; +use crate::wvg1::{Doc, Item, KIND_BEGIN, KIND_END, KIND_PATH, KIND_RUN, M00, M11, OP, TX, TY}; + +// ---------------------------------------------------------------- placement (§3.3) + +/// The composed linear map `L_ij = R_rat(M_ij·s·w, dw·2^16)`, in Q16 device subpixels +/// per outline unit. +pub fn linear_map(m: [i64; 4], s: i64, w: i64, dw: i64) -> [i64; 4] { + let den = dw << 16; + m.map(|mij| r_rat(mij * s * w, den)) +} + +/// The origin of a glyph record at run-relative `(gx, gy)` design subpixels, for the +/// translation sum `o` and matrix `m`. +pub fn origin(o: [i64; 2], m: [i64; 4], g: [i64; 2], w: i64, dw: i64) -> [i64; 2] { + let den = dw << 16; + [ + r_rat(((o[0] << 16) + m[0] * g[0] + m[1] * g[1]) * w, den), + r_rat(((o[1] << 16) + m[2] * g[0] + m[3] * g[1]) * w, den), + ] +} + +/// The point term `(R_half_up(L00·px + L01·py, 16), R_half_up(L10·px + L11·py, 16))`. +pub fn point_offset(l: [i64; 4], p: [i64; 2]) -> [i64; 2] { + [r_half_up(l[0] * p[0] + l[1] * p[1], 16), r_half_up(l[2] * p[0] + l[3] * p[1], 16)] +} + +/// The identity matrix, and the default of each slot when absent. +pub const IDENTITY: [i64; 4] = [65_536, 0, 0, 65_536]; +pub const SLOT_DEFAULT: [i64; 7] = [65_536, 0, 0, 65_536, 0, 0, 255]; + +// ---------------------------------------------------------------- intervals (§3.4(a)) + +/// A closed integer interval. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Iv { + pub lo: i64, + pub hi: i64, +} + +impl Iv { + pub const fn point(v: i64) -> Iv { + Iv { lo: v, hi: v } + } + pub fn add(self, o: Iv) -> Iv { + Iv { lo: self.lo + o.lo, hi: self.hi + o.hi } + } + /// The interval times a scalar: the interval between the two end products. + pub fn scale(self, k: i64) -> Iv { + let (a, b) = (self.lo * k, self.hi * k); + Iv { lo: a.min(b), hi: a.max(b) } + } + /// The corner hull of two intervals' product. + pub fn hull(self, o: Iv) -> Iv { + let c = [self.lo * o.lo, self.lo * o.hi, self.hi * o.lo, self.hi * o.hi]; + Iv { lo: c.iter().copied().min().unwrap_or(0), hi: c.iter().copied().max().unwrap_or(0) } + } + /// A non-decreasing function applied at each end. + pub fn map(self, f: impl Fn(i64) -> i64) -> Iv { + Iv { lo: f(self.lo), hi: f(self.hi) } + } +} + +/// What the interval check and the cost need of each item, independent of the size. +pub struct Scene<'a> { + pub d: &'a Doc, + pub sets: &'a [Wos1], + /// Each track's `[min, max]` over its key values. + pub track_iv: Vec, + /// For each fill item, `O`'s interval per axis: its own translation plus every + /// enclosing group's. For a group begin, its clip's: the group's own plus every + /// enclosing group's. + pub item_o: Vec<[Iv; 2]>, + /// Each item's effective window, `[a, b)` with `a < b`, or `None` when empty. + pub item_win: Vec>, +} + +impl<'a> Scene<'a> { + pub fn new(d: &'a Doc, sets: &'a [Wos1]) -> Scene<'a> { + let track_iv = (0..d.tracks.len()) + .map(|t| { + let ks = d.track_keys(t); + Iv { + lo: ks.iter().map(|k| i64::from(k.value)).min().unwrap_or(0), + hi: ks.iter().map(|k| i64::from(k.value)).max().unwrap_or(0), + } + }) + .collect(); + let mut s = Scene { d, sets, track_iv, item_o: Vec::with_capacity(d.items.len()), item_win: Vec::with_capacity(d.items.len()) }; + let doc_win = (i64::from(d.header.t0), i64::from(d.header.t0) + i64::from(d.header.dur)); + // Stacks of the enclosing groups' summed translation intervals and windows. + let mut o_stack: Vec<[Iv; 2]> = vec![[Iv::point(0); 2]]; + let mut w_stack: Vec<(i64, i64)> = vec![doc_win]; + for it in &d.items { + let acc = *o_stack.last().unwrap_or(&[Iv::point(0); 2]); + let win = *w_stack.last().unwrap_or(&doc_win); + if it.kind == KIND_END { + if o_stack.len() > 1 { + o_stack.pop(); + w_stack.pop(); + } + s.item_o.push([Iv::point(0); 2]); + s.item_win.push(None); + continue; + } + let own = [acc[0].add(s.slot(it, TX)), acc[1].add(s.slot(it, TY))]; + let w = (win.0.max(i64::from(it.t_on)), win.1.min(i64::from(it.t_off))); + s.item_o.push(own); + s.item_win.push(if w.0 < w.1 { Some(w) } else { None }); + if it.kind == KIND_BEGIN { + o_stack.push(own); + w_stack.push(w); + } + } + s + } + + /// A slot's interval: its track's key range, or its default as one point. + pub fn slot(&self, it: &Item, s: usize) -> Iv { + match it.slots[s] { + NONE => Iv::point(SLOT_DEFAULT[s]), + t => self.track_iv[t as usize], + } + } + + /// The matrix intervals of a fill item (the identity for a clip). + pub fn matrix(&self, it: &Item) -> [Iv; 4] { + if it.kind == KIND_BEGIN { + IDENTITY.map(Iv::point) + } else { + [self.slot(it, M00), self.slot(it, M00 + 1), self.slot(it, M00 + 2), self.slot(it, M11)] + } + } +} + +/// The device interval of one fill instance on each axis (§3.4(a) step 4). +pub fn device_iv(o: [Iv; 2], m: [Iv; 4], l: [Iv; 4], g: [i64; 2], bx: [i16; 4], w: i64, dw: i64) -> [Iv; 2] { + let den = dw << 16; + let bxx = Iv { lo: i64::from(bx[0]), hi: i64::from(bx[2]) }; + let bxy = Iv { lo: i64::from(bx[1]), hi: i64::from(bx[3]) }; + let mut out = [Iv::point(0); 2]; + for ax in 0..2 { + let (m1, m2) = (m[2 * ax], m[2 * ax + 1]); + let (l1, l2) = (l[2 * ax], l[2 * ax + 1]); + let num = o[ax].scale(1 << 16).add(m1.scale(g[0])).add(m2.scale(g[1])); + let org = num.map(|e| r_rat(e * w, den)); + let pt = l1.hull(bxx).add(l2.hull(bxy)).map(|e| r_half_up(e, 16)); + out[ax] = org.add(pt); + } + out +} + +/// `L`'s interval from `M`'s, entry by entry. +pub fn linear_iv(m: [Iv; 4], s: i64, w: i64, dw: i64) -> [Iv; 4] { + let den = dw << 16; + m.map(|mi| mi.map(|e| r_rat(e * s * w, den))) +} + +/// A fill instance: its item, its device interval, and its stored point count. +#[derive(Clone, Copy, Debug)] +pub struct Instance { + pub item: usize, + pub dev: [Iv; 2], + pub points: u64, +} + +/// Every fill instance at width `w`, in item order (a group's clip at its begin), with +/// a run's glyph records in order. +pub fn instances(sc: &Scene, w: i64, mut f: impl FnMut(Instance)) { + let d = sc.d; + let dw = i64::from(d.header.design_w); + for (i, it) in d.items.iter().enumerate() { + let s = i64::from(it.unit_scale); + match it.kind { + KIND_BEGIN if it.reference != NONE => { + let m = sc.matrix(it); + let l = linear_iv(m, s, w, dw); + let p = &d.paths[it.reference as usize]; + let dev = device_iv(sc.item_o[i], m, l, [0, 0], p.bbox, w, dw); + f(Instance { item: i, dev, points: u64::from(p.n_points) }); + } + KIND_PATH => { + let m = sc.matrix(it); + let l = linear_iv(m, s, w, dw); + let p = &d.paths[it.reference as usize]; + let dev = device_iv(sc.item_o[i], m, l, [0, 0], p.bbox, w, dw); + f(Instance { item: i, dev, points: u64::from(p.n_points) }); + } + KIND_RUN => { + let m = sc.matrix(it); + let l = linear_iv(m, s, w, dw); + let set = &sc.sets[it.reference as usize]; + for g in d.run_glyphs(i) { + let gl = set.glyph(g.gid).expect("step 7 found every glyph"); + let bx = [gl.xmin, gl.ymin, gl.xmax, gl.ymax]; + let dev = device_iv(sc.item_o[i], m, l, [i64::from(g.x), i64::from(g.y)], bx, w, dw); + f(Instance { item: i, dev, points: u64::from(gl.n_points) }); + } + } + _ => {} + } + } +} + +/// Step 8: every end of every device interval lies in `[−2^22, 2^22 − 1]`, at every +/// listed size, for every fill instance whether or not it is ever active. +pub fn interval_check(d: &Doc, sets: &[Wos1]) -> Result<(), Refusal> { + let sc = Scene::new(d, sets); + for (z, size) in d.sizes.iter().enumerate() { + let mut bad = false; + instances(&sc, i64::from(size.w), |inst| { + for iv in inst.dev { + if iv.lo < DEVICE_MIN || iv.hi > DEVICE_MAX { + bad = true; + } + } + }); + if bad { + return refuse(Code::GeometryRange, "8", "a device interval leaves [-2^22, 2^22 - 1]", z as u64); + } + } + Ok(()) +} + +// ---------------------------------------------------------------- the cost (§3.4(b)) + +/// The clipped pixel box of a device interval: `(c_lo, c_hi, bw, r_lo, r_hi, bh)`. +pub fn pixel_box(dev: [Iv; 2], w: i64, h: i64) -> (i64, i64, i64, i64, i64, i64) { + let c_lo = floor_div(dev[0].lo, 256).max(0); + let c_hi = floor_div(dev[0].hi, 256).min(w - 1); + let r_lo = floor_div(dev[1].lo, 256).max(0); + let r_hi = floor_div(dev[1].hi, 256).min(h - 1); + (c_lo, c_hi, (c_hi - c_lo + 1).max(0), r_lo, r_hi, (r_hi - r_lo + 1).max(0)) +} + +/// A fill's cost `c(f) = p·(2^10 + bw + bh) + bw·bh`. +pub fn fill_cost(p: u64, bw: u64, bh: u64) -> u64 { + p * (1024 + bw + bh) + bw * bh +} + +/// Each item's cost at size `(w, h)` (§3.4(b) step 3). +pub fn item_costs(sc: &Scene, w: i64, h: i64) -> Vec { + let d = sc.d; + let mut cost = vec![0u64; d.items.len()]; + // A run's hull over its glyph records whose box is not empty. + let mut hull: Vec> = vec![None; d.items.len()]; + for (i, it) in d.items.iter().enumerate() { + if it.kind == KIND_BEGIN { + cost[i] = (w * h) as u64; + } + } + instances(sc, w, |inst| { + let (c_lo, c_hi, bw, r_lo, r_hi, bh) = pixel_box(inst.dev, w, h); + cost[inst.item] += fill_cost(inst.points, bw as u64, bh as u64); + if d.items[inst.item].kind == KIND_RUN && bw > 0 && bh > 0 { + let e = &mut hull[inst.item]; + *e = Some(match *e { + None => (c_lo, c_hi, r_lo, r_hi), + Some((a, b, c, dd)) => (a.min(c_lo), b.max(c_hi), c.min(r_lo), dd.max(r_hi)), + }); + } + }); + for (i, hl) in hull.iter().enumerate() { + if let Some((c_lo, c_hi, r_lo, r_hi)) = *hl { + cost[i] += ((c_hi - c_lo + 1) * (r_hi - r_lo + 1)) as u64; + } + } + cost +} + +/// `cost(z) = w·h + max over every integer tick of the summed costs of the items whose +/// effective window holds it`, by sorting the windows' edges, ends before starts at +/// equal ticks. +pub fn size_cost(sc: &Scene, w: i64, h: i64) -> u64 { + let costs = item_costs(sc, w, h); + let mut edges: Vec<(i64, u8, u64)> = Vec::new(); + for (i, c) in costs.iter().enumerate() { + if let (Some((a, b)), true) = (sc.item_win[i], *c > 0) { + edges.push((a, 1, *c)); + edges.push((b, 0, *c)); + } + } + edges.sort_unstable(); + let (mut cur, mut best) = (0u64, 0u64); + for (_, start, c) in edges { + if start == 1 { + cur += c; + best = best.max(cur); + } else { + cur -= c; + } + } + (w * h) as u64 + best +} + +/// Every listed size's cost, in `SIZE` order. +pub fn costs(d: &Doc, sets: &[Wos1]) -> Vec { + let sc = Scene::new(d, sets); + d.sizes.iter().map(|z| size_cost(&sc, i64::from(z.w), i64::from(z.h))).collect() +} + +/// Step 9: for each listed size in order, `too_large` above the ceiling, otherwise +/// `payload_malformed` when it differs from `SIZE.cost`. +pub fn check_costs(d: &Doc, sets: &[Wos1]) -> Result, Refusal> { + let all = costs(d, sets); + for (z, (&c, size)) in all.iter().zip(&d.sizes).enumerate() { + if c > COST_CEILING { + return refuse(Code::TooLarge, "9", "cost above 2^32 - 1", z as u64); + } + if c != u64::from(size.cost) { + return refuse(Code::PayloadMalformed, "9", "SIZE.cost differs from the cost", z as u64); + } + } + Ok(all) +} + +/// The slot index of an item's opacity, for callers outside this module. +pub const OPACITY_SLOT: usize = OP; +/// Whether an item is a fill. +pub fn is_fill(it: &Item) -> bool { + it.kind == KIND_PATH || it.kind == KIND_RUN +} diff --git a/wai/wai-vector/src/refuse.rs b/wai/wai-vector/src/refuse.rs new file mode 100644 index 000000000..15efe7a77 --- /dev/null +++ b/wai/wai-vector/src/refuse.rs @@ -0,0 +1,79 @@ +//! The refusal codes of §2.1 and §2.7, the render request errors of §2.7, and where a +//! refusal was found. +//! +//! The code is normative: two conforming sinks that hold the same bytes report the same +//! one. The step and the rule are this implementation's diagnostics. + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Code { + PayloadMalformed, + TooLarge, + FieldRange, + PointsLimit, + OutlineNotHeld, + OutlineMismatch, + OutlineMalformed, + GlyphMissing, + GeometryRange, + /// Render request errors (§2.7, *Render*): not refusals of the payload. + SizeUnlisted, + RateUnlisted, + FrameRange, +} + +pub const CODES: [Code; 12] = [ + Code::PayloadMalformed, + Code::TooLarge, + Code::FieldRange, + Code::PointsLimit, + Code::OutlineNotHeld, + Code::OutlineMismatch, + Code::OutlineMalformed, + Code::GlyphMissing, + Code::GeometryRange, + Code::SizeUnlisted, + Code::RateUnlisted, + Code::FrameRange, +]; + +impl Code { + pub const fn name(self) -> &'static str { + match self { + Code::PayloadMalformed => "payload_malformed", + Code::TooLarge => "too_large", + Code::FieldRange => "field_range", + Code::PointsLimit => "points_limit", + Code::OutlineNotHeld => "outline_not_held", + Code::OutlineMismatch => "outline_mismatch", + Code::OutlineMalformed => "outline_malformed", + Code::GlyphMissing => "glyph_missing", + Code::GeometryRange => "geometry_range", + Code::SizeUnlisted => "size_unlisted", + Code::RateUnlisted => "rate_unlisted", + Code::FrameRange => "frame_range", + } + } + pub fn from_name(s: &str) -> Option { + CODES.iter().copied().find(|c| c.name() == s) + } +} + +/// A refusal: its code, the §2.7 (or §2.1) step that found it, the rule, and the +/// record index the rule failed at (0 where none applies). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Refusal { + pub code: Code, + pub step: &'static str, + pub rule: &'static str, + pub index: u64, +} + +impl Refusal { + pub const fn new(code: Code, step: &'static str, rule: &'static str, index: u64) -> Refusal { + Refusal { code, step, rule, index } + } +} + +pub(crate) const fn refuse(code: Code, step: &'static str, rule: &'static str, index: u64) -> Result { + Err(Refusal::new(code, step, rule, index)) +} diff --git a/wai/wai-vector/src/scene.rs b/wai/wai-vector/src/scene.rs new file mode 100644 index 000000000..47969c1a5 --- /dev/null +++ b/wai/wai-vector/src/scene.rs @@ -0,0 +1,420 @@ +//! A scene builder: items that name their paths, sets, paints, tracks and tables by +//! value, written as a canonical `WVG1` (§2.5): each pool in first-reference order, +//! with no duplicates, and every listed size's cost stated. +//! +//! This is the authoring side. A sink never builds; the vector generator does. + +use alloc::collections::BTreeMap; +use alloc::vec::Vec; + +use crate::bounds::NONE; +use crate::wos1::{self, Point, Wos1}; +use crate::wvg1::*; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum Ease { + Hold, + Linear, + Table([u32; 17]), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct KeyDef { + pub t: u32, + pub value: i32, + pub ease: Ease, +} + +/// A track by value: its kind (1 opacity, 2 translation, 3 matrix entry) and keys. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct TrackDef { + pub kind: u8, + pub keys: Vec, +} + +impl TrackDef { + pub fn constant(kind: u8, value: i32) -> TrackDef { + TrackDef { kind, keys: alloc::vec![KeyDef { t: 0, value, ease: Ease::Hold }] } + } + /// A linear move from `(t0, v0)` to `(t1, v1)`. + pub fn linear(kind: u8, t0: u32, v0: i32, t1: u32, v1: i32) -> TrackDef { + TrackDef { + kind, + keys: alloc::vec![KeyDef { t: t0, value: v0, ease: Ease::Linear }, KeyDef { t: t1, value: v1, ease: Ease::Hold }], + } + } +} + +/// A path by value: its contours, each a list of points meeting §2.1's grammar. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct PathDef { + pub contours: Vec>, +} + +impl PathDef { + /// An axis-aligned rectangle of on-curve points, `(x0, y0)` to `(x1, y1)`, wound + /// clockwise on screen (y down). + pub fn rect(x0: i16, y0: i16, x1: i16, y1: i16) -> PathDef { + PathDef { contours: alloc::vec![poly(&[(x0, y0), (x1, y0), (x1, y1), (x0, y1)])] } + } + pub fn points(&self) -> usize { + self.contours.iter().map(Vec::len).sum() + } + /// Every contour reversed, the first point kept first. + pub fn reversed(&self) -> PathDef { + PathDef { contours: self.contours.iter().map(|c| reverse_contour(c)).collect() } + } +} + +/// A contour of on-curve points. +pub fn poly(pts: &[(i16, i16)]) -> Vec { + pts.iter().map(|&(x, y)| Point { x, y, tag: 0 }).collect() +} + +/// A contour traversed the other way, starting at the same on-curve point. +pub fn reverse_contour(c: &[Point]) -> Vec { + let mut out = Vec::with_capacity(c.len()); + out.push(c[0]); + out.extend(c[1..].iter().rev().copied()); + out +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct TextDef { + pub purpose: u8, + pub dir: u8, + pub mode: u8, + pub group: u16, + pub ruby: u16, + pub ruby_start: u32, + pub ruby_len: u32, + pub lang: Vec, + pub string: Vec, +} + +impl TextDef { + pub fn new(purpose: u8, lang: &str, string: &str) -> TextDef { + TextDef { + purpose, + dir: 0, + mode: 0, + group: 0, + ruby: 0, + ruby_start: 0, + ruby_len: 0, + lang: lang.as_bytes().to_vec(), + string: string.as_bytes().to_vec(), + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct SetDef { + pub bytes: Vec, + pub inline: bool, +} + +pub type Slots = [Option; 7]; + +pub const NO_SLOTS: Slots = [None, None, None, None, None, None, None]; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ItemDef { + Begin { + /// The clip path, its rule and its `unit_scale`. + clip: Option<(PathDef, u8, u32)>, + t_on: u32, + t_off: u32, + tx: Option, + ty: Option, + op: Option, + }, + End, + Path { + path: PathDef, + rule: u8, + paint: [u8; 4], + text: Option, + t_on: u32, + t_off: u32, + unit_scale: u32, + slots: Slots, + }, + Run { + /// An index into [`SceneDef::sets`]. + set: usize, + paint: [u8; 4], + text: u16, + t_on: u32, + t_off: u32, + unit_scale: u32, + slots: Slots, + /// `(gid, x, y)`, in visual order. + glyphs: Vec<(u16, i32, i32)>, + /// `(glyph_count, byte_first, byte_len)`. + clusters: Vec<(u16, u32, u32)>, + }, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct SceneDef { + pub tb: u32, + pub t0: u32, + pub dur: u32, + pub design_w: u16, + pub design_h: u16, + pub sizes: Vec<(u16, u16)>, + pub rates: Vec<(u32, u32)>, + pub sets: Vec, + pub texts: Vec, + pub items: Vec, +} + +/// A pool that assigns indices in first-reference order and merges equal entries. +struct Pool { + index: BTreeMap, + order: Vec, +} + +impl Pool { + fn new() -> Pool { + Pool { index: BTreeMap::new(), order: Vec::new() } + } + fn id(&mut self, v: &T) -> u16 { + if let Some(&i) = self.index.get(v) { + return i; + } + let i = self.order.len() as u16; + self.index.insert(v.clone(), i); + self.order.push(v.clone()); + i + } +} + +impl SceneDef { + pub fn new(tb: u32, t0: u32, dur: u32, design_w: u16, design_h: u16) -> SceneDef { + SceneDef { tb, t0, dur, design_w, design_h, sizes: Vec::new(), rates: Vec::new(), sets: Vec::new(), texts: Vec::new(), items: Vec::new() } + } + + /// The canonical payload, with every `SIZE.cost` 0. + pub fn build_uncosted(&self) -> Doc { + let mut paths: Pool = Pool::new(); + let mut sets: Pool<[u8; 32]> = Pool::new(); + let mut set_bytes: Vec<(bool, Vec)> = Vec::new(); + let mut paints: Pool<[u8; 4]> = Pool::new(); + let mut tracks: Pool = Pool::new(); + let mut d = Doc::default(); + let slot_ids = |slots: &Slots, tracks: &mut Pool| -> [u16; 7] { + let mut out = [NONE; 7]; + for (s, t) in slots.iter().enumerate() { + if let Some(t) = t { + out[s] = tracks.id(t); + } + } + out + }; + for item in &self.items { + let it = match item { + ItemDef::Begin { clip, t_on, t_off, tx, ty, op } => { + let (reference, rule, unit_scale) = match clip { + Some((p, rule, us)) => (paths.id(p), *rule, *us), + None => (NONE, 0, 0), + }; + let slots = slot_ids(&[None, None, None, None, tx.clone(), ty.clone(), op.clone()], &mut tracks); + Item { + kind: KIND_BEGIN, + rule, + zero2: 0, + reference, + paint: NONE, + text: NONE, + zero10: 0, + n_glyphs: 0, + n_clusters: 0, + t_on: *t_on, + t_off: *t_off, + unit_scale, + slots, + zero42: [0; 6], + } + } + ItemDef::End => Item { + kind: KIND_END, + rule: 0, + zero2: 0, + reference: 0, + paint: 0, + text: 0, + zero10: 0, + n_glyphs: 0, + n_clusters: 0, + t_on: 0, + t_off: 0, + unit_scale: 0, + slots: [0; 7], + zero42: [0; 6], + }, + ItemDef::Path { path, rule, paint, text, t_on, t_off, unit_scale, slots } => { + let reference = paths.id(path); + let paint = paints.id(paint); + let slots = slot_ids(slots, &mut tracks); + Item { + kind: KIND_PATH, + rule: *rule, + zero2: 0, + reference, + paint, + text: text.unwrap_or(NONE), + zero10: 0, + n_glyphs: 0, + n_clusters: 0, + t_on: *t_on, + t_off: *t_off, + unit_scale: *unit_scale, + slots, + zero42: [0; 6], + } + } + ItemDef::Run { set, paint, text, t_on, t_off, unit_scale, slots, glyphs, clusters } => { + let sd = &self.sets[*set]; + let h = crate::sha256::sha256(&sd.bytes); + let before = sets.order.len(); + let reference = sets.id(&h); + if sets.order.len() > before { + set_bytes.push((sd.inline, sd.bytes.clone())); + } + let paint = paints.id(paint); + let slots = slot_ids(slots, &mut tracks); + for &(gid, x, y) in glyphs { + d.glyphs.push(GlyphRec { gid, zero: 0, x, y }); + } + for &(glyph_count, byte_first, byte_len) in clusters { + d.clusters.push(Cluster { glyph_count, zero: 0, byte_first, byte_len }); + } + Item { + kind: KIND_RUN, + rule: 0, + zero2: 0, + reference, + paint, + text: *text, + zero10: 0, + n_glyphs: glyphs.len() as u16, + n_clusters: clusters.len() as u16, + t_on: *t_on, + t_off: *t_off, + unit_scale: *unit_scale, + slots, + zero42: [0; 6], + } + } + }; + d.items.push(it); + } + // Tables, in the first-reference order of the tracks' keys. + let mut tables: Pool<[u32; 17]> = Pool::new(); + for t in &tracks.order { + let first = d.keys.len() as u32; + for k in &t.keys { + let interp = match &k.ease { + Ease::Hold => 0, + Ease::Linear => 1, + Ease::Table(e) => 2 + tables.id(e) as u8, + }; + d.keys.push(Key { t: k.t, value: k.value, interp, zero: [0; 3] }); + } + d.tracks.push(Track { kind: t.kind, zero1: 0, zero2: 0, n_keys: d.keys.len() as u32 - first }); + } + d.tables = tables.order.iter().map(|e| Table { e: *e }).collect(); + d.paints = paints.order.iter().map(|&rgba| Paint { rgba }).collect(); + for p in &paths.order { + let mut n = 0u16; + let first = d.path_points.len(); + for c in &p.contours { + n += c.len() as u16; + d.path_points.extend_from_slice(c); + d.path_ends.push(n - 1); + } + d.paths.push(Path { n_contours: p.contours.len() as u16, n_points: n, zero: 0, bbox: wos1::exact_box(&d.path_points[first..]) }); + } + let (mut inline_len, mut held_len) = (0u32, 0u32); + for (i, (inline, bytes)) in set_bytes.iter().enumerate() { + d.sets.push(SetRec { carriage: u8::from(*inline), zero: [0; 3], length: bytes.len() as u32, sha256: sets.order[i] }); + if *inline { + d.inline.extend_from_slice(bytes); + inline_len += bytes.len() as u32; + } else { + held_len += bytes.len() as u32; + } + } + for t in &self.texts { + d.texts.push(Text { + purpose: t.purpose, + dir: t.dir, + lang_len: t.lang.len() as u8, + mode: t.mode, + group: t.group, + ruby: t.ruby, + ruby_start: t.ruby_start, + ruby_len: t.ruby_len, + str_len: t.string.len() as u32, + }); + d.strings.extend_from_slice(&t.lang); + d.strings.extend_from_slice(&t.string); + } + d.sizes = self.sizes.iter().map(|&(w, h)| Size { w, h, cost: 0 }).collect(); + d.rates = self.rates.iter().map(|&(num, den)| Rate { num, den }).collect(); + d.header = Header { + magic: *b"WVG1", + format: 1, + tb: self.tb, + t0: self.t0, + dur: self.dur, + design_w: self.design_w, + design_h: self.design_h, + held_len, + ..Header::default() + }; + d.sync_counts(); + debug_assert_eq!(d.header.inline_len, inline_len); + d.index(); + d + } + + /// The sets this scene's runs name, parsed, in pool order. `None` if one is not a + /// valid `WOS1`. + pub fn parsed_sets(&self, d: &Doc) -> Option> { + d.sets + .iter() + .map(|r| { + let sd = self.sets.iter().find(|s| crate::sha256::sha256(&s.bytes) == r.sha256)?; + wos1::parse(&sd.bytes).ok() + }) + .collect() + } + + /// The canonical payload with every listed size's cost stated, and the costs. A + /// cost above `u32` is stated as `u32::MAX` (the payload is then refused + /// `too_large`, before the stated value is read). + pub fn build(&self) -> (Doc, Vec) { + let mut d = self.build_uncosted(); + let costs = match self.parsed_sets(&d) { + Some(sets) => crate::place::costs(&d, &sets), + None => alloc::vec![0; d.sizes.len()], + }; + for (s, &c) in d.sizes.iter_mut().zip(&costs) { + s.cost = u32::try_from(c).unwrap_or(u32::MAX); + } + (d, costs) + } + + /// The payload bytes of [`SceneDef::build`]. + pub fn bytes(&self) -> Vec { + self.build().0.write() + } + + /// The held sets' bytes. + pub fn held(&self) -> Vec> { + self.sets.iter().filter(|s| !s.inline).map(|s| s.bytes.clone()).collect() + } +} diff --git a/wai/wai-vector/src/sha256.rs b/wai/wai-vector/src/sha256.rs new file mode 100644 index 000000000..647238d55 --- /dev/null +++ b/wai/wai-vector/src/sha256.rs @@ -0,0 +1,7 @@ +//! SHA-256 (FIPS 180-4): a set's identity (§2.3), a payload's (`instr`, §2.10) and a +//! frame's (§2.9). One implementation in the tree: `wai-ops`'s, included by path. + +#[path = "../../wai-ops/src/sha256.rs"] +mod imp; + +pub use imp::sha256; diff --git a/wai/wai-vector/src/track.rs b/wai/wai-vector/src/track.rs new file mode 100644 index 000000000..bd6f15d0a --- /dev/null +++ b/wai/wai-vector/src/track.rs @@ -0,0 +1,46 @@ +//! Track evaluation (§3.2), on the driver, in `i64`. +//! +//! Linear keys round the exact rational `δ·r/Δ` half up (`R_rat`), so an integer speed +//! with keys on frame ticks lands every frame on the grid. Easing tables interpolate a +//! 17-point Q16 table and round the final product half up. Every value lies between +//! the two keys it interpolates, so an opacity stays in 0..=255 with no clamp, and the +//! interval check (§3.4(a)) may use the keys' range. + +use crate::arith::{floor_div, r_half_up, r_rat}; +use crate::wvg1::{Key, Table}; + +/// The value of a track with keys `keys` (at least one, strictly ascending in `t`) +/// at tick `tau`. +pub fn eval(keys: &[Key], tables: &[Table], tau: i64) -> i64 { + let first = &keys[0]; + let last = &keys[keys.len() - 1]; + if tau <= i64::from(first.t) { + return i64::from(first.value); + } + if tau >= i64::from(last.t) { + return i64::from(last.value); + } + let i = keys.partition_point(|k| i64::from(k.t) <= tau) - 1; + segment(&keys[i], &keys[i + 1], tables, tau) +} + +/// The value between two adjacent keys `a` and `b` at `a.t ≤ tau < b.t`. +pub fn segment(a: &Key, b: &Key, tables: &[Table], tau: i64) -> i64 { + let dt = i64::from(b.t) - i64::from(a.t); + let r = tau - i64::from(a.t); + let v = i64::from(a.value); + let delta = i64::from(b.value) - v; + match a.interp { + 0 => v, + 1 => v + r_rat(delta * r, dt), + j => { + let e = &tables[j as usize - 2].e; + let u = floor_div(r << 16, dt); + let k = (u >> 12) as usize; + let phi = u & 4095; + let step = (i64::from(e[k + 1]) - i64::from(e[k])) * phi; + let ease = i64::from(e[k]) + (step >> 12); + v + r_half_up(delta * ease, 16) + } + } +} diff --git a/wai/wai-vector/src/vectors.rs b/wai/wai-vector/src/vectors.rs new file mode 100644 index 000000000..6827402b9 --- /dev/null +++ b/wai/wai-vector/src/vectors.rs @@ -0,0 +1,279 @@ +//! The conformance vectors of `../vector-conformance/`: generated from formulas, and +//! recomputed from their inputs. +//! +//! Layout, under `vector-conformance/`: +//! - `sets/.wos1`: the outline sets the vectors name. A held set is found by its +//! SHA-256 among these files. +//! - `vectors//.wvg1`, with its JSON authoring form (§2.12) beside it as +//! `.json`; `vectors//.wos1`, an outline set checked on its own; +//! and, in `arith`, `.json`, an arithmetic input. +//! - `vectors//index.json`: what each vector pins. +//! - `expected//.json`: the result recomputed from the vector, with keys +//! in ascending order and no whitespace: a refusal's code (§2.7, §2.1), or for an +//! accepted payload its SHA-256 (`instr`), `text_hash` and block identities (§2.11), +//! each listed size's cost (§3.4(b)) and each listed rate's ticks per frame and +//! frame range (§3.1, §2.7). +//! - `sha256.json`: the tree-wide digest sidecar (SPEC §7, *Digests*). +//! +//! [`generate`] writes every file. [`recompute`] gives a vector's expected file from +//! the vector alone and the sets, which is what every fabric leg runs. + +mod arith_vectors; +mod canonical; +mod cost; +mod geometry; +mod refusals; +pub mod sets; + +use alloc::collections::BTreeMap; +use alloc::format; +use alloc::string::String; +use alloc::vec::Vec; + +use crate::clock; +use crate::form; +use crate::json::{self, Value, hex, int, obj, string}; +use crate::sha256::sha256; +use crate::wos1; +use crate::wvg1::{self, Doc, SetStore}; + +/// The corpus directory, relative to `wai/`. +pub const CORPUS: &str = "vector-conformance"; +/// The fuzz seeds directory, relative to `wai/`. +pub const SEEDS: &str = "wai-vector/fuzz/seeds"; + +/// One generated vector: a group, a name, its bytes and extension, and what it pins. +pub struct Vector { + pub group: &'static str, + pub name: String, + pub ext: &'static str, + pub bytes: Vec, + pub note: String, +} + +impl Vector { + pub fn wvg1(group: &'static str, name: &str, bytes: Vec, note: &str) -> Vector { + Vector { group, name: String::from(name), ext: "wvg1", bytes, note: String::from(note) } + } + pub fn wos1(group: &'static str, name: &str, bytes: Vec, note: &str) -> Vector { + Vector { group, name: String::from(name), ext: "wos1", bytes, note: String::from(note) } + } + pub fn input(group: &'static str, name: &str, text: String, note: &str) -> Vector { + Vector { group, name: String::from(name), ext: "json", bytes: text.into_bytes(), note: String::from(note) } + } +} + +/// Every vector of the corpus, in group order. +pub fn all_vectors() -> Vec { + let mut v = Vec::new(); + v.extend(arith_vectors::vectors()); + v.extend(canonical::vectors()); + v.extend(refusals::vectors()); + v.extend(geometry::vectors()); + v.extend(cost::vectors()); + v +} + +/// A resolver holding every set under `sets/`. +pub fn corpus_store() -> SetStore { + let mut s = SetStore::new(); + for (_, b) in sets::corpus_sets() { + s.add(b); + } + s +} + +/// The vector of this name in this group. +pub fn find(group: &str, name: &str) -> Option { + all_vectors().into_iter().find(|v| v.group == group && v.name == name) +} + +/// The canonical text of a JSON value, with a final newline. +fn line(v: &Value) -> String { + let mut s = v.text(); + s.push('\n'); + s +} + +/// An object's members sorted by key, so its text is canonical. +fn sorted(mut m: Vec<(&'static str, Value)>) -> Value { + m.sort_by(|a, b| a.0.cmp(b.0)); + obj(m) +} + +fn digest_str(b: &[u8]) -> Value { + string(&hex(&sha256(b))) +} + +/// A payload's expected file: its refusal, or what an accepted payload states. +pub fn expect_wvg1(bytes: &[u8], store: &mut SetStore) -> String { + match wvg1::load(bytes, store) { + Err(r) => line(&sorted(alloc::vec![("code", string(r.code.name()))])), + Ok(l) => line(&accepted(bytes, &l.doc, &l.costs)), + } +} + +fn accepted(bytes: &[u8], d: &Doc, costs: &[u64]) -> Value { + let mut th = d.texts_bytes(); + th.extend_from_slice(&d.strings); + let blocks: Vec = (0..d.texts.len()).map(|t| string(&hex(&block_identity(d, t)))).collect(); + let sizes: Vec = d.sizes.iter().zip(costs).map(|(s, &c)| Value::Arr(alloc::vec![int(s.w), int(s.h), int(c)])).collect(); + let rates: Vec = d + .rates + .iter() + .map(|r| { + let p = r.ticks_per_frame(d.header.tb); + let (first, last) = clock::frame_range(d.header.t0, d.header.dur, p); + Value::Arr(alloc::vec![int(r.num), int(r.den), int(p), int(first), int(last)]) + }) + .collect(); + sorted(alloc::vec![ + ("code", string("accepted")), + ("instr", digest_str(bytes)), + ("text_hash", digest_str(&th)), + ("blocks", Value::Arr(blocks)), + ("sizes", Value::Arr(sizes)), + ("rates", Value::Arr(rates)), + ]) +} + +/// A block's identity (§2.11): SHA-256 of `"wai:text-block"`, `0x01`, `purpose`, `dir`, +/// `mode`, `lang_len`, the tag, `str_len` as `u32` little-endian, and the string. +pub fn block_identity(d: &Doc, t: usize) -> [u8; 32] { + let b = &d.texts[t]; + let mut m = Vec::new(); + m.extend_from_slice(b"wai:text-block"); + m.extend_from_slice(&[0x01, b.purpose, b.dir, b.mode, b.lang_len]); + m.extend_from_slice(d.lang(t)); + m.extend_from_slice(&b.str_len.to_le_bytes()); + m.extend_from_slice(d.string(t)); + sha256(&m) +} + +/// An outline set's expected file. +pub fn expect_wos1(bytes: &[u8]) -> String { + match wos1::parse(bytes) { + Err(r) => line(&sorted(alloc::vec![("code", string(r.code.name()))])), + Ok(w) => line(&sorted(alloc::vec![ + ("code", string("accepted")), + ("sha256", digest_str(bytes)), + ("glyphs", int(w.glyphs.len() as u64)), + ("points", int(w.points.len() as u64)), + ])), + } +} + +/// The expected file of the vector at `vectors//.`, from its bytes +/// and the held sets in `store`. +pub fn recompute(group: &str, ext: &str, bytes: &[u8], store: &mut SetStore) -> Result { + match (group, ext) { + ("arith", "json") => arith_vectors::recompute(core::str::from_utf8(bytes).map_err(|_| String::from("not UTF-8"))?), + (_, "wvg1") => Ok(expect_wvg1(bytes, store)), + (_, "wos1") => Ok(expect_wos1(bytes)), + _ => Err(format!("no recomputation for {group}/*.{ext}")), + } +} + +/// The authoring form beside a payload. +pub fn form_of(bytes: &[u8]) -> String { + form::to_json(bytes, "") +} + +/// `index.json`: each vector's name and what it pins, one per line. +fn index_text(vs: &[&Vector]) -> String { + let mut m: BTreeMap<&str, &str> = BTreeMap::new(); + for v in vs { + m.insert(&v.name, &v.note); + } + let mut s = String::from("{\n"); + let n = m.len(); + for (i, (k, v)) in m.into_iter().enumerate() { + json::push_str(&mut s, k); + s.push(':'); + json::push_str(&mut s, v); + if i + 1 < n { + s.push(','); + } + s.push('\n'); + } + s.push_str("}\n"); + s +} + +/// The tree-wide digest sidecar: entries `(key, buffer, [(field, digests)])`. +fn sidecar_text(entries: &[(String, String, Vec<(&'static str, Vec)>)]) -> String { + let mut s = String::from("{\n"); + for (i, (k, buffer, fields)) in entries.iter().enumerate() { + json::push_str(&mut s, k); + s.push_str(":{\"buffer\":"); + json::push_str(&mut s, buffer); + for (f, ds) in fields { + s.push(','); + json::push_str(&mut s, f); + s.push(':'); + if ds.len() == 1 && !f.starts_with("frames") { + json::push_str(&mut s, &ds[0]); + } else { + s.push('['); + for (j, d) in ds.iter().enumerate() { + if j > 0 { + s.push(','); + } + json::push_str(&mut s, d); + } + s.push(']'); + } + } + s.push('}'); + if i + 1 < entries.len() { + s.push(','); + } + s.push('\n'); + } + s.push_str("}\n"); + s +} + +/// Every file of the corpus and of the fuzz seeds, as `(path relative to wai/, bytes)`. +pub fn generate() -> Result)>, String> { + let mut out: Vec<(String, Vec)> = Vec::new(); + let mut store = SetStore::new(); + for (name, bytes) in sets::corpus_sets() { + store.add(bytes.clone()); + out.push((format!("{CORPUS}/sets/{name}.wos1"), bytes)); + } + let vs = all_vectors(); + let mut groups: Vec<&'static str> = Vec::new(); + for v in &vs { + if !groups.contains(&v.group) { + groups.push(v.group); + } + let base = format!("{CORPUS}/vectors/{}/{}", v.group, v.name); + out.push((format!("{base}.{}", v.ext), v.bytes.clone())); + if v.ext == "wvg1" { + out.push((format!("{base}.json"), form_of(&v.bytes).into_bytes())); + } + let e = recompute(v.group, v.ext, &v.bytes, &mut store)?; + out.push((format!("{CORPUS}/expected/{}/{}.json", v.group, v.name), e.into_bytes())); + } + for g in &groups { + let members: Vec<&Vector> = vs.iter().filter(|v| v.group == *g).collect(); + out.push((format!("{CORPUS}/vectors/{g}/index.json"), index_text(&members).into_bytes())); + } + let entries = alloc::vec![( + String::from("arith/div255"), + String::from("the div255 table: 65,026 u8 values for x = 0..65025, in order"), + alloc::vec![("sha256", alloc::vec![hex(&sha256(&arith_vectors::div255_table()))])], + )]; + out.push((format!("{CORPUS}/sha256.json"), sidecar_text(&entries).into_bytes())); + for (name, bytes) in sets::fuzz_seeds() { + out.push((format!("{SEEDS}/{name}"), bytes)); + } + // Names must be unique. + let mut names: Vec<&String> = out.iter().map(|(p, _)| p).collect(); + names.sort(); + if let Some(w) = names.windows(2).find(|w| w[0] == w[1]) { + return Err(format!("generated twice: {}", w[0])); + } + Ok(out) +} diff --git a/wai/wai-vector/src/vectors/arith_vectors.rs b/wai/wai-vector/src/vectors/arith_vectors.rs new file mode 100644 index 000000000..236372fb6 --- /dev/null +++ b/wai/wai-vector/src/vectors/arith_vectors.rs @@ -0,0 +1,256 @@ +//! The `arith` group (§3.0, §3.2, §3.8, §3.9, §2.9): each vector is a JSON input +//! naming an operation and its cases; its expected file states the results, or the +//! SHA-256 of a whole table. + +use alloc::format; +use alloc::string::String; +use alloc::vec; +use alloc::vec::Vec; + +use super::{Vector, line, sorted}; +use crate::arith::*; +use crate::json::{self, Value, hex, int, string}; +use crate::sha256::sha256; +use crate::track; +use crate::wvg1::{Key, Table}; + +/// `div255(x)` for `x = 0..=65025`, one byte each. +pub fn div255_table() -> Vec { + (0..=65_025u32).map(|x| div255(x) as u8).collect() +} + +/// `alpha(v)` for `v = −2^18..=2^18`, one byte each. +fn alpha_table(f: fn(i32) -> u8) -> Vec { + (-(1 << 18)..=(1 << 18)).map(f).collect() +} + +/// The straight-alpha channel `R_rat(255·c, A)` for `A = 0..=255` and `c = 0..=A`, in +/// that order, one byte each. +fn unpremul_table() -> Vec { + let mut t = Vec::new(); + for a in 0..=255u8 { + for c in 0..=a { + t.push(unpremul(c, a)); + } + } + t +} + +fn ints(v: &[i64]) -> String { + let a: Vec = v.iter().map(|&x| int(x)).collect(); + Value::Arr(a).text() +} + +fn pairs(v: &[(i64, i64)]) -> String { + let a: Vec = v.iter().map(|&(x, y)| Value::Arr(vec![int(x), int(y)])).collect(); + Value::Arr(a).text() +} + +/// The `R_rat` cases: every `n` in `[−600, 600]` against small `d`, ties of both signs, +/// and the extremes the driver forms (numerators below 2^58, denominators to 2^28). +fn r_rat_cases() -> Vec<(i64, i64)> { + let mut v = Vec::new(); + for d in [1i64, 2, 3, 4, 7, 255, 510] { + for n in (-600i64..=600).step_by(7) { + v.push((n, d)); + } + v.push((d / 2, d)); + v.push((-(d / 2), d)); + } + let big = (1i64 << 58) - 1; + for d in [1i64, 3, 16 << 16, 4096 << 16, (1 << 28) - 1, 1 << 28] { + for n in [big, -big, big - 1, -big + 1, (1 << 57) + d / 2, -(1 << 57) - d / 2, d / 2, -(d / 2), (d + 1) / 2, -(d + 1) / 2] { + v.push((n, d)); + } + } + v +} + +fn half_up_cases() -> Vec<(i64, i64)> { + let mut v = Vec::new(); + for s in [0i64, 1, 16, 17] { + for p in [-(1i64 << 47), (1 << 47) - 1, -(1 << 46) - (1 << 15), (1 << 46) + (1 << 15), -32_769, -32_768, -32_767, -1, 0, 1, 32_767, 32_768, 65_535, 65_536, 131_071] { + v.push((p, s)); + } + } + v +} + +/// Interpolation at the extremes: the longest spans, the widest value steps, a +/// non-monotone table and table entries at 0 and 2^16. +fn interp_input() -> String { + let tables: Vec<[u32; 17]> = vec![ + [0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 32768, 36864, 40960, 45056, 49152, 53248, 57344, 61440, 65536], + [0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 65536], + [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65536], + ]; + let max_t = (1u32 << 31) - 1; + let tr = 1i64 << 22; + let mx = 1i64 << 20; + // (kind, keys (t, value, interp)) + let tracks: Vec<(u8, Vec<(u32, i64, u8)>)> = vec![ + (2, vec![(0, -tr, 1), (max_t, tr, 0)]), + (2, vec![(0, tr, 1), (max_t, -tr, 0)]), + (3, vec![(0, -mx, 2), (max_t, mx, 0)]), + (3, vec![(0, mx, 3), (max_t, -mx, 0)]), + (1, vec![(0, 0, 4), (max_t, 255, 0)]), + (1, vec![(100, 255, 1), (103, 0, 2), (4199, 17, 0)]), + (2, vec![(0, 0, 1), (30_000, 768 * 7, 0)]), + ]; + let ticks: Vec = vec![-1, 0, 1, 2, 3, 99, 100, 101, 102, 103, 104, 2000, 4198, 4199, 4200, 29_999, 30_000, 1 << 30, (1 << 31) - 2, (1 << 31) - 1, 1 << 31]; + let mut s = String::from("{\"op\":\"interp\",\"tables\":["); + for (i, t) in tables.iter().enumerate() { + if i > 0 { + s.push(','); + } + s.push_str(&ints(&t.map(i64::from))); + } + s.push_str("],\"ticks\":"); + s.push_str(&ints(&ticks)); + s.push_str(",\"tracks\":["); + for (i, (kind, keys)) in tracks.iter().enumerate() { + if i > 0 { + s.push(','); + } + s.push_str(&format!("{{\"keys\":[")); + for (j, (t, v, e)) in keys.iter().enumerate() { + if j > 0 { + s.push(','); + } + s.push_str(&format!("[{t},{v},{e}]")); + } + s.push_str(&format!("],\"kind\":{kind}}}")); + } + s.push_str("]}\n"); + s +} + +pub fn vectors() -> Vec { + let g = "arith"; + vec![ + Vector::input(g, "div255", String::from("{\"op\":\"div255\"}\n"), "div255 over every input 0..=65025: the table's SHA-256 and the first x of each value (§3.9)"), + Vector::input(g, "alpha", String::from("{\"op\":\"alpha\"}\n"), "both coverage quantisers over every v in [-2^18, 2^18], as two tables (§3.8)"), + Vector::input(g, "unpremul", String::from("{\"op\":\"unpremul\"}\n"), "the straight-alpha channel R_rat(255c, A) over every c <= A (§2.9)"), + Vector::input( + g, + "r_rat", + format!("{{\"cases\":{},\"op\":\"r_rat\"}}\n", pairs(&r_rat_cases())), + "R_rat(n, d) on windows with ties of both signs and at the driver's extremes (§3.0)", + ), + Vector::input( + g, + "half_up", + format!("{{\"cases\":{},\"op\":\"half_up\"}}\n", pairs(&half_up_cases())), + "R_half_up(p, s) at s = 0, 1, 16 and 17, ties of both signs and the widths of §3.12", + ), + Vector::input(g, "interp", interp_input(), "track evaluation at the extremes: spans of 2^31 - 1 ticks, value steps of 2^23, non-monotone tables (§3.2)"), + ] +} + +fn err(s: &str) -> String { + String::from(s) +} + +fn get_pairs(v: &Value) -> Result, String> { + let a = v.get("cases").and_then(Value::as_arr).ok_or_else(|| err("cases"))?; + a.iter() + .map(|p| { + let p = p.as_arr().filter(|p| p.len() == 2).ok_or_else(|| err("a case is a pair"))?; + let x = p[0].as_int().and_then(|x| i64::try_from(x).ok()).ok_or_else(|| err("i64"))?; + let y = p[1].as_int().and_then(|x| i64::try_from(x).ok()).ok_or_else(|| err("i64"))?; + Ok((x, y)) + }) + .collect() +} + +/// The expected file of an `arith` input. +pub fn recompute(text: &str) -> Result { + let v = json::parse(text).map_err(|e| format!("not JSON at {}", e.at))?; + let op = v.get("op").and_then(Value::as_str).ok_or_else(|| err("op"))?; + let out = match op { + "div255" => { + let t = div255_table(); + let mut firsts = Vec::new(); + for x in 0..t.len() { + if x == 0 || t[x] != t[x - 1] { + firsts.push(int(x as u64)); + } + } + sorted(vec![ + ("op", string(op)), + ("count", int(t.len() as u64)), + ("sha256", string(&hex(&sha256(&t)))), + ("first_x_of_each_value", Value::Arr(firsts)), + ]) + } + "alpha" => { + let nz = alpha_table(alpha_nonzero); + let eo = alpha_table(alpha_evenodd); + let probe: Vec = [-(1i32 << 18), -(1 << 17) - 1, -(1 << 17), -65_536, -257, -256, -1, 0, 1, 256, 257, 65_536, 131_071, 1 << 17, (1 << 17) + 1, 196_608, (1 << 18) - 1, 1 << 18] + .iter() + .map(|&x| Value::Arr(vec![int(x), int(alpha_nonzero(x)), int(alpha_evenodd(x))])) + .collect(); + sorted(vec![ + ("op", string(op)), + ("domain", Value::Arr(vec![int(-(1i64 << 18)), int(1i64 << 18)])), + ("nonzero_sha256", string(&hex(&sha256(&nz)))), + ("evenodd_sha256", string(&hex(&sha256(&eo)))), + ("probes", Value::Arr(probe)), + ]) + } + "unpremul" => { + let t = unpremul_table(); + sorted(vec![("op", string(op)), ("count", int(t.len() as u64)), ("sha256", string(&hex(&sha256(&t))))]) + } + "r_rat" => { + let vals: Vec = get_pairs(&v)?.iter().map(|&(n, d)| int(r_rat(n, d))).collect(); + sorted(vec![("op", string(op)), ("values", Value::Arr(vals))]) + } + "half_up" => { + let vals: Vec = get_pairs(&v)?.iter().map(|&(p, s)| int(r_half_up(p, s as u32))).collect(); + sorted(vec![("op", string(op)), ("values", Value::Arr(vals))]) + } + "interp" => { + let tables: Vec = v + .get("tables") + .and_then(Value::as_arr) + .ok_or_else(|| err("tables"))? + .iter() + .map(|t| { + let a = t.as_arr().filter(|a| a.len() == 17).ok_or_else(|| err("17 entries"))?; + let mut e = [0u32; 17]; + for (x, y) in e.iter_mut().zip(a) { + *x = y.as_int().and_then(|v| u32::try_from(v).ok()).ok_or_else(|| err("u32"))?; + } + Ok(Table { e }) + }) + .collect::>()?; + let ticks: Vec = v + .get("ticks") + .and_then(Value::as_arr) + .ok_or_else(|| err("ticks"))? + .iter() + .map(|t| t.as_int().and_then(|x| i64::try_from(x).ok()).ok_or_else(|| err("tick"))) + .collect::>()?; + let mut rows = Vec::new(); + for tr in v.get("tracks").and_then(Value::as_arr).ok_or_else(|| err("tracks"))? { + let keys: Vec = tr + .get("keys") + .and_then(Value::as_arr) + .ok_or_else(|| err("keys"))? + .iter() + .map(|k| { + let k = k.as_arr().filter(|k| k.len() == 3).ok_or_else(|| err("key"))?; + let f = |i: usize| k[i].as_int().ok_or_else(|| err("int")); + Ok(Key { t: f(0)? as u32, value: f(1)? as i32, interp: f(2)? as u8, zero: [0; 3] }) + }) + .collect::>()?; + let vals: Vec = ticks.iter().map(|&t| int(track::eval(&keys, &tables, t))).collect(); + rows.push(Value::Arr(vals)); + } + sorted(vec![("op", string(op)), ("values", Value::Arr(rows))]) + } + _ => return Err(format!("unknown op {op}")), + }; + Ok(line(&out)) +} diff --git a/wai/wai-vector/src/vectors/canonical.rs b/wai/wai-vector/src/vectors/canonical.rs new file mode 100644 index 000000000..06fdefa30 --- /dev/null +++ b/wai/wai-vector/src/vectors/canonical.rs @@ -0,0 +1,381 @@ +//! The `canonical` group (§2.5): accepted payloads of every structure, each of which +//! re-serialises to its own bytes, and one refusal per canonical rule. + +use alloc::string::String; +use alloc::vec; +use alloc::vec::Vec; + +use super::Vector; +use super::sets::{rect, set_a, set_b}; +use crate::scene::*; +use crate::wos1::Point; +use crate::wvg1::Doc; + +pub const TB: u32 = 120_000; +/// One outline unit is one design subpixel. +pub const UNIT: u32 = 65_536; +/// Set A's outline units (2048 to the em) at an em of 48 design pixels. +pub const GLYPH_SCALE: u32 = 65_536 * 6; + +pub const RED: [u8; 4] = [200, 30, 30, 255]; +pub const GREEN: [u8; 4] = [20, 160, 60, 255]; +pub const BLUE: [u8; 4] = [30, 60, 200, 255]; +pub const HALF_WHITE: [u8; 4] = [128, 128, 128, 128]; + +/// A one-second document on a 640 × 360 design canvas, listed at that size and 25 fps. +pub fn base() -> SceneDef { + let mut s = SceneDef::new(TB, 0, TB, 640, 360); + s.sizes.push((640, 360)); + s.rates.push((25, 1)); + s +} + +/// A path fill, active for the whole second, in design subpixels. +pub fn fill(path: PathDef, paint: [u8; 4]) -> ItemDef { + ItemDef::Path { path, rule: 0, paint, text: None, t_on: 0, t_off: TB, unit_scale: UNIT, slots: NO_SLOTS } +} + +pub fn fill_with(path: PathDef, paint: [u8; 4], rule: u8, slots: Slots) -> ItemDef { + ItemDef::Path { path, rule, paint, text: None, t_on: 0, t_off: TB, unit_scale: UNIT, slots } +} + +pub fn group(clip: Option<(PathDef, u8, u32)>, tx: Option, ty: Option, op: Option) -> ItemDef { + ItemDef::Begin { clip, t_on: 0, t_off: TB, tx, ty, op } +} + +pub fn translate(v: i32) -> TrackDef { + TrackDef::constant(2, v) +} + +pub fn opacity(v: i32) -> TrackDef { + TrackDef::constant(1, v) +} + +/// A run of set `set` drawing all of block `text`, one cluster per glyph, each glyph +/// one byte of the block's string. +pub fn run(set: usize, text: u16, gids: &[u16], advance: i32, origin: (i32, i32)) -> ItemDef { + let glyphs: Vec<(u16, i32, i32)> = gids.iter().enumerate().map(|(i, &g)| (g, origin.0 + advance * i as i32, origin.1)).collect(); + let clusters: Vec<(u16, u32, u32)> = (0..gids.len()).map(|i| (1, i as u32, 1)).collect(); + ItemDef::Run { set, paint: BLUE, text, t_on: 0, t_off: TB, unit_scale: GLYPH_SCALE, slots: NO_SLOTS, glyphs, clusters } +} + +pub fn inline(bytes: Vec) -> SetDef { + SetDef { bytes, inline: true } +} + +pub fn held(bytes: Vec) -> SetDef { + SetDef { bytes, inline: false } +} + +/// A star of five points, self-intersecting: its centre winds twice. +pub fn star(cx: i16, cy: i16, r: i16) -> PathDef { + // The five outer points of a regular pentagon, visited every second one, with + // integer coordinates from a fixed table of (sin, cos) × 1000. + const P: [(i32, i32); 5] = [(0, -1000), (951, -309), (588, 809), (-588, 809), (-951, -309)]; + let pts: Vec<(i16, i16)> = [0usize, 2, 4, 1, 3] + .iter() + .map(|&k| ((i32::from(cx) + P[k].0 * i32::from(r) / 1000) as i16, (i32::from(cy) + P[k].1 * i32::from(r) / 1000) as i16)) + .collect(); + PathDef { contours: vec![poly(&pts)] } +} + +/// A shape with a quadratic and a cubic contour. +pub fn curves(x: i16, y: i16) -> PathDef { + let on = |a: i16, b: i16| Point { x: x + a, y: y + b, tag: 0 }; + let qc = |a: i16, b: i16| Point { x: x + a, y: y + b, tag: 1 }; + let cc = |a: i16, b: i16| Point { x: x + a, y: y + b, tag: 2 }; + PathDef { + contours: vec![ + vec![on(0, 0), qc(3000, 0), on(3000, 3000), qc(0, 3000)], + vec![on(4000, 0), cc(7000, -2000), cc(9000, 5000), on(6000, 3000)], + ], + } +} + +/// A payload that uses every table: an inline and a held set, easing tables, tracks of +/// all three kinds, quadratic and cubic paths, groups with a clip, text blocks with a +/// group, ruby, a vertical block and a path alternative, and runs with zero-glyph and +/// inserted-glyph clusters. +pub fn every_table() -> SceneDef { + let mut s = base(); + s.sizes = vec![(320, 180), (640, 360), (1280, 720)]; + s.rates = vec![(24000, 1001), (25, 1), (60, 1)]; + s.sets = vec![inline(set_a().write()), held(set_b().write())]; + let mut t0 = TextDef::new(3, "en", "TITLE"); + t0.group = 1; + let mut t1 = TextDef::new(3, "en-GB", "Sub-title"); + t1.group = 1; + let t2 = TextDef::new(5, "ja", "漢字"); + let mut t3 = TextDef::new(6, "ja", "かんじ"); + t3.ruby = 3; + t3.ruby_start = 0; + t3.ruby_len = 6; + let mut t4 = TextDef::new(7, "und", "ABC"); + t4.mode = 1; + t4.dir = 1; + let t5 = TextDef::new(9, "en", "Wordmark"); + s.texts = vec![t0, t1, t2, t3, t4, t5]; + let ease = Ease::Table([0, 300, 1200, 2700, 4800, 7500, 10800, 14700, 19200, 24300, 30000, 36300, 43200, 50700, 58800, 62000, 65536]); + let slide = TrackDef { kind: 2, keys: vec![KeyDef { t: 0, value: -25_600, ease: ease.clone() }, KeyDef { t: 60_000, value: 0, ease: Ease::Hold }] }; + let fade = TrackDef { + kind: 1, + keys: vec![ + KeyDef { t: 0, value: 0, ease: Ease::Linear }, + KeyDef { t: 24_000, value: 255, ease: Ease::Hold }, + KeyDef { t: 96_000, value: 255, ease: Ease::Table([0, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536]) }, + KeyDef { t: 120_000, value: 0, ease: Ease::Hold }, + ], + }; + let shear = TrackDef { kind: 3, keys: vec![KeyDef { t: 0, value: 0, ease: ease.clone() }, KeyDef { t: 120_000, value: 6_554, ease: Ease::Hold }] }; + s.items = vec![ + group(Some((PathDef::rect(0, 0, 30_000, 20_000), 0, UNIT * 4)), Some(slide.clone()), None, Some(fade)), + run(0, 0, &[1, 2, 3, 4, 5], 16 * 256, (8_000, 12_800)), + ItemDef::Run { + set: 1, + paint: GREEN, + text: 1, + t_on: 0, + t_off: TB, + unit_scale: GLYPH_SCALE * 2, + slots: [None, Some(shear), None, None, None, None, None], + glyphs: vec![(1, 8_000, 30_000), (3, 16_000, 30_000), (5, 24_000, 30_000), (1, 32_000, 30_000)], + // "Sub-title": four glyphs, a cluster of three bytes, one of two, one inserted + // glyph (a hyphen at a break), and a cluster no glyph draws. + clusters: vec![(1, 0, 3), (1, 3, 1), (1, 4, 2), (1, 6, 0), (0, 6, 3)], + }, + ItemDef::End, + group(None, None, Some(translate(2_560)), Some(opacity(200))), + ItemDef::Run { + set: 0, + paint: RED, + text: 2, + t_on: 0, + t_off: TB, + unit_scale: GLYPH_SCALE, + slots: NO_SLOTS, + glyphs: vec![(2, 40_000, 40_000), (3, 52_000, 40_000)], + clusters: vec![(1, 0, 3), (1, 3, 3)], + }, + ItemDef::Run { + set: 0, + paint: RED, + text: 3, + t_on: 0, + t_off: TB, + unit_scale: GLYPH_SCALE / 2, + slots: NO_SLOTS, + glyphs: vec![(5, 40_000, 30_000), (5, 46_000, 30_000), (5, 52_000, 30_000)], + clusters: vec![(1, 0, 3), (1, 3, 3), (1, 6, 3)], + }, + ItemDef::End, + run(0, 4, &[1, 3, 5], 0, (100_000, 20_000)), + ItemDef::Path { path: curves(0, 0), rule: 1, paint: HALF_WHITE, text: Some(5), t_on: 12_000, t_off: 108_000, unit_scale: UNIT * 2, slots: [None, None, None, None, Some(slide), None, None] }, + ItemDef::Path { path: star(20_000, 20_000, 15_000), rule: 0, paint: GREEN, text: None, t_on: 0, t_off: TB, unit_scale: UNIT * 3, slots: NO_SLOTS }, + ]; + s +} + +fn refuse_doc(s: &SceneDef, f: impl FnOnce(&mut Doc)) -> Vec { + let (mut d, _) = s.build(); + f(&mut d); + d.write() +} + +pub fn vectors() -> Vec { + let g = "canonical"; + let mut v = Vec::new(); + let mut add = |name: &str, bytes: Vec, note: &str| v.push(Vector::wvg1(g, name, bytes, note)); + + // ---------------------------------------------------------------- accepted + let mut s = base(); + s.items = vec![fill(PathDef::rect(2_560, 2_560, 12_800, 7_680), RED)]; + add("minimal", s.bytes(), "one path fill, the smallest payload: accepted"); + + add("every-table", every_table().bytes(), "every table in use: inline and held sets, easing tables, all three track kinds, curves, groups with a clip, ruby, a vertical block, inserted and zero-glyph clusters: accepted"); + + let mut s = base(); + let p = PathDef::rect(0, 0, 5_120, 5_120); + let t = TrackDef::linear(2, 0, 0, TB, 25_600); + s.items = vec![ + fill_with(p.clone(), RED, 0, [None, None, None, None, Some(t.clone()), None, None]), + fill_with(p.clone(), GREEN, 0, [None, None, None, None, None, Some(t.clone()), None]), + fill_with(p.clone(), RED, 1, [None, None, None, None, Some(t.clone()), Some(t), None]), + fill(star(20_000, 20_000, 10_000), GREEN), + ]; + add("shared", s.bytes(), "one path, one paint and one track each used by several items, each pool holding an entry once, in first-reference order: accepted"); + + let mut s = base(); + let sq = |x: i16| PathDef::rect(x, 0, x + 2_560, 2_560); + s.items = vec![ + group(Some((sq(0), 0, UNIT)), Some(translate(256)), None, Some(opacity(250))), + group(Some((star(1_280, 1_280, 1_280), 1, UNIT)), None, Some(translate(256)), None), + group(None, None, None, Some(opacity(128))), + group(Some((sq(256), 0, UNIT * 2)), None, None, None), + fill(sq(0), RED), + ItemDef::End, + ItemDef::End, + ItemDef::End, + fill(sq(1_280), GREEN), + ItemDef::End, + ]; + add("groups", s.bytes(), "groups nested four deep, clips under both rules, translations and opacities on groups: accepted"); + + let mut s = base(); + s.sizes = vec![(80, 45), (320, 180), (640, 360), (1280, 720), (2560, 1440)]; + s.rates = vec![(24000, 1001), (24, 1), (25, 1), (120, 1)]; + s.items = vec![fill(PathDef::rect(0, 0, 25_600, 25_600), RED)]; + add("sizes-rates", s.bytes(), "five sizes from 1/8 to 4 times the design width and four rates, each ascending: accepted"); + + let mut s = base(); + s.sets = vec![held(set_b().write())]; + s.texts = vec![TextDef::new(3, "en", "ABA")]; + s.items = vec![run(0, 0, &[1, 3, 1], 4_096, (5_000, 20_000))]; + add("held", s.bytes(), "a run from a held set, obtained by its SHA-256 and exact length: accepted"); + + // ---------------------------------------------------------------- refusals + let mut s = base(); + s.items = vec![fill(PathDef::rect(0, 0, 256, 256), RED), fill(PathDef::rect(256, 0, 512, 256), GREEN)]; + add( + "paint-first-use", + refuse_doc(&s, |d| { + d.items[0].paint = 1; + d.items[1].paint = 0; + }), + "rule 2: paints first referenced out of order -> payload_malformed"); + add( + "paint-unreferenced", + refuse_doc(&s, |d| { + d.items[1].paint = 0; + }), + "rule 2: a paint no item references -> payload_malformed", + ); + add("paint-duplicate", refuse_doc(&s, |d| d.paints[1] = d.paints[0]), "rule 3: two equal paints -> payload_malformed"); + + let mut s = base(); + s.items = vec![ + fill_with(PathDef::rect(0, 0, 256, 256), RED, 0, [None, None, None, None, Some(translate(10)), None, None]), + fill_with(PathDef::rect(0, 0, 256, 256), RED, 0, [None, None, None, None, Some(translate(20)), None, None]), + ]; + add("track-duplicate", refuse_doc(&s, |d| d.keys[1].value = 10), "rule 3: two tracks of one kind with equal keys -> payload_malformed"); + let mut s2 = s.clone(); + s2.items[1] = fill_with(PathDef::rect(0, 0, 512, 512), RED, 0, [None, None, None, None, Some(translate(20)), None, None]); + add( + "path-duplicate", + refuse_doc(&s2, |d| { + let first: Vec = d.path_points[0..4].to_vec(); + d.path_points[4..8].copy_from_slice(&first); + d.paths[1].bbox = d.paths[0].bbox; + }), + "rule 3: two paths with equal records, ends and points -> payload_malformed", + ); + add("track-first-use", refuse_doc(&s, |d| d.items.swap(0, 1)), "rule 2: tracks first referenced out of order -> payload_malformed"); + + let mut s = base(); + let e1 = Ease::Table([0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 32768, 36864, 40960, 45056, 49152, 53248, 57344, 61440, 65536]); + let e2 = Ease::Table([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65536]); + let tr = |e: Ease, v: i32| TrackDef { kind: 2, keys: vec![KeyDef { t: 0, value: 0, ease: e }, KeyDef { t: TB, value: v, ease: Ease::Hold }] }; + s.items = vec![ + fill_with(PathDef::rect(0, 0, 256, 256), RED, 0, [None, None, None, None, Some(tr(e1, 2_560)), Some(tr(e2, 5_120)), None]), + ]; + add( + "table-first-use", + refuse_doc(&s, |d| { + d.keys[0].interp = 3; + d.keys[2].interp = 2; + }), + "rule 2: easing tables first referenced out of order -> payload_malformed"); + add("table-duplicate", refuse_doc(&s, |d| d.tables[1] = d.tables[0]), "rule 3: two equal easing tables -> payload_malformed"); + add( + "table-unreferenced", + refuse_doc(&s, |d| { + d.keys[2].interp = 2; + }), + "rule 2: an easing table no key references -> payload_malformed", + ); + + let mut s = base(); + s.sets = vec![inline(set_a().write())]; + s.texts = vec![TextDef::new(3, "en", "AB"), TextDef::new(3, "en", "CD")]; + s.items = vec![run(0, 0, &[1, 2], 4_096, (5_000, 20_000)), run(0, 1, &[3, 4], 4_096, (5_000, 30_000))]; + add( + "set-duplicate", + refuse_doc(&s, |d| { + let set = d.sets[0]; + d.sets.push(set); + let again = d.inline.clone(); + d.inline.extend_from_slice(&again); + d.items[1].reference = 1; + d.sync_counts(); + }), + "rule 3: two sets with one SHA-256 -> payload_malformed", + ); + add( + "block-unreferenced", + refuse_doc(&s, |d| { + d.items[1].text = 0; + }), + "rule 4: a block no run or path names -> payload_malformed", + ); + + // Text-block group numbering, contiguity and ruby. + let blocks3 = |groups: [u16; 3]| { + let mut s = base(); + s.sets = vec![inline(set_a().write())]; + s.texts = (0..3) + .map(|i| { + let mut t = TextDef::new(3, "en", "A"); + t.group = groups[i]; + t + }) + .collect(); + s.items = (0..3u16).map(|i| run(0, i, &[1], 0, (5_000, 10_000 + 5_000 * i32::from(i)))).collect(); + s + }; + add("groups-in-order", blocks3([1, 1, 2]).bytes(), "rule 4: group numbers in order of first use, each group contiguous: accepted"); + add("group-number-skips", refuse_doc(&blocks3([2, 2, 0]), |_| {}), "rule 4: the first group is numbered 2 -> payload_malformed"); + add("group-not-contiguous", refuse_doc(&blocks3([1, 2, 1]), |_| {}), "rule 4: groups [1, 2, 1] -> payload_malformed"); + add("group-split-by-ungrouped", refuse_doc(&blocks3([1, 0, 1]), |_| {}), "rule 4: groups [1, 0, 1] -> payload_malformed"); + + let ruby_doc = |ruby: u16, start: u32, len: u32| { + let mut s = base(); + s.sets = vec![inline(set_a().write())]; + let base_t = TextDef::new(5, "ja", "漢字"); + let mut r = TextDef::new(6, "ja", "かん"); + r.ruby = ruby; + r.ruby_start = start; + r.ruby_len = len; + s.texts = vec![base_t, r]; + s.items = vec![ + ItemDef::Run { set: 0, paint: BLUE, text: 0, t_on: 0, t_off: TB, unit_scale: GLYPH_SCALE, slots: NO_SLOTS, glyphs: vec![(2, 0, 9_000), (3, 9_000, 9_000)], clusters: vec![(1, 0, 3), (1, 3, 3)] }, + ItemDef::Run { set: 0, paint: BLUE, text: 1, t_on: 0, t_off: TB, unit_scale: GLYPH_SCALE / 2, slots: NO_SLOTS, glyphs: vec![(5, 0, 3_000), (5, 4_000, 3_000)], clusters: vec![(1, 0, 3), (1, 3, 3)] }, + ]; + s + }; + add("ruby", ruby_doc(1, 0, 3).bytes(), "rule 4: a ruby block annotating the first character of an earlier block: accepted"); + add("ruby-names-itself", refuse_doc(&ruby_doc(2, 0, 3), |_| {}), "rule 4: a ruby link to its own block -> payload_malformed"); + add("ruby-mid-character", refuse_doc(&ruby_doc(1, 1, 2), |_| {}), "rule 4: a ruby range starting inside a character -> payload_malformed"); + add("ruby-past-string", refuse_doc(&ruby_doc(1, 3, 6), |_| {}), "rule 4: a ruby range past the base block's string -> payload_malformed"); + + let cl = |clusters: Vec<(u16, u32, u32)>, n: usize| { + let mut s = base(); + s.sets = vec![inline(set_a().write())]; + s.texts = vec![TextDef::new(3, "fr", "été")]; + let glyphs: Vec<(u16, i32, i32)> = (0..n).map(|i| (1u16, 4_096 * i as i32, 9_000)).collect(); + s.items = vec![ItemDef::Run { set: 0, paint: BLUE, text: 0, t_on: 0, t_off: TB, unit_scale: GLYPH_SCALE, slots: NO_SLOTS, glyphs, clusters }]; + s + }; + add("clusters", cl(vec![(1, 0, 2), (1, 2, 1), (1, 3, 2)], 3).bytes(), "rule 5: clusters on character boundaries covering a run: accepted"); + add("clusters-sum", refuse_doc(&cl(vec![(1, 0, 2), (1, 2, 1), (2, 3, 2)], 3), |_| {}), "rule 5: glyph counts that do not sum to n_glyphs -> payload_malformed"); + add("cluster-mid-character", refuse_doc(&cl(vec![(1, 0, 1), (1, 1, 2), (1, 3, 2)], 3), |_| {}), "rule 5: a cluster ending inside a character -> payload_malformed"); + add("cluster-past-string", refuse_doc(&cl(vec![(1, 0, 2), (1, 2, 1), (1, 3, 3)], 3), |_| {}), "rule 5: a cluster past its block's string -> payload_malformed"); + add("cluster-empty", refuse_doc(&cl(vec![(1, 0, 2), (1, 2, 1), (0, 3, 0), (1, 3, 2)], 3), |_| {}), "rule 5: a cluster with no glyph and no byte -> payload_malformed"); + + let mut s = base(); + s.texts = vec![TextDef::new(13, "en", "ornament")]; + s.items = vec![ItemDef::Path { path: PathDef::rect(0, 0, 2_560, 2_560), rule: 0, paint: RED, text: Some(0), t_on: 0, t_off: TB, unit_scale: UNIT, slots: NO_SLOTS }]; + add("path-alternative-decorative", s.bytes(), "step 5(h): a path whose text alternative is a decorative block -> payload_malformed"); + + let _ = rect; + let _ = String::new(); + v +} diff --git a/wai/wai-vector/src/vectors/cost.rs b/wai/wai-vector/src/vectors/cost.rs new file mode 100644 index 000000000..749c1b73a --- /dev/null +++ b/wai/wai-vector/src/vectors/cost.rs @@ -0,0 +1,163 @@ +//! The `cost` group (§3.4(b)): a document at exactly the ceiling `2^32 − 1` +//! (accepted) and one above it (`too_large`), a stated cost off by one +//! (`payload_malformed`), a reused path counted per use, windows that touch counted +//! once, a group's cost, and review A's three attack shapes scaled to the smallest +//! count that still exceeds the ceiling. + +use alloc::format; +use alloc::vec; +use alloc::vec::Vec; + +use super::Vector; +use super::canonical::*; +use super::sets::{notes, rect}; +use crate::bounds::COST_CEILING; +use crate::place::fill_cost; +use crate::scene::*; +use crate::wos1::{Point, Wos1}; + +/// 32 device subpixels per outline unit at 4096 × 4096: 4,096 pixels are 32,768 units. +pub const SCALE_8: u32 = 65_536 * 32; +/// A rectangle covering the 4096 × 4096 canvas. +pub fn full() -> PathDef { + PathDef::rect(0, 0, 32_767, 32_767) +} +/// A fill's cost at the full canvas with 4 points. +pub const FULL_COST: u64 = 4 * (1024 + 4096 + 4096) + 4096 * 4096; + +fn canvas_4k() -> SceneDef { + let mut s = SceneDef::new(TB, 0, TB, 4096, 4096); + s.sizes.push((4096, 4096)); + s.rates.push((25, 1)); + s +} + +fn big_fill(path: PathDef, paint: [u8; 4]) -> ItemDef { + ItemDef::Path { path, rule: 0, paint, text: None, t_on: 0, t_off: TB, unit_scale: SCALE_8, slots: NO_SLOTS } +} + +/// A path of `p` points whose device box is `bw × bh` pixels from the corner: a +/// rectangle, with the rest of its points on its left edge. +fn tuned_path(p: u64, bw: u64, bh: u64) -> PathDef { + let x = (8 * bw - 1) as i16; + let y = (8 * bh - 1) as i16; + let mut c = crate::scene::poly(&[(0, 0), (x, 0), (x, y), (0, y)]); + while (c.len() as u64) < p { + c.push(Point { x: 0, y, tag: 0 }); + } + PathDef { contours: vec![c] } +} + +/// A `(p, bw, bh)` with `c(f) = r`, searched in a fixed order. +pub fn solve(r: u64) -> (u64, u64, u64) { + for p in 5..=16_383u64 { + for bh in 1..=4096u64 { + let fixed = p * (1024 + bh); + if fixed >= r { + break; + } + let (num, den) = (r - fixed, p + bh); + if num % den == 0 { + let bw = num / den; + if (1..=4096).contains(&bw) { + return (p, bw, bh); + } + } + } + } + panic!("no tuning path for {r}"); +} + +/// 254 full-canvas fills of one path plus one tuned fill, together costing exactly +/// `target`. +pub fn at_cost(target: u64) -> SceneDef { + let mut s = canvas_4k(); + let n = 254u64; + let r = target - 4096 * 4096 - n * FULL_COST; + let (p, bw, bh) = solve(r); + debug_assert_eq!(fill_cost(p, bw, bh), r); + s.items = (0..n).map(|_| big_fill(full(), RED)).collect(); + s.items.push(big_fill(tuned_path(p, bw, bh), GREEN)); + s +} + +/// A path of `1 + 3·n` points: `n` cubics, alternately from the corner to the +/// opposite corner and back, whose controls span the canvas (review A, attack B). +pub fn cubic_comb(n: usize) -> PathDef { + let s: i16 = 32_767; + let mut c = vec![Point { x: 0, y: 0, tag: 0 }]; + for i in 0..n { + let (a, b) = if i % 2 == 0 { (0, s) } else { (s, 0) }; + c.push(Point { x: b, y: s / 3, tag: 2 }); + c.push(Point { x: a, y: 2 * (s / 3), tag: 2 }); + c.push(Point { x: b, y: b, tag: 0 }); + } + let _ = rect; + PathDef { contours: vec![c] } +} + +pub fn vectors() -> Vec { + let g = "cost"; + let mut v = Vec::new(); + let mut add = |name: &str, bytes: Vec, note: &str| v.push(Vector::wvg1(g, name, bytes, note)); + + add("ceiling", at_cost(COST_CEILING).bytes(), "254 full-canvas fills reusing one path and one tuned fill at 4096 x 4096: cost exactly 2^32 - 1, accepted"); + add("ceiling-plus-one", at_cost(COST_CEILING + 1).bytes(), "the same shape costing 2^32 -> too_large"); + let (mut d, _) = at_cost(COST_CEILING).build(); + d.sizes[0].cost -= 1; + add("ceiling-stated-low", d.write(), "the ceiling document stating 2^32 - 2 -> payload_malformed"); + + let mut s = base(); + let p = PathDef::rect(0, 0, 2_560, 2_560); + s.items = vec![fill(p.clone(), RED), fill(p.clone(), GREEN), fill(p, BLUE)]; + add("reused-path", s.bytes(), "three fills of one path, each use counted (640 x 360: 230,400 + 3 x 4,305 = 243,315): accepted"); + let (mut d, _) = s.build(); + d.sizes[0].cost += 1; + add("reused-path-stated-high", d.write(), "the same document stating its cost plus one -> payload_malformed"); + + let mut s = base(); + s.items = vec![ + ItemDef::Path { path: PathDef::rect(0, 0, 2_560, 2_560), rule: 0, paint: RED, text: None, t_on: 0, t_off: 60_000, unit_scale: UNIT, slots: NO_SLOTS }, + ItemDef::Path { path: PathDef::rect(0, 0, 2_560, 2_560), rule: 0, paint: GREEN, text: None, t_on: 60_000, t_off: TB, unit_scale: UNIT, slots: NO_SLOTS }, + ]; + add("touching-windows", s.bytes(), "two windows that touch at one tick, never active together, so the cost counts one (234,705): accepted"); + + let mut s = base(); + s.items = vec![ + group(Some((PathDef::rect(0, 0, 25_600, 12_800), 0, UNIT)), None, None, None), + fill(PathDef::rect(0, 0, 2_560, 2_560), RED), + ItemDef::End, + ItemDef::Path { path: PathDef::rect(0, 0, 2_560, 2_560), rule: 0, paint: GREEN, text: None, t_on: 1 << 30, t_off: (1 << 30) + 10, unit_scale: UNIT, slots: NO_SLOTS }, + ]; + add("group", s.bytes(), "a group with a clip costs w*h plus its clip's fill; an item outside the document's window costs nothing: accepted"); + + // Review A's attacks, at the smallest count above the ceiling. + let mut s = canvas_4k(); + s.items = (0..260).map(|_| big_fill(full(), RED)).collect(); + add("attack-a-reused-full-canvas", s.bytes(), "review A, attack A, scaled: 260 full-canvas fills reusing one 4-point path at 4096 x 4096 -> too_large"); + + let mut s = canvas_4k(); + s.items = (0..26).map(|_| big_fill(cubic_comb(5_460), RED)).collect(); + add("attack-b-reused-cubic-path", s.bytes(), "review A, attack B, scaled: 26 fills reusing a path of 16,381 points, 5,460 cubics spanning the canvas -> too_large"); + s.items.truncate(1); + add("attack-b-one-item", s.bytes(), "one fill of the same 16,381-point path alone: accepted"); + + let mut s = canvas_4k(); + let sq = Wos1::from_outlines(2048, 0, &[(7, vec![rect(0, 0, 4095, 4095)])], ¬es("synthetic-square")); + s.sets = vec![inline(sq.write())]; + s.texts = vec![TextDef::new(3, "und", "X")]; + s.items = vec![ItemDef::Run { + set: 0, + paint: RED, + text: 0, + t_on: 0, + t_off: TB, + unit_scale: 1 << 24, + slots: NO_SLOTS, + glyphs: (0..256).map(|_| (7u16, 0, 0)).collect(), + clusters: vec![(256, 0, 1)], + }]; + add("attack-c-full-canvas-glyphs", s.bytes(), "review A, attack C, scaled: one run of 256 glyph records each covering the canvas -> too_large"); + let _ = format!(""); + v +} diff --git a/wai/wai-vector/src/vectors/geometry.rs b/wai/wai-vector/src/vectors/geometry.rs new file mode 100644 index 000000000..cf4276836 --- /dev/null +++ b/wai/wai-vector/src/vectors/geometry.rs @@ -0,0 +1,121 @@ +//! The `geometry` group (§3.4(a)): the interval check accepted with an end at +//! `2^22 − 1` and refused at `2^22`, on each axis and per listed size; items never +//! active and clips checked all the same; and a document whose true range fits but +//! whose interval does not, refused, because the rule is the interval. + +use alloc::vec; +use alloc::vec::Vec; + +use super::Vector; +use super::canonical::*; +use super::sets::set_a; +use crate::scene::*; + +const EDGE: i32 = (1 << 22) - 1; +const LOW: i32 = -(1 << 22); + +/// A 100 × 100 design-subpixel square at the design size, moved by `(tx, ty)`. +fn square_at(tx: i32, ty: i32) -> SceneDef { + let mut s = base(); + s.items = vec![fill_with(PathDef::rect(0, 0, 100, 100), RED, 0, [None, None, None, None, Some(translate(tx)), Some(translate(ty)), None])]; + s +} + +/// The matrix whose true range fits and whose interval does not: `m00` falls from +/// 1 to 0 while `m01` rises from 0 to 1 over the same keys, so `m00·x + m01·y` stays +/// at `x` for the point `(x, x)`, while the interval check adds both entries' maxima. +pub fn true_range_fits(x: i16) -> SceneDef { + let mut s = base(); + let down = TrackDef::linear(3, 0, 65_536, 1_000, 0); + let up = TrackDef::linear(3, 0, 0, 1_000, 65_536); + let tx = translate(EDGE - i32::from(x)); + s.items = vec![ItemDef::Path { + path: PathDef::rect(0, 0, x, x), + rule: 0, + paint: RED, + text: None, + t_on: 0, + t_off: 1_000, + unit_scale: UNIT, + slots: [Some(down), Some(up), None, None, Some(tx), None, None], + }]; + s +} + +pub fn vectors() -> Vec { + let g = "geometry"; + let mut v = Vec::new(); + let mut add = |name: &str, s: &SceneDef, note: &str| v.push(Vector::wvg1(g, name, s.bytes(), note)); + add("x-high-edge", &square_at(EDGE - 100, 0), "the device x interval ends at 2^22 - 1: accepted"); + add("x-high-over", &square_at(EDGE - 99, 0), "the device x interval ends at 2^22 -> geometry_range"); + add("x-low-edge", &square_at(LOW, 0), "the device x interval starts at -2^22: accepted"); + add("x-low-over", &square_at(LOW - 1 + 1, -1).with_box(-1, 0), "the device x interval starts at -2^22 - 1 -> geometry_range"); + add("y-high-edge", &square_at(0, EDGE - 100), "the device y interval ends at 2^22 - 1: accepted"); + add("y-high-over", &square_at(0, EDGE - 99), "the device y interval ends at 2^22 -> geometry_range"); + let mut two = square_at(1 << 21, 0); + two.sizes = vec![(640, 360), (1280, 720)]; + add("second-size-over", &two, "within range at the design size, past 2^22 at twice it -> geometry_range (every listed size is checked)"); + let mut inactive = square_at(EDGE - 99, 0); + if let ItemDef::Path { t_on, t_off, .. } = &mut inactive.items[0] { + *t_on = 1 << 30; + *t_off = (1 << 30) + 1; + } + let mut keep = base(); + keep.items = vec![fill(PathDef::rect(0, 0, 256, 256), GREEN)]; + inactive.items.insert(0, keep.items[0].clone()); + add("inactive-item-over", &inactive, "an item never active in the document, past the range -> geometry_range (every item is checked)"); + let mut clip = base(); + clip.items = vec![ + group(Some((PathDef::rect(0, 0, 100, 100), 0, UNIT)), Some(translate(EDGE - 99)), None, None), + fill(PathDef::rect(0, 0, 256, 256), GREEN), + ItemDef::End, + ]; + add("clip-over", &clip, "a group's clip past the range -> geometry_range (clips are fill instances)"); + let mut nest = base(); + nest.items = vec![ + group(None, Some(translate(1 << 21)), None, None), + group(None, Some(translate(1 << 21)), None, None), + fill(PathDef::rect(0, 0, 100, 100), GREEN), + ItemDef::End, + ItemDef::End, + ]; + add("groups-sum-over", &nest, "two enclosing groups' translations sum past the range -> geometry_range"); + let mut glyph = base(); + glyph.sets = vec![inline(set_a().write())]; + glyph.texts = vec![TextDef::new(3, "en", "A ")]; + // Glyph 0 has no points, so its device interval is its origin alone. + glyph.items = vec![ItemDef::Run { + set: 0, + paint: BLUE, + text: 0, + t_on: 0, + t_off: TB, + unit_scale: GLYPH_SCALE, + slots: NO_SLOTS, + glyphs: vec![(1, 2_560, 20_000), (0, EDGE, 20_000)], + clusters: vec![(1, 0, 1), (1, 1, 1)], + }]; + add("empty-glyph-edge", &glyph, "a glyph with no points at origin 2^22 - 1: its interval is its origin: accepted"); + if let ItemDef::Run { glyphs, .. } = &mut glyph.items[0] { + glyphs[1].1 = EDGE + 1; + } + add("empty-glyph-over", &glyph, "the same glyph at origin 2^22 -> geometry_range"); + add("true-range-fits", &true_range_fits(10_000), "m00 falls 1 -> 0 while m01 rises 0 -> 1: the true range ends at 2^22 - 1, the interval at 2^22 - 1 + 10,000 -> geometry_range (the rule is the interval)"); + v +} + +trait WithBox { + fn with_box(self, x0: i16, y0: i16) -> SceneDef; +} + +impl WithBox for SceneDef { + /// Replace the square with one whose low corner is `(x0, y0)`, keeping its tracks. + fn with_box(mut self, x0: i16, y0: i16) -> SceneDef { + if let ItemDef::Path { path, slots, .. } = &mut self.items[0] { + *path = PathDef::rect(x0, y0, x0 + 100, y0 + 100); + slots[4] = Some(translate(LOW)); + slots[5] = Some(translate(0)); + } + self + } +} diff --git a/wai/wai-vector/src/vectors/refusals.rs b/wai/wai-vector/src/vectors/refusals.rs new file mode 100644 index 000000000..ddb410880 --- /dev/null +++ b/wai/wai-vector/src/vectors/refusals.rs @@ -0,0 +1,590 @@ +//! The `refusals` group (§2.7, §2.1): one payload per code and per check, and pairs of +//! faults whose expected code pins the order of the checks. + +use alloc::format; +use alloc::vec; +use alloc::vec::Vec; + +use super::Vector; +use super::canonical::*; +use super::sets::{set_a, set_b, set_bad_notes}; +use crate::bounds::NONE; +use crate::scene::*; +use crate::sha256::sha256; +use crate::wos1::{Point, Wos1}; +use crate::wvg1::{Cluster, Doc, GlyphRec, Header, Key, SetRec}; + +/// The payload most record-level vectors patch: a group with a clip, a translation on +/// an easing table and an opacity; a path fill with a matrix track; a run from an +/// inline set; then the group's end. +/// +/// Its pools: paths [clip, fill]; sets [A]; paints [RED, BLUE]; tracks [tx (kind 2), +/// op (kind 1), m00 (kind 3)]; one table; keys [tx: 2, op: 1, m00: 1]. +pub fn rich() -> SceneDef { + let mut s = base(); + s.sets = vec![inline(set_a().write())]; + s.texts = vec![TextDef::new(3, "en", "AB")]; + let ease = Ease::Table([0, 100, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100, 10000, 12100, 14400, 16900, 19600, 40000, 65536]); + let tx = TrackDef { kind: 2, keys: vec![KeyDef { t: 0, value: 0, ease }, KeyDef { t: TB, value: 2_560, ease: Ease::Hold }] }; + s.items = vec![ + group(Some((PathDef::rect(0, 0, 25_600, 25_600), 0, UNIT)), Some(tx), None, Some(opacity(200))), + fill_with(PathDef::rect(256, 256, 5_120, 5_120), RED, 0, [Some(TrackDef::constant(3, 65_536)), None, None, None, None, None, None]), + run(0, 0, &[1, 3], 4_096, (6_000, 20_000)), + ItemDef::End, + ]; + s +} + +fn doc(s: &SceneDef) -> Doc { + s.build().0 +} + +fn patch(s: &SceneDef, f: impl FnOnce(&mut Doc)) -> Vec { + let mut d = doc(s); + f(&mut d); + d.write() +} + +/// A header with these counts and no tables: an 80-byte payload for step 2. +fn header_only(f: impl FnOnce(&mut Header)) -> Vec { + let mut d = doc(&rich()); + f(&mut d.header); + let mut o = Vec::new(); + d.header.write(&mut o); + o +} + +fn wos1_patch(f: impl FnOnce(&mut Wos1)) -> Vec { + let mut w = set_a(); + f(&mut w); + w.write() +} + +fn wos1_bytes(f: impl FnOnce(&mut Vec)) -> Vec { + let mut b = set_a().write(); + f(&mut b); + b +} + +/// A payload whose only set is `bytes`, carried inline, with a one-glyph run. +fn with_inline_set(bytes: Vec) -> Vec { + let mut d = doc(&rich()); + d.sets[0].length = bytes.len() as u32; + d.sets[0].sha256 = sha256(&bytes); + d.inline = bytes; + d.sync_counts(); + d.write() +} + +/// A payload whose run names one held set by `sha256` and `length`. +fn with_held_set(sha: [u8; 32], length: u32) -> Vec { + let mut d = doc(&rich()); + d.sets[0] = SetRec { carriage: 0, zero: [0; 3], length, sha256: sha }; + d.inline.clear(); + d.header.held_len = length; + d.sync_counts(); + d.write() +} + +const BIG_POINTS: u16 = 16_384; + +pub fn vectors() -> Vec { + let g = "refusals"; + let mut v: Vec = Vec::new(); + let mut add = |name: &str, bytes: Vec, note: &str| v.push(Vector::wvg1(g, name, bytes, note)); + let r = rich(); + let minimal = { + let mut s = base(); + s.items = vec![fill(PathDef::rect(0, 0, 256, 256), RED)]; + s.bytes() + }; + add("rich", r.bytes(), "the payload the record-level vectors patch: accepted"); + + // ------------------------------------------------------------ step 1 + add("s1-short", minimal[..79].to_vec(), "step 1: fewer than 80 bytes, no readable header -> payload_malformed"); + add("s1-magic", { let mut b = minimal.clone(); b[3] = b'2'; b }, "step 1: magic -> payload_malformed"); + add("s1-format", { let mut b = minimal.clone(); b[4] = 2; b }, "step 1: format 2 -> payload_malformed"); + add("s1-zero", { let mut b = minimal.clone(); b[75] = 1; b }, "step 1: the header's zero field -> payload_malformed"); + add("s1-magic-before-cap", { let mut b = minimal.clone(); b[0] = b'X'; b[24] = 9; b }, "pair: a bad magic and n_sizes past its cap -> payload_malformed (step 1 before step 2)"); + + // ------------------------------------------------------------ step 2 + let caps: [(&str, fn(&mut Header)); 15] = [ + ("n_sizes", |h| h.n_sizes = 9), + ("n_rates", |h| h.n_rates = 5), + ("n_sets", |h| h.n_sets = 65), + ("n_tables", |h| h.n_tables = 33), + ("n_paints", |h| h.n_paints = 4097), + ("n_paths", |h| h.n_paths = 4097), + ("n_items", |h| h.n_items = 65_537), + ("n_keys", |h| h.n_keys = (1 << 22) + 1), + ("n_glyphs", |h| h.n_glyphs = (1 << 20) + 1), + ("n_clusters", |h| h.n_clusters = (1 << 20) + 1), + ("path_contours", |h| h.path_contours = (1 << 20) + 1), + ("path_points", |h| h.path_points = (1 << 22) + 1), + ("strings_len", |h| h.strings_len = (1 << 22) + 1), + ("inline_len", |h| h.inline_len = (1 << 25) + 1), + ("held_len", |h| h.held_len = (1 << 26) + 1), + ]; + for (name, f) in caps { + add(&format!("s2-cap-{name}"), header_only(f), &format!("step 2: {name} one past its cap -> too_large")); + } + add( + "s2-sets-total", + header_only(|h| { + h.inline_len = 1 << 25; + h.held_len = (1 << 25) + 1; + }), + "step 2: inline_len + held_len = 2^26 + 1, each within its own cap -> too_large", + ); + add( + "s2-exact-length", + header_only(|h| { + h.n_keys = 1 << 22; + h.path_points = 1 << 22; + }), + "step 2: every count within its cap, the computed exact length above 2^26 -> too_large", + ); + add( + "s2-cap-before-range", + header_only(|h| { + h.n_items = 0; + h.n_keys = (1 << 22) + 1; + }), + "pair: n_items = 0 (a step 4 range) and n_keys past its cap -> too_large (step 2 before step 4)", + ); + add( + "s2-cap-before-length", + { let mut b = minimal.clone(); b[25] = 5; b.push(0); b }, + "pair: n_rates past its cap and a trailing byte -> too_large (step 2 before step 3)", + ); + // Review A, attack D: 64 held sets of the largest WOS1. + let attack_d = |n: usize, len: u32| { + let mut d = doc(&rich()); + d.sets = (0..n).map(|i| SetRec { carriage: 0, zero: [0; 3], length: len, sha256: sha256(&(i as u32).to_le_bytes()) }).collect(); + d.inline.clear(); + // One run per set, so every set is referenced, in order. + let run = d.items[2]; + let (gl, cl) = (d.glyphs.clone(), d.clusters.clone()); + for i in 1..n { + let mut it = run; + it.reference = i as u16; + d.items.insert(2 + i, it); + d.glyphs.extend_from_slice(&gl); + d.clusters.extend_from_slice(&cl); + } + d.header.held_len = (n as u64 * u64::from(len)).min(u64::from(u32::MAX)) as u32; + d.sync_counts(); + d.write() + }; + add("attack-d-64-held-sets", attack_d(64, 31_457_312), "review A, attack D: 64 held sets of the largest WOS1 (held_len past 2^26) -> too_large"); + add("attack-d-3-held-sets", attack_d(3, 1 << 25), "three held sets of 2^25 bytes: held_len = 3 * 2^25 > 2^26 -> too_large"); + add("attack-d-2-held-sets", attack_d(2, 1 << 25), "two held sets of 2^25 bytes: held_len = 2^26, within the cap; the sink holds neither -> outline_not_held"); + + // ------------------------------------------------------------ step 3 + add("s3-trailing-byte", { let mut b = minimal.clone(); b.push(0); b }, "step 3: one trailing byte -> payload_malformed"); + add("s3-truncated", minimal[..minimal.len() - 1].to_vec(), "step 3: one byte short -> payload_malformed"); + + // ------------------------------------------------------------ step 4: the header + let hdr: [(&str, fn(&mut Header), &str); 11] = [ + ("tb-zero", |h| h.tb = 0, "tb = 0"), + ("tb-over", |h| h.tb = (1 << 20) + 1, "tb = 2^20 + 1"), + ("t0-over", |h| h.t0 = 1 << 31, "t0 = 2^31"), + ("dur-zero", |h| h.dur = 0, "dur = 0"), + ("dur-over", |h| { + h.t0 = 1000; + h.dur = (1 << 31) - 999; + }, "t0 + dur = 2^31 + 1"), + ("design-w-small", |h| h.design_w = 15, "design_w = 15"), + ("design-h-large", |h| h.design_h = 4097, "design_h = 4097"), + ("tb-before-record", |h| { + h.tb = 0; + h.zero = [0; 8]; + }, "tb = 0"), + ("t0-before-dur", |h| { + h.t0 = 1 << 31; + h.dur = 0; + }, "t0 = 2^31 and dur = 0"), + ("design-w-before-h", |h| { + h.design_w = 4097; + h.design_h = 15; + }, "both design sides"), + ("tb-not-divisible", |h| h.tb = 119_999, "tb = 119,999 (a header value in range; the RATE's P is not an integer)"), + ]; + for (name, f, what) in hdr { + let code = if name == "tb-not-divisible" { "field_range at RATE.den" } else { "field_range" }; + let mut d = doc(&r); + f(&mut d.header); + if name == "tb-before-record" { + d.sets[0].zero = [1, 0, 0]; + } + add(&format!("s4-{name}"), d.write(), &format!("step 4, the header: {what} -> {code}")); + } + add("s4-n-sizes-zero", patch(&r, |d| { d.sizes.clear(); d.sync_counts(); }), "step 4: n_sizes = 0 -> field_range"); + add("s4-n-rates-zero", patch(&r, |d| { d.rates.clear(); d.sync_counts(); }), "step 4: n_rates = 0 -> field_range"); + add("s4-n-items-zero", patch(&r, |d| { d.items.clear(); d.glyphs.clear(); d.clusters.clear(); d.sync_counts(); }), "step 4: n_items = 0 -> field_range"); + + // ------------------------------------------------------------ step 4: records + add("s4-size-w-small", patch(&r, |d| d.sizes[0].w = 15), "SIZE.w = 15 -> field_range"); + add("s4-size-w-over-4x", patch(&r, |d| { d.sizes[0].w = 2561; d.sizes[0].h = 1440; }), "SIZE.w above 4 * design_w -> field_range"); + add("s4-size-w-under-8th", patch(&r, |d| { d.sizes[0].w = 79; d.sizes[0].h = 45; }), "SIZE.w below design_w / 8 -> field_range"); + add("s4-size-aspect", patch(&r, |d| d.sizes[0].h = 361), "SIZE.h off the design aspect -> field_range"); + add("s4-rate-num-zero", patch(&r, |d| d.rates[0].num = 0), "RATE.num = 0 -> field_range"); + add("s4-rate-den-zero", patch(&r, |d| d.rates[0].den = 0), "RATE.den = 0 -> field_range"); + add("s4-rate-gcd", patch(&r, |d| d.rates[0] = crate::wvg1::Rate { num: 50, den: 2 }), "RATE 50/2: gcd 2 -> field_range"); + add("s4-rate-over-240", patch(&r, |d| d.rates[0] = crate::wvg1::Rate { num: 241, den: 1 }), "RATE 241/1 above 240 fps -> field_range"); + add("s4-rate-p-not-integral", patch(&r, |d| d.rates[0] = crate::wvg1::Rate { num: 7, den: 1 }), "RATE 7/1 at tb = 120000: P not an integer -> field_range"); + add("s4-set-carriage", patch(&r, |d| d.sets[0].carriage = 2), "SET.carriage = 2 -> field_range"); + add("s4-set-zero", patch(&r, |d| d.sets[0].zero = [0, 0, 1]), "SET zero field -> payload_malformed"); + add("s4-set-length-small", patch(&r, |d| d.sets[0].length = 31), "SET.length = 31 -> field_range"); + add("s4-set-length-large", patch(&r, |d| d.sets[0].length = (1 << 25) + 1), "SET.length = 2^25 + 1 -> field_range"); + add("s4-set-carriage-before-zero", patch(&r, |d| { d.sets[0].carriage = 2; d.sets[0].zero = [1, 0, 0]; }), "pair: carriage = 2 then a zero field -> field_range (offset order)"); + add("s4-set-zero-before-length", patch(&r, |d| { d.sets[0].zero = [1, 0, 0]; d.sets[0].length = 31; }), "pair: a zero field then length = 31 -> payload_malformed (offset order)"); + add("s4-table-e0", patch(&r, |d| d.tables[0].e[0] = 1), "TABLE E[0] = 1 -> field_range"); + add("s4-table-e16", patch(&r, |d| d.tables[0].e[16] = 65_535), "TABLE E[16] = 65535 -> field_range"); + add("s4-table-over", patch(&r, |d| d.tables[0].e[5] = 65_537), "TABLE E[5] = 65537 -> field_range"); + add("s4-paint-over-alpha", patch(&r, |d| d.paints[0].rgba = [200, 30, 30, 199]), "PAINT r > a -> field_range"); + add("s4-track-kind-zero", patch(&r, |d| d.tracks[0].kind = 0), "TRACK.kind = 0 -> field_range"); + add("s4-track-kind-four", patch(&r, |d| d.tracks[0].kind = 4), "TRACK.kind = 4 -> field_range"); + add("s4-track-zero", patch(&r, |d| d.tracks[1].zero2 = 1), "TRACK zero field -> payload_malformed"); + add("s4-track-n-keys-zero", patch(&r, |d| d.tracks[1].n_keys = 0), "TRACK.n_keys = 0 -> field_range"); + add("s4-track-n-keys-over", patch(&r, |d| d.tracks[1].n_keys = 4097), "TRACK.n_keys = 4097 -> field_range"); + add("s4-key-t", patch(&r, |d| d.keys[1].t = 1 << 31), "KEY.t = 2^31 -> field_range"); + add("s4-key-interp", patch(&r, |d| d.keys[0].interp = 3), "KEY.interp = 2 + 1 with one table -> field_range"); + add("s4-key-zero", patch(&r, |d| d.keys[2].zero = [0, 1, 0]), "KEY zero field -> payload_malformed"); + add( + "s4-key-interp-before-sum", + patch(&r, |d| { + d.keys[0].interp = 3; + d.sets[0].carriage = 0; + }), + "pair: KEY.interp = 2 + j with j >= n_tables, and an inline set marked held (a step 5(a) sum) -> field_range (the index range is the record pass's)", + ); + add("s4-path-n-contours-zero", patch(&r, |d| d.paths[1].n_contours = 0), "PATH.n_contours = 0 -> field_range"); + add("s4-path-points-limit", patch(&r, |d| d.paths[1].n_points = BIG_POINTS), "PATH.n_points = 16,384 -> points_limit"); + add("s4-path-n-points-zero", patch(&r, |d| d.paths[1].n_points = 0), "PATH.n_points = 0 -> field_range"); + add("s4-path-contours-over-points", patch(&r, |d| d.paths[1].n_contours = 5), "PATH.n_contours above n_points -> field_range"); + add("s4-path-zero", patch(&r, |d| d.paths[1].zero = 1), "PATH zero field -> payload_malformed"); + add("s4-path-points-limit-before-zero", patch(&r, |d| { d.paths[1].n_points = BIG_POINTS; d.paths[1].zero = 1; }), "pair: n_points = 16,384 then a zero field -> points_limit (offset order)"); + add("s4-path-point-tag", patch(&r, |d| d.path_points[5].tag = 3), "PATH_POINT.tag = 3 -> field_range"); + add("s4-text-purpose-zero", patch(&r, |d| d.texts[0].purpose = 0), "TEXT.purpose = 0 -> field_range"); + add("s4-text-dir", patch(&r, |d| d.texts[0].dir = 2), "TEXT.dir = 2 -> field_range"); + add("s4-text-lang-len-zero", patch(&r, |d| d.texts[0].lang_len = 0), "TEXT.lang_len = 0 -> field_range"); + add("s4-text-lang-len-over", patch(&r, |d| d.texts[0].lang_len = 64), "TEXT.lang_len = 64 -> field_range"); + add("s4-text-mode", patch(&r, |d| d.texts[0].mode = 3), "TEXT.mode = 3 -> field_range"); + add("s4-text-ruby-over", patch(&r, |d| { d.texts[0].ruby = 2; d.texts[0].ruby_len = 1; }), "TEXT.ruby above n_texts -> field_range"); + add("s4-text-ruby-start", patch(&r, |d| d.texts[0].ruby_start = 1), "TEXT.ruby_start with no ruby -> field_range"); + add("s4-text-ruby-len-zero", patch(&r, |d| d.texts[0].ruby = 1), "TEXT ruby set with ruby_len = 0 -> field_range"); + add("s4-text-str-len-zero", patch(&r, |d| d.texts[0].str_len = 0), "TEXT.str_len = 0 -> field_range"); + add("s4-text-str-len-over", patch(&r, |d| d.texts[0].str_len = 4097), "TEXT.str_len = 4097 -> field_range"); + add( + "s4-item-kind-four", + patch(&r, |d| { + d.items[1].kind = 4; + d.items[1].reference = 0; + d.sets[0].carriage = 0; + }), + "pair: ITEM.kind = 4 with ref = 0, and an inline set marked held (a step 5(a) sum) -> field_range (the record pass first)", + ); + add("s4-item-rule-path", patch(&r, |d| d.items[1].rule = 2), "ITEM.rule = 2 on a path fill -> field_range"); + add("s4-item-rule-run", patch(&r, |d| d.items[2].rule = 1), "ITEM.rule = 1 on a run -> field_range"); + add( + "s4-item-rule-no-clip", + patch(&r, |d| { + d.items[0].reference = NONE; + d.items[0].unit_scale = 0; + d.items[0].rule = 1; + }), + "a group begin with no clip and rule 1 -> field_range (at ref)", + ); + add("s4-item-zero2", patch(&r, |d| d.items[1].zero2 = 1), "ITEM zero@2 -> payload_malformed"); + add("s4-item-zero2-before-ref", patch(&r, |d| { d.items[1].zero2 = 1; d.items[1].reference = 2; }), "pair: zero@2 then ref out of range -> payload_malformed (offset order)"); + add("s4-item-rule-before-zero2", patch(&r, |d| { d.items[1].rule = 2; d.items[1].zero2 = 1; }), "pair: rule out of range then zero@2 -> field_range (offset order)"); + add("s4-item-ref-path", patch(&r, |d| d.items[1].reference = 2), "a path fill's ref = n_paths -> field_range"); + add("s4-item-ref-set", patch(&r, |d| d.items[2].reference = 1), "a run's ref = n_sets -> field_range"); + add("s4-item-paint-begin", patch(&r, |d| d.items[0].paint = 0), "a group begin's paint other than 0xFFFF -> field_range"); + add("s4-item-paint-end", patch(&r, |d| d.items[3].paint = 1), "a group end's paint other than 0 -> field_range"); + add("s4-item-text-path", patch(&r, |d| d.items[1].text = 1), "a path fill's text = n_texts -> field_range"); + add("s4-item-text-run", patch(&r, |d| d.items[2].text = NONE), "a run's text 0xFFFF -> field_range"); + add("s4-item-zero10", patch(&r, |d| d.items[2].zero10 = 1), "ITEM zero@10 -> payload_malformed"); + add("s4-item-glyphs-path", patch(&r, |d| d.items[1].n_glyphs = 1), "a path fill with n_glyphs = 1 -> field_range"); + add("s4-item-glyphs-run-zero", patch(&r, |d| d.items[2].n_glyphs = 0), "a run with n_glyphs = 0 -> field_range"); + add("s4-item-glyphs-run-over", patch(&r, |d| d.items[2].n_glyphs = 4097), "a run with n_glyphs = 4097 -> field_range"); + add("s4-item-clusters-over", patch(&r, |d| d.items[2].n_clusters = 8193), "a run with n_clusters = 8193 -> field_range"); + add("s4-item-t-on", patch(&r, |d| d.items[1].t_on = 1 << 31), "ITEM.t_on = 2^31 -> field_range"); + add("s4-item-t-off-order", patch(&r, |d| d.items[1].t_off = d.items[1].t_on), "ITEM.t_off = t_on -> field_range"); + add("s4-item-t-off-over", patch(&r, |d| d.items[1].t_off = (1 << 31) + 1), "ITEM.t_off = 2^31 + 1 -> field_range"); + add("s4-item-unit-scale-zero", patch(&r, |d| d.items[1].unit_scale = 0), "a path fill's unit_scale = 0 -> field_range"); + add("s4-item-unit-scale-over", patch(&r, |d| d.items[2].unit_scale = (1 << 24) + 1), "unit_scale = 2^24 + 1 -> field_range"); + add("s4-item-unit-scale-clip", patch(&r, |d| d.items[0].unit_scale = 0), "a group begin with a clip and unit_scale = 0 -> field_range"); + add("s4-item-matrix-begin", patch(&r, |d| d.items[0].slots[0] = 2), "a group begin with a matrix slot -> field_range"); + add("s4-item-slot-range", patch(&r, |d| d.items[1].slots[4] = 3), "a slot naming track n_tracks -> field_range"); + add("s4-item-end-slot", patch(&r, |d| d.items[3].slots[6] = 1), "a group end's slot other than 0 -> field_range"); + add("s4-item-zero42", patch(&r, |d| d.items[3].zero42 = [0, 0, 0, 0, 0, 1]), "ITEM zero@42 -> payload_malformed"); + add("s4-glyph-zero", patch(&r, |d| d.glyphs[1].zero = 1), "GLYPH zero field -> payload_malformed"); + add("s4-glyph-x", patch(&r, |d| d.glyphs[0].x = 1 << 23), "GLYPH.x = 2^23 -> field_range"); + add("s4-glyph-y", patch(&r, |d| d.glyphs[0].y = -(1 << 23) - 1), "GLYPH.y = -2^23 - 1 -> field_range"); + add("s4-cluster-zero", patch(&r, |d| d.clusters[1].zero = 1), "CLUSTER zero field -> payload_malformed"); + add("s4-header-before-record", patch(&r, |d| { d.header.dur = 0; d.items[1].kind = 7; }), "pair: dur = 0 and an ITEM.kind = 7 -> field_range (the header first)"); + + // ------------------------------------------------------------ step 5(a): the sum rules + add("s5a-inline-sum", patch(&r, |d| d.sets[0].carriage = 0), "5(a): an inline set marked held: the inline lengths do not sum to inline_len -> payload_malformed"); + add("s5a-held-sum", patch(&r, |d| d.header.held_len = 32), "5(a): held_len = 32 with no held set -> payload_malformed"); + add("s5a-track-keys-sum", patch(&r, |d| { d.keys.push(Key { t: 0, value: 0, interp: 0, zero: [0; 3] }); d.sync_counts(); }), "5(a): a KEY no track owns -> payload_malformed"); + add("s5a-path-contours-sum", patch(&r, |d| { d.path_ends.push(0); d.sync_counts(); }), "5(a), new: a PATH_END no path owns -> payload_malformed"); + add("s5a-path-points-sum", patch(&r, |d| { d.path_points.push(Point { x: 0, y: 0, tag: 0 }); d.sync_counts(); }), "5(a), new: a PATH_POINT no path owns -> payload_malformed"); + add("s5a-strings-sum", patch(&r, |d| { d.strings.push(b'Z'); d.sync_counts(); }), "5(a), new: a STRINGS byte no block owns -> payload_malformed"); + add("s5a-glyphs-sum", patch(&r, |d| { d.glyphs.push(GlyphRec { gid: 1, zero: 0, x: 0, y: 0 }); d.sync_counts(); }), "5(a), new: a GLYPH no run owns -> payload_malformed"); + add("s5a-clusters-sum", patch(&r, |d| { d.clusters.push(Cluster { glyph_count: 1, zero: 0, byte_first: 0, byte_len: 1 }); d.sync_counts(); }), "5(a), new: a CLUSTER no run owns -> payload_malformed"); + add("s5a-sum-before-typing", patch(&r, |d| { d.sets[0].carriage = 0; d.keys[2].value = 256; }), "pair: a sum rule and an opacity key of 256 -> payload_malformed (5(a) before 5(c))"); + + // ------------------------------------------------------------ step 5(b): ordering + add("s5b-sizes-order", patch(&r, |d| { d.sizes.insert(0, crate::wvg1::Size { w: 1280, h: 720, cost: 0 }); d.sync_counts(); }), "5(b): SIZEs not ascending by w -> payload_malformed"); + add("s5b-sizes-equal", patch(&r, |d| { let s = d.sizes[0]; d.sizes.push(s); d.sync_counts(); }), "5(b): two SIZEs of one width -> payload_malformed"); + add("s5b-rates-order", patch(&r, |d| { d.rates.insert(0, crate::wvg1::Rate { num: 30, den: 1 }); d.sync_counts(); }), "5(b): RATEs not ascending -> payload_malformed"); + add("s5b-keys-order", patch(&r, |d| d.keys[1].t = 0), "5(b): two keys of a track at one tick -> payload_malformed"); + add("s5b-last-key-interp", patch(&r, |d| d.keys[1].interp = 1), "5(b): a track's last key with interp 1 -> payload_malformed"); + + // ------------------------------------------------------------ step 5(c): typing + add("s5c-opacity-key", patch(&r, |d| d.keys[2].value = 256), "5(c): an opacity key of 256 -> field_range"); + add("s5c-translation-key", patch(&r, |d| d.keys[1].value = (1 << 22) + 1), "5(c): a translation key of 2^22 + 1 -> field_range"); + add("s5c-matrix-key", patch(&r, |d| d.keys[3].value = (1 << 20) + 1), "5(c): a matrix key of 2^20 + 1 -> field_range"); + add("s5c-slot-kind", patch(&r, |d| d.items[1].slots[0] = 1), "5(c): a matrix slot naming an opacity track -> field_range"); + add("s5c-typing-before-groups", patch(&r, |d| { d.keys[2].value = 256; d.items.pop(); d.sync_counts(); }), "pair: an opacity key of 256 and a group left open -> field_range (5(c) before 5(d))"); + + // ------------------------------------------------------------ step 5(d): groups + let end = || doc(&r).items[3]; + add("s5d-end-first", patch(&r, |d| { let e = end(); d.items.insert(0, e); d.index(); d.sync_counts(); }), "5(d): a group end with no group open -> payload_malformed"); + add("s5d-open", patch(&r, |d| { d.items.pop(); d.sync_counts(); }), "5(d): a group open after the last item -> payload_malformed"); + let deep = { + let mut s = base(); + s.items = vec![group(None, None, None, None); 5]; + s.items.push(fill(PathDef::rect(0, 0, 256, 256), RED)); + s.items.extend(vec![ItemDef::End; 5]); + s.bytes() + }; + add("s5d-depth-five", deep, "5(d): groups nested five deep -> payload_malformed"); + + // ------------------------------------------------------------ step 5(e): paths + add("s5e-ends-last", patch(&r, |d| d.path_ends[1] = 2), "5(e): a path's last contour end below n_points - 1 -> payload_malformed"); + add("s5e-grammar", patch(&r, |d| d.path_points[4].tag = 1), "5(e): a contour whose first point is a control -> payload_malformed"); + add("s5e-grammar-two-quads", patch(&r, |d| { d.path_points[5].tag = 1; d.path_points[6].tag = 1; }), "5(e): two quadratic controls in a row (implied points are stored) -> payload_malformed"); + add("s5e-box", patch(&r, |d| d.paths[1].bbox[2] += 1), "5(e): a path box one unit too wide -> payload_malformed"); + let two = { + let mut s = base(); + s.items = vec![fill(PathDef { contours: vec![crate::scene::poly(&[(0, 0), (256, 0), (256, 256)]), crate::scene::poly(&[(512, 0), (768, 0), (768, 256)])] }, RED)]; + s + }; + add("s5e-ends-order", patch(&two, |d| d.path_ends[0] = 5), "5(e): contour ends not increasing -> payload_malformed"); + + // ------------------------------------------------------------ step 5(f): strings + let lang = |tag: &str| { + let mut s = rich(); + s.texts[0].lang = tag.as_bytes().to_vec(); + s.bytes() + }; + add("s5f-tag-leading-hyphen", lang("-en"), "5(f): a language tag with a leading hyphen -> payload_malformed"); + add("s5f-tag-double-hyphen", lang("en--gb"), "5(f): a doubled hyphen -> payload_malformed"); + add("s5f-tag-trailing-hyphen", lang("en-"), "5(f): a trailing hyphen -> payload_malformed"); + add("s5f-tag-underscore", lang("en_GB"), "5(f): an underscore -> payload_malformed"); + let text = |b: &[u8]| { + let mut s = rich(); + s.texts[0].string = b.to_vec(); + s.bytes() + }; + add("s5f-string-c0", text(b"A\x01"), "5(f): a C0 control U+0001 -> payload_malformed"); + add("s5f-string-del", text(b"A\x7f"), "5(f): U+007F -> payload_malformed"); + add("s5f-string-c1", text(b"\xc2\x85"), "5(f): a C1 control U+0085 -> payload_malformed"); + add("s5f-string-utf8", text(b"A\xff"), "5(f): a byte that is not UTF-8 -> payload_malformed"); + add("s5f-string-overlong", text(b"\xc0\x81"), "5(f): an overlong encoding -> payload_malformed"); + add("s5f-string-surrogate", text(b"\xed\xa0\x80A"), "5(f): an encoded surrogate -> payload_malformed"); + add("s5f-string-newline", text(b"A\nB"), "5(f): U+000A is the one C0 control allowed: accepted"); + + // ------------------------------------------------------------ step 6: sets + let b_bytes = set_b().write(); + add("s6-held-not-held", with_held_set(sha256(b"no set has this digest"), 40), "6: a held set the sink cannot obtain -> outline_not_held"); + add("s6-held-one-byte-longer", with_held_set(sha256(&b_bytes), b_bytes.len() as u32 - 1), "6: a held set one byte longer than its length; the sink reads at most length + 1 bytes -> outline_mismatch"); + add("s6-held-shorter", with_held_set(sha256(&b_bytes), b_bytes.len() as u32 + 1), "6: a held set one byte shorter than its length -> outline_mismatch"); + add("s6-held-malformed", with_held_set(sha256(&set_bad_notes()), set_bad_notes().len() as u32), "6: a held set that hashes right and is not a valid WOS1 -> outline_malformed"); + add( + "s6-inline-hash", + patch(&r, |d| { + let n = d.inline.len(); + d.inline[n - 1] ^= 1; + }), + "6: an inline set whose bytes do not hash to its record -> outline_mismatch", + ); + add("s6-inline-malformed", with_inline_set(wos1_bytes(|b| b[0] = b'X')), "6: an inline set with a bad magic -> outline_malformed"); + add("s6-inline-points-limit", with_inline_set(wos1_patch(|w| w.glyphs[1].n_points = BIG_POINTS)), "6: an inline set with a glyph of 16,384 points -> points_limit"); + add("s6-inline-too-large", with_inline_set(wos1_bytes(|b| b[12..16].copy_from_slice(&65_537u32.to_le_bytes()))), "6: an inline set with n_glyphs past its cap -> too_large"); + let two_sets = |first_held: bool| { + let mut d = doc(&rich()); + let bad = wos1_bytes(|b| b[0] = b'X'); + let missing = SetRec { carriage: 0, zero: [0; 3], length: 40, sha256: sha256(b"missing") }; + let bad_rec = SetRec { carriage: 1, zero: [0; 3], length: bad.len() as u32, sha256: sha256(&bad) }; + d.sets = if first_held { vec![missing, bad_rec] } else { vec![bad_rec, missing] }; + d.inline = bad; + d.header.held_len = 40; + // A second run names the second set, so every set is referenced in order. + let mut it = d.items[2]; + it.reference = 1; + d.items.insert(3, it); + let gl: Vec = d.glyphs.clone(); + d.glyphs.extend(gl); + let cl: Vec = d.clusters.clone(); + d.clusters.extend(cl); + d.sync_counts(); + d.write() + }; + add("s6-order-held-first", two_sets(true), "pair: set 0 not held, set 1 malformed -> outline_not_held (sets in SET order)"); + add("s6-order-inline-first", two_sets(false), "pair: set 0 malformed, set 1 not held -> outline_malformed (each set's checks before the next set)"); + + // ------------------------------------------------------------ step 7 + add("s7-glyph-missing", patch(&r, |d| d.glyphs[1].gid = 8), "7: a glyph record whose gid the run's set lacks -> glyph_missing"); + add( + "s7-before-geometry", + patch(&r, |d| { + d.glyphs[1].gid = 8; + d.glyphs[0].x = (1 << 23) - 1; + }), + "pair: a missing glyph and a glyph far off the canvas -> glyph_missing (step 7 before step 8)", + ); + + // ------------------------------------------------------------ review A, attack E + let attack_e = { + let n = 512usize; + let mut s = base(); + let tracks: Vec = (0..n) + .map(|i| TrackDef { + kind: 2, + keys: vec![ + KeyDef { t: 0, value: 0, ease: Ease::Hold }, + KeyDef { t: 1, value: 0, ease: Ease::Hold }, + KeyDef { t: 2, value: 0, ease: Ease::Hold }, + KeyDef { t: 3, value: i as i32, ease: Ease::Hold }, + ], + }) + .collect(); + s.items = (0..n / 2) + .map(|i| fill_with(PathDef::rect(0, 0, 256, 256), RED, 0, [None, None, None, None, Some(tracks[2 * i].clone()), Some(tracks[2 * i + 1].clone()), None])) + .collect(); + let mut d = s.build().0; + // The last two tracks made equal: a duplicate found only by comparing all keys. + let last = d.tracks.len() - 1; + let k = d.ix.track_key0[last] as usize + 3; + d.keys[k].value -= 1; + d.write() + }; + add("attack-e-duplicate-tracks", attack_e, "review A, attack E, scaled: 512 tracks equal but for their last key, two of them equal -> payload_malformed, found by sorting"); + + // ------------------------------------------------------------ WOS1 on its own (§2.1) + let mut w = |name: &str, bytes: Vec, note: &str| v.push(Vector::wos1(g, name, bytes, note)); + w("wos1-set-a", set_a().write(), "an outline set with lines, quadratics, cubics, a hole, an empty glyph and a one-point contour: accepted"); + w("wos1-short", set_a().write()[..31].to_vec(), "check 1: fewer than 32 bytes -> outline_malformed"); + w("wos1-magic", wos1_bytes(|b| b[0] = b'X'), "check 1: magic -> outline_malformed"); + w("wos1-format", wos1_patch(|w| w.format = 2), "check 1: format 2 -> outline_malformed"); + w("wos1-zero", wos1_patch(|w| w.zero = 1), "check 1: the zero field -> outline_malformed"); + w("wos1-flags", wos1_patch(|w| w.flags = 2), "check 1: a reserved flag bit -> outline_malformed"); + w("wos1-n-glyphs-zero", wos1_bytes(|b| b[12..16].copy_from_slice(&0u32.to_le_bytes())), "check 2: n_glyphs = 0 -> outline_malformed"); + w("wos1-n-glyphs-cap", wos1_bytes(|b| b[12..16].copy_from_slice(&65_537u32.to_le_bytes())), "check 2: n_glyphs = 65,537 -> too_large"); + w("wos1-points-cap", wos1_bytes(|b| b[16..20].copy_from_slice(&((1u32 << 22) + 1).to_le_bytes())), "check 2: points_total = 2^22 + 1 -> too_large"); + w("wos1-contours-cap", wos1_bytes(|b| b[20..24].copy_from_slice(&((1u32 << 22) + 1).to_le_bytes())), "check 2: contours_total = 2^22 + 1 -> too_large"); + w("wos1-notes-cap", wos1_bytes(|b| b[24..28].copy_from_slice(&((1u32 << 20) + 1).to_le_bytes())), "check 2: notes_len = 2^20 + 1 -> too_large"); + w("wos1-notes-zero", wos1_bytes(|b| b[24..28].copy_from_slice(&0u32.to_le_bytes())), "check 2: notes_len = 0 -> outline_malformed"); + w( + "wos1-zero-glyphs-before-points-cap", + wos1_bytes(|b| { + b[12..16].copy_from_slice(&0u32.to_le_bytes()); + b[16..20].copy_from_slice(&((1u32 << 22) + 1).to_le_bytes()); + }), + "pair: n_glyphs = 0 then points_total past its cap -> outline_malformed (field order)", + ); + w("wos1-cap-before-length", wos1_bytes(|b| { b[12..16].copy_from_slice(&65_537u32.to_le_bytes()); b.push(0); }), "pair: n_glyphs past its cap and a trailing byte -> too_large (check 2 before 3)"); + w("wos1-length", wos1_bytes(|b| b.push(b'\n')), "check 3: one trailing byte -> outline_malformed"); + w("wos1-points-limit", wos1_patch(|w| w.glyphs[1].n_points = BIG_POINTS), "check 4: a glyph of 16,384 points -> points_limit"); + w("wos1-contours-over-points", wos1_patch(|w| w.glyphs[1].n_contours = 5), "check 4: n_contours above n_points -> outline_malformed"); + w("wos1-points-no-contour", wos1_patch(|w| w.glyphs[1].n_contours = 0), "check 4: points and no contour -> outline_malformed"); + w("wos1-glyph-zero", wos1_patch(|w| w.glyphs[3].zero = 1), "check 4: a glyph record's zero field -> outline_malformed"); + w( + "wos1-points-limit-before-gid-order", + wos1_patch(|w| { + w.glyphs[1].n_points = BIG_POINTS; + w.glyphs[2].gid = w.glyphs[1].gid; + }), + "pair: a glyph of 16,384 points and gids out of order -> points_limit (check 4 before check 5)", + ); + w( + "wos1-zero-before-points-limit", + wos1_patch(|w| { + w.glyphs[0].zero = 1; + w.glyphs[1].n_points = BIG_POINTS; + }), + "pair: glyph 0's zero field and glyph 1's 16,384 points -> outline_malformed (records in order)", + ); + w( + "wos1-points-limit-before-zero", + wos1_patch(|w| { + w.glyphs[1].n_points = BIG_POINTS; + w.glyphs[1].zero = 1; + }), + "pair: one glyph with 16,384 points and a zero field -> points_limit (n_points first within a record)", + ); + w("wos1-gid-order", wos1_patch(|w| w.glyphs[2].gid = w.glyphs[1].gid), "check 5: gids not strictly increasing -> outline_malformed"); + w("wos1-sums", wos1_patch(|w| w.glyphs[1].n_points = 5), "check 6: n_points not summing to points_total -> outline_malformed"); + w( + "wos1-ends-order", + wos1_patch(|w| { + let e = w.glyphs[2].first_end as usize; + w.ends[e] = 3; + w.ends[e + 1] = 3; + }), + "check 7: contour ends not increasing -> outline_malformed", + ); + w( + "wos1-ends-last", + wos1_patch(|w| { + let e = w.glyphs[1].first_end as usize; + w.ends[e] = 2; + }), + "check 7: the last contour end below n_points - 1 -> outline_malformed", + ); + w("wos1-tag", wos1_patch(|w| w.points[2].tag = 3), "check 8: a tag of 3 -> outline_malformed"); + w( + "wos1-grammar", + wos1_patch(|w| { + let p = w.glyphs[4].first_point as usize; + w.points[p + 3].tag = 2; + }), + "check 9: three cubic controls in a row -> outline_malformed", + ); + w( + "wos1-grammar-one-point-control", + wos1_patch(|w| { + let p = w.glyphs[6].first_point as usize; + w.points[p].tag = 1; + }), + "check 9: a one-point contour whose point is a control (P_0 is on-curve in every contour) -> outline_malformed", + ); + w("wos1-box", wos1_patch(|w| w.glyphs[1].ymin -= 1), "check 10: a glyph box one unit too tall -> outline_malformed"); + w("wos1-box-empty-glyph", wos1_patch(|w| w.glyphs[0].xmax = 1), "check 10: a glyph with no points and a nonzero box -> outline_malformed"); + w( + "wos1-notes-utf8", + wos1_patch(|w| { + let n = w.notes.len(); + w.notes[n - 1] = 0xC3; + }), + "check 11: notes that end inside a UTF-8 sequence -> outline_malformed", + ); + let big = Wos1::from_outlines( + 2048, + 0, + &[(1, vec![(0..16_383).map(|i| Point { x: (i % 2) as i16 * 100, y: (i / 2) as i16 - 4096, tag: 0 }).collect()])], + &super::sets::notes("synthetic-points-cap"), + ); + w("wos1-points-16383", big.write(), "check 4: a glyph of exactly 16,383 points: accepted"); + let mut over = big.clone(); + over.points.push(Point { x: 0, y: 0, tag: 0 }); + over.glyphs[0].n_points += 1; + over.ends[0] += 1; + w("wos1-points-16384", over.write(), "check 4: the same glyph with one more point, 16,384 -> points_limit"); + v +} diff --git a/wai/wai-vector/src/vectors/sets.rs b/wai/wai-vector/src/vectors/sets.rs new file mode 100644 index 000000000..482e8bb22 --- /dev/null +++ b/wai/wai-vector/src/vectors/sets.rs @@ -0,0 +1,100 @@ +//! The outline sets the vectors name, drawn here from formulas, and the fuzz seeds. + +use alloc::string::String; +use alloc::vec; +use alloc::vec::Vec; + +use crate::scene::{poly, reverse_contour}; +use crate::wos1::{Point, Wos1}; + +/// The notes of a set generated here: `key=value` lines, a blank line, then the +/// licence statement (§2.1). +pub fn notes(name: &str) -> Vec { + let mut s = String::from("name="); + s.push_str(name); + s.push_str( + "\nsource=generated by wai-vector vectors gen from formulas\nlicence=Apache-2.0\n\n\ + This outline set was generated in this repository from formulas. It is licensed \ + under the Apache License, Version 2.0.\n", + ); + s.into_bytes() +} + +fn q(x: i16, y: i16) -> Point { + Point { x, y, tag: 1 } +} +fn c(x: i16, y: i16) -> Point { + Point { x, y, tag: 2 } +} +fn on(x: i16, y: i16) -> Point { + Point { x, y, tag: 0 } +} + +/// A rectangle contour, `(x0, y0)` to `(x1, y1)`. +pub fn rect(x0: i16, y0: i16, x1: i16, y1: i16) -> Vec { + poly(&[(x0, y0), (x1, y0), (x1, y1), (x0, y1)]) +} + +/// Set A: a glyph with no points (0), a bar (1), a frame with a hole (2), a quadratic +/// bowl (3), a cubic wave (4), a triangle (5), a glyph whose one contour is a single +/// point (6), and a wide bar (9). Outline units are twice the parent's units; the +/// origin is the pen position on the baseline, y down. +pub fn set_a() -> Wos1 { + Wos1::from_outlines( + 2048, + 0, + &[ + (0, vec![]), + (1, vec![rect(100, 0, 500, -1400)]), + (2, vec![rect(100, 0, 1100, -1400), reverse_contour(&rect(300, -200, 900, -1200))]), + (3, vec![vec![on(600, 0), q(1100, 0), on(1100, -700), q(1100, -1400), on(600, -1400), q(100, -1400), on(100, -700), q(100, 0)]]), + (4, vec![vec![on(100, 0), c(400, -900), c(800, -500), on(1100, -1400), on(1100, 0)]]), + (5, vec![poly(&[(100, 0), (1100, 0), (600, -1400)])]), + (6, vec![vec![on(0, 0)]]), + (9, vec![rect(0, 0, 2000, -1400)]), + ], + ¬es("synthetic-a"), + ) +} + +/// Set B, held by the vectors that name a held set: three glyphs of set A's shapes at +/// another scale. +pub fn set_b() -> Wos1 { + Wos1::from_outlines( + 1000, + 1, + &[ + (1, vec![rect(50, 0, 250, -700)]), + (3, vec![vec![on(300, 0), q(550, 0), on(550, -350), q(550, -700), on(300, -700), q(50, -700), on(50, -350), q(50, 0)]]), + (5, vec![poly(&[(50, 0), (550, 0), (300, -700)])]), + ], + ¬es("synthetic-b"), + ) +} + +/// A set with one square glyph (7) of 4,096 outline units a side: at `unit_scale` +/// 2^24 it covers a 4096 × 4096 canvas. +pub fn set_square() -> Wos1 { + Wos1::from_outlines(2048, 0, &[(7, vec![rect(0, 0, 4095, 4095)])], ¬es("synthetic-square")) +} + +/// A held set whose digest and length are right but whose notes are not UTF-8: the +/// sink obtains and hashes it, then refuses it `outline_malformed`. +pub fn set_bad_notes() -> Vec { + let mut w = set_b(); + w.notes = notes("synthetic-bad-notes"); + let n = w.notes.len(); + w.notes[n - 2] = 0xFF; + w.write() +} + +/// The sets under `sets/`, by name. +pub fn corpus_sets() -> Vec<(&'static str, Vec)> { + vec![("synthetic-a", set_a().write()), ("synthetic-b", set_b().write()), ("synthetic-bad-notes", set_bad_notes())] +} + +/// The fuzz seeds under `wai-vector/fuzz/seeds/`: a payload that uses every table, +/// and an outline set with every point tag. +pub fn fuzz_seeds() -> Vec<(String, Vec)> { + vec![(String::from("every-table.wvg1"), super::canonical::every_table().bytes()), (String::from("set-a.wos1"), set_a().write())] +} diff --git a/wai/wai-vector/src/wos1.rs b/wai/wai-vector/src/wos1.rs new file mode 100644 index 000000000..95e0c68b4 --- /dev/null +++ b/wai/wai-vector/src/wos1.rs @@ -0,0 +1,380 @@ +//! `WOS1`, the outline set (§2.1): parse with its load checks in their order, and the +//! canonical write. +//! +//! The sink reads this format, never a font file. Nothing is allocated until the exact +//! length (check 3) holds, so a header cannot make the parser reserve memory the bytes +//! do not back. + +use alloc::vec::Vec; + +use crate::bounds::*; +use crate::refuse::{Code, Refusal, refuse}; + +/// A point in outline units: `tag` 0 on-curve, 1 quadratic control, 2 cubic control. +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Point { + pub x: i16, + pub y: i16, + pub tag: u8, +} + +/// A glyph record (16 bytes), with the offsets of its contour ends and points. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Glyph { + pub gid: u16, + pub n_contours: u16, + pub n_points: u16, + pub zero: u16, + pub xmin: i16, + pub ymin: i16, + pub xmax: i16, + pub ymax: i16, + /// The index of this glyph's first contour end in [`Wos1::ends`]. + pub first_end: u32, + /// The index of this glyph's first point in [`Wos1::points`]. + pub first_point: u32, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Wos1 { + pub format: u32, + pub upem2: u16, + pub flags: u16, + pub zero: u32, + pub glyphs: Vec, + pub ends: Vec, + pub points: Vec, + pub notes: Vec, +} + +#[inline] +pub(crate) fn rd16(b: &[u8], o: usize) -> u16 { + u16::from_le_bytes([b[o], b[o + 1]]) +} +#[inline] +pub(crate) fn rd32(b: &[u8], o: usize) -> u32 { + u32::from_le_bytes([b[o], b[o + 1], b[o + 2], b[o + 3]]) +} + +/// The exact length a header's counts give (§2.1). +pub fn exact_len(n_glyphs: u64, points_total: u64, contours_total: u64, notes_len: u64) -> u64 { + WOS1_HEADER as u64 + WOS1_GLYPH as u64 * n_glyphs + 2 * contours_total + 5 * points_total + notes_len +} + +const M: Code = Code::OutlineMalformed; + +/// Parse a `WOS1`, running the load checks of §2.1 in their order and reporting the +/// first failure. +pub fn parse(b: &[u8]) -> Result { + // Check 1. A set too short to hold its header has no readable magic. + if b.len() < WOS1_HEADER { + return refuse(M, "wos1.1", "the header is incomplete", 0); + } + if &b[0..4] != b"WOS1" { + return refuse(M, "wos1.1", "magic", 0); + } + let format = rd32(b, 4); + if format != 1 { + return refuse(M, "wos1.1", "format", 0); + } + let upem2 = rd16(b, 8); + let flags = rd16(b, 10); + let zero = rd32(b, 28); + if zero != 0 { + return refuse(M, "wos1.1", "zero", 0); + } + if flags & !1 != 0 { + return refuse(M, "wos1.1", "reserved flag bits", 0); + } + // Check 2, in field order. + let n_glyphs = u64::from(rd32(b, 12)); + let points_total = u64::from(rd32(b, 16)); + let contours_total = u64::from(rd32(b, 20)); + let notes_len = u64::from(rd32(b, 24)); + if n_glyphs > WOS1_GLYPHS_MAX { + return refuse(Code::TooLarge, "wos1.2", "n_glyphs", 0); + } + if n_glyphs == 0 { + return refuse(M, "wos1.2", "n_glyphs = 0", 0); + } + if points_total > WOS1_POINTS_TOTAL_MAX { + return refuse(Code::TooLarge, "wos1.2", "points_total", 0); + } + if contours_total > WOS1_CONTOURS_TOTAL_MAX { + return refuse(Code::TooLarge, "wos1.2", "contours_total", 0); + } + if notes_len > WOS1_NOTES_MAX { + return refuse(Code::TooLarge, "wos1.2", "notes_len", 0); + } + if notes_len == 0 { + return refuse(M, "wos1.2", "notes_len = 0", 0); + } + // Check 3. + if exact_len(n_glyphs, points_total, contours_total, notes_len) != b.len() as u64 { + return refuse(M, "wos1.3", "exact length", 0); + } + let (ng, np, nc) = (n_glyphs as usize, points_total as usize, contours_total as usize); + let g0 = WOS1_HEADER; + let e0 = g0 + WOS1_GLYPH * ng; + let p0 = e0 + 2 * nc; + let n0 = p0 + 5 * np; + // Check 4: each glyph record, in order. + let mut glyphs: Vec = Vec::with_capacity(ng); + for i in 0..ng { + let o = g0 + WOS1_GLYPH * i; + let g = Glyph { + gid: rd16(b, o), + n_contours: rd16(b, o + 2), + n_points: rd16(b, o + 4), + zero: rd16(b, o + 6), + xmin: rd16(b, o + 8) as i16, + ymin: rd16(b, o + 10) as i16, + xmax: rd16(b, o + 12) as i16, + ymax: rd16(b, o + 14) as i16, + first_end: 0, + first_point: 0, + }; + if u64::from(g.n_points) > POINTS_MAX { + return refuse(Code::PointsLimit, "wos1.4", "n_points", i as u64); + } + if g.n_contours > g.n_points { + return refuse(M, "wos1.4", "n_contours > n_points", i as u64); + } + if g.n_points >= 1 && g.n_contours == 0 { + return refuse(M, "wos1.4", "points with no contour", i as u64); + } + if g.zero != 0 { + return refuse(M, "wos1.4", "zero", i as u64); + } + glyphs.push(g); + } + // Check 5. + for i in 1..ng { + if glyphs[i].gid <= glyphs[i - 1].gid { + return refuse(M, "wos1.5", "gids strictly increase", i as u64); + } + } + // Check 6. + let sp: u64 = glyphs.iter().map(|g| u64::from(g.n_points)).sum(); + let sc: u64 = glyphs.iter().map(|g| u64::from(g.n_contours)).sum(); + if sp != points_total || sc != contours_total { + return refuse(M, "wos1.6", "sums", 0); + } + let (mut fe, mut fp) = (0u32, 0u32); + for g in glyphs.iter_mut() { + g.first_end = fe; + g.first_point = fp; + fe += u32::from(g.n_contours); + fp += u32::from(g.n_points); + } + let ends: Vec = (0..nc).map(|i| rd16(b, e0 + 2 * i)).collect(); + let points: Vec = (0..np) + .map(|i| { + let o = p0 + 5 * i; + Point { x: rd16(b, o) as i16, y: rd16(b, o + 2) as i16, tag: b[o + 4] } + }) + .collect(); + // Check 7. + for (i, g) in glyphs.iter().enumerate() { + if !ends_ok(&ends[g.first_end as usize..][..g.n_contours as usize], g.n_points) { + return refuse(M, "wos1.7", "contour ends", i as u64); + } + } + // Check 8. + if let Some(i) = points.iter().position(|p| p.tag > 2) { + return refuse(M, "wos1.8", "tag", i as u64); + } + // Check 9. + for (i, g) in glyphs.iter().enumerate() { + let pts = &points[g.first_point as usize..][..g.n_points as usize]; + let ends = &ends[g.first_end as usize..][..g.n_contours as usize]; + if !outline_grammar_ok(pts, ends) { + return refuse(M, "wos1.9", "contour grammar", i as u64); + } + } + // Check 10. + for (i, g) in glyphs.iter().enumerate() { + let pts = &points[g.first_point as usize..][..g.n_points as usize]; + if exact_box(pts) != [g.xmin, g.ymin, g.xmax, g.ymax] { + return refuse(M, "wos1.10", "box", i as u64); + } + } + // Check 11. + if core::str::from_utf8(&b[n0..]).is_err() { + return refuse(M, "wos1.11", "notes UTF-8", 0); + } + Ok(Wos1 { format, upem2, flags, zero, glyphs, ends, points, notes: b[n0..].to_vec() }) +} + +/// Contour ends strictly increase, and the last equals `n_points − 1`. With no ends, +/// the glyph has no points (check 4 refused a glyph with points and no contour). +pub(crate) fn ends_ok(ends: &[u16], n_points: u16) -> bool { + if ends.windows(2).any(|w| w[1] <= w[0]) { + return false; + } + match ends.last() { + Some(&last) => u32::from(last) + 1 == u32::from(n_points), + None => n_points == 0, + } +} + +/// Every contour of an outline meets §2.1's grammar. +pub(crate) fn outline_grammar_ok(pts: &[Point], ends: &[u16]) -> bool { + let mut start = 0usize; + for &e in ends { + let end = e as usize + 1; + if !contour_ok(&pts[start..end]) { + return false; + } + start = end; + } + true +} + +/// One contour of `m ≥ 1` points, index `m` meaning `P_0` again (§2.1). +pub fn contour_ok(c: &[Point]) -> bool { + let m = c.len(); + if m == 0 || c[0].tag != 0 { + return false; + } + let tag = |i: usize| if i == m { 0 } else { c[i].tag }; + let mut i = 0; + while i < m { + match tag(i + 1) { + 0 => i += 1, + 1 => { + if tag(i + 2) != 0 { + return false; + } + i += 2; + } + 2 => { + // P_{i+1} is a control, so i + 1 < m and i + 2 ≤ m. + if tag(i + 2) != 2 || tag(i + 3) != 0 { + return false; + } + i += 3; + } + _ => return false, + } + } + true +} + +/// The exact box of a list of points: all four 0 when there are none. +pub fn exact_box(pts: &[Point]) -> [i16; 4] { + if pts.is_empty() { + return [0; 4]; + } + let mut b = [i16::MAX, i16::MAX, i16::MIN, i16::MIN]; + for p in pts { + b[0] = b[0].min(p.x); + b[1] = b[1].min(p.y); + b[2] = b[2].max(p.x); + b[3] = b[3].max(p.y); + } + b +} + +impl Wos1 { + /// The glyph record of `gid`, by binary search: gids strictly increase. + pub fn glyph(&self, gid: u16) -> Option<&Glyph> { + self.glyphs.binary_search_by_key(&gid, |g| g.gid).ok().map(|i| &self.glyphs[i]) + } + pub fn glyph_points(&self, g: &Glyph) -> &[Point] { + &self.points[g.first_point as usize..][..g.n_points as usize] + } + pub fn glyph_ends(&self, g: &Glyph) -> &[u16] { + &self.ends[g.first_end as usize..][..g.n_contours as usize] + } + /// The canonical bytes: the header from the tables' lengths, then the tables. + pub fn write(&self) -> Vec { + let mut o = Vec::with_capacity( + exact_len(self.glyphs.len() as u64, self.points.len() as u64, self.ends.len() as u64, self.notes.len() as u64) as usize, + ); + o.extend_from_slice(b"WOS1"); + o.extend_from_slice(&self.format.to_le_bytes()); + o.extend_from_slice(&self.upem2.to_le_bytes()); + o.extend_from_slice(&self.flags.to_le_bytes()); + o.extend_from_slice(&(self.glyphs.len() as u32).to_le_bytes()); + o.extend_from_slice(&(self.points.len() as u32).to_le_bytes()); + o.extend_from_slice(&(self.ends.len() as u32).to_le_bytes()); + o.extend_from_slice(&(self.notes.len() as u32).to_le_bytes()); + o.extend_from_slice(&self.zero.to_le_bytes()); + for g in &self.glyphs { + for v in [g.gid, g.n_contours, g.n_points, g.zero, g.xmin as u16, g.ymin as u16, g.xmax as u16, g.ymax as u16] { + o.extend_from_slice(&v.to_le_bytes()); + } + } + for e in &self.ends { + o.extend_from_slice(&e.to_le_bytes()); + } + for p in &self.points { + o.extend_from_slice(&p.x.to_le_bytes()); + o.extend_from_slice(&p.y.to_le_bytes()); + o.push(p.tag); + } + o.extend_from_slice(&self.notes); + o + } + + /// A set from glyph outlines `(gid, contours)`, each contour a list of points, with + /// exact boxes and the given notes. The glyphs must be given in strictly + /// increasing `gid` order. + pub fn from_outlines(upem2: u16, flags: u16, glyphs: &[(u16, Vec>)], notes: &[u8]) -> Wos1 { + let mut w = Wos1 { format: 1, upem2, flags, zero: 0, glyphs: Vec::new(), ends: Vec::new(), points: Vec::new(), notes: notes.to_vec() }; + for (gid, contours) in glyphs { + let first_end = w.ends.len() as u32; + let first_point = w.points.len() as u32; + let mut n = 0u16; + for c in contours { + n += c.len() as u16; + w.points.extend_from_slice(c); + w.ends.push(n - 1); + } + let bx = exact_box(&w.points[first_point as usize..]); + w.glyphs.push(Glyph { + gid: *gid, + n_contours: contours.len() as u16, + n_points: n, + zero: 0, + xmin: bx[0], + ymin: bx[1], + xmax: bx[2], + ymax: bx[3], + first_end, + first_point, + }); + } + w + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alloc::vec; + + fn p(x: i16, y: i16, tag: u8) -> Point { + Point { x, y, tag } + } + + #[test] + fn grammar() { + assert!(contour_ok(&[p(0, 0, 0)])); + assert!(!contour_ok(&[p(0, 0, 1)]), "P_0 is on-curve even in a one-point contour"); + assert!(contour_ok(&[p(0, 0, 0), p(1, 0, 1)]), "a quadratic closing on P_0"); + assert!(!contour_ok(&[p(0, 0, 0), p(1, 0, 2)])); + assert!(contour_ok(&[p(0, 0, 0), p(1, 0, 2), p(2, 0, 2)]), "a cubic closing on P_0"); + assert!(!contour_ok(&[p(0, 0, 0), p(1, 0, 2), p(2, 0, 2), p(3, 0, 2)])); + assert!(!contour_ok(&[p(0, 0, 0), p(1, 0, 1), p(2, 0, 1)]), "implied points are stored"); + assert!(contour_ok(&[p(0, 0, 0), p(1, 0, 1), p(2, 0, 0), p(3, 0, 2), p(4, 0, 2), p(5, 0, 0)])); + } + + #[test] + fn round_trip() { + let w = Wos1::from_outlines(2048, 0, &[(3, vec![vec![p(0, 0, 0), p(10, 0, 0), p(10, 10, 1), p(0, 10, 0)]]), (7, vec![])], b"k=v\n\nlicence"); + let b = w.write(); + assert_eq!(parse(&b).unwrap(), w); + } +} diff --git a/wai/wai-vector/src/wvg1.rs b/wai/wai-vector/src/wvg1.rs new file mode 100644 index 000000000..12042c069 --- /dev/null +++ b/wai/wai-vector/src/wvg1.rs @@ -0,0 +1,1392 @@ +//! `WVG1` (§2.2–§2.5, §2.7): the header and tables, parsed with the refusal order of +//! §2.7, and the canonical write. +//! +//! - [`split`] reads the tables once the exact length holds (steps 1–3). Nothing is +//! allocated before that, so a header's counts cannot reserve memory the bytes do not +//! back. +//! - [`parse`] adds the record pass (step 4) and the cross-record checks (step 5). +//! - [`load`] adds the sets (step 6), the glyph check (step 7), the interval check +//! (step 8) and the cost (step 9): a payload [`load`] returns renders at every +//! listed size, rate and frame. +//! +//! [`Doc`] holds every field as carried, zero fields included, so [`Doc::write`] of a +//! parsed payload gives back its bytes: the verifier's round trip (§2.5). + +use alloc::vec; +use alloc::vec::Vec; +use core::cmp::Ordering; + +use crate::arith::gcd; +use crate::bounds::*; +use crate::refuse::{Code, Refusal, refuse}; +use crate::wos1::{self, Point, Wos1, rd16, rd32}; + +#[derive(Clone, Debug, PartialEq, Eq, Default)] +pub struct Header { + pub magic: [u8; 4], + pub format: u32, + pub tb: u32, + pub t0: u32, + pub dur: u32, + pub design_w: u16, + pub design_h: u16, + pub n_sizes: u8, + pub n_rates: u8, + pub n_sets: u8, + pub n_tables: u8, + pub n_paints: u16, + pub n_texts: u16, + pub n_tracks: u16, + pub n_paths: u16, + pub n_items: u32, + pub n_keys: u32, + pub n_glyphs: u32, + pub n_clusters: u32, + pub path_contours: u32, + pub path_points: u32, + pub strings_len: u32, + pub inline_len: u32, + pub held_len: u32, + pub zero: [u8; 8], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Size { + pub w: u16, + pub h: u16, + pub cost: u32, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Rate { + pub num: u32, + pub den: u32, +} + +impl Rate { + /// Ticks per frame, `P = den·tb/num` (§3.1); an integer once the record pass holds. + pub fn ticks_per_frame(&self, tb: u32) -> u64 { + u64::from(self.den) * u64::from(tb) / u64::from(self.num) + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct SetRec { + /// 0 held, 1 inline. + pub carriage: u8, + pub zero: [u8; 3], + pub length: u32, + pub sha256: [u8; 32], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct Table { + pub e: [u32; 17], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct Paint { + pub rgba: [u8; 4], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Track { + /// 1 opacity, 2 translation, 3 matrix entry. + pub kind: u8, + pub zero1: u8, + pub zero2: u16, + pub n_keys: u32, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Key { + pub t: u32, + pub value: i32, + /// 0 hold, 1 linear, `2 + j` easing table `j`. + pub interp: u8, + pub zero: [u8; 3], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Path { + pub n_contours: u16, + pub n_points: u16, + pub zero: u32, + /// `xmin, ymin, xmax, ymax`. + pub bbox: [i16; 4], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Text { + pub purpose: u8, + pub dir: u8, + pub lang_len: u8, + pub mode: u8, + pub group: u16, + pub ruby: u16, + pub ruby_start: u32, + pub ruby_len: u32, + pub str_len: u32, +} + +pub const KIND_BEGIN: u8 = 0; +pub const KIND_END: u8 = 1; +pub const KIND_PATH: u8 = 2; +pub const KIND_RUN: u8 = 3; + +/// The track slots of an item, in their order. +pub const M00: usize = 0; +pub const M01: usize = 1; +pub const M10: usize = 2; +pub const M11: usize = 3; +pub const TX: usize = 4; +pub const TY: usize = 5; +pub const OP: usize = 6; +/// The track kind each slot requires (§2.4). +pub const SLOT_KIND: [u8; 7] = [3, 3, 3, 3, 2, 2, 1]; + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Item { + pub kind: u8, + pub rule: u8, + pub zero2: u16, + pub reference: u16, + pub paint: u16, + pub text: u16, + pub zero10: u16, + pub n_glyphs: u16, + pub n_clusters: u16, + pub t_on: u32, + pub t_off: u32, + pub unit_scale: u32, + pub slots: [u16; 7], + pub zero42: [u8; 6], +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct GlyphRec { + pub gid: u16, + pub zero: u16, + pub x: i32, + pub y: i32, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Cluster { + pub glyph_count: u16, + pub zero: u16, + pub byte_first: u32, + pub byte_len: u32, +} + +/// Where each owner's records start in their tables: prefix sums of the owners' +/// counts, valid once the sum rules (step 5(a)) hold. +#[derive(Clone, Debug, PartialEq, Eq, Default)] +pub struct Ix { + pub track_key0: Vec, + pub path_end0: Vec, + pub path_pt0: Vec, + /// The offset of each block's language tag in `STRINGS`; its string follows it. + pub text_off: Vec, + /// For each item, its first glyph record and first cluster (runs only). + pub item_glyph0: Vec, + pub item_cluster0: Vec, +} + +/// A `WVG1` payload, every field as carried. +#[derive(Clone, Debug, PartialEq, Eq, Default)] +pub struct Doc { + pub header: Header, + pub sizes: Vec, + pub rates: Vec, + pub sets: Vec, + pub tables: Vec
, + pub paints: Vec, + pub tracks: Vec, + pub keys: Vec, + pub paths: Vec, + pub path_ends: Vec, + pub path_points: Vec, + pub texts: Vec, + pub items: Vec, + pub glyphs: Vec, + pub clusters: Vec, + pub strings: Vec, + pub inline: Vec, + pub ix: Ix, +} + +impl Header { + /// The exact length the counts give (§2.2). + pub fn exact_len(&self) -> u64 { + let h = self; + WVG1_HEADER as u64 + + REC_SIZE * u64::from(h.n_sizes) + + REC_RATE * u64::from(h.n_rates) + + REC_SET * u64::from(h.n_sets) + + REC_TABLE * u64::from(h.n_tables) + + REC_PAINT * u64::from(h.n_paints) + + REC_TRACK * u64::from(h.n_tracks) + + REC_KEY * u64::from(h.n_keys) + + REC_PATH * u64::from(h.n_paths) + + REC_PATH_END * u64::from(h.path_contours) + + REC_PATH_POINT * u64::from(h.path_points) + + REC_TEXT * u64::from(h.n_texts) + + REC_ITEM * u64::from(h.n_items) + + REC_GLYPH * u64::from(h.n_glyphs) + + REC_CLUSTER * u64::from(h.n_clusters) + + u64::from(h.strings_len) + + u64::from(h.inline_len) + } + + /// Read the 80-byte header. `b` holds at least 80 bytes. + pub fn read(b: &[u8]) -> Header { + let mut zero = [0u8; 8]; + zero.copy_from_slice(&b[72..80]); + Header { + magic: [b[0], b[1], b[2], b[3]], + format: rd32(b, 4), + tb: rd32(b, 8), + t0: rd32(b, 12), + dur: rd32(b, 16), + design_w: rd16(b, 20), + design_h: rd16(b, 22), + n_sizes: b[24], + n_rates: b[25], + n_sets: b[26], + n_tables: b[27], + n_paints: rd16(b, 28), + n_texts: rd16(b, 30), + n_tracks: rd16(b, 32), + n_paths: rd16(b, 34), + n_items: rd32(b, 36), + n_keys: rd32(b, 40), + n_glyphs: rd32(b, 44), + n_clusters: rd32(b, 48), + path_contours: rd32(b, 52), + path_points: rd32(b, 56), + strings_len: rd32(b, 60), + inline_len: rd32(b, 64), + held_len: rd32(b, 68), + zero, + } + } + + pub fn write(&self, o: &mut Vec) { + let h = self; + o.extend_from_slice(&h.magic); + for v in [h.format, h.tb, h.t0, h.dur] { + o.extend_from_slice(&v.to_le_bytes()); + } + o.extend_from_slice(&h.design_w.to_le_bytes()); + o.extend_from_slice(&h.design_h.to_le_bytes()); + o.extend_from_slice(&[h.n_sizes, h.n_rates, h.n_sets, h.n_tables]); + for v in [h.n_paints, h.n_texts, h.n_tracks, h.n_paths] { + o.extend_from_slice(&v.to_le_bytes()); + } + for v in [h.n_items, h.n_keys, h.n_glyphs, h.n_clusters, h.path_contours, h.path_points, h.strings_len, h.inline_len, h.held_len] { + o.extend_from_slice(&v.to_le_bytes()); + } + o.extend_from_slice(&h.zero); + } +} + +const PM: Code = Code::PayloadMalformed; +const FR: Code = Code::FieldRange; + +/// Steps 1–3 of §2.7, then the tables read in file order. No record is validated. +pub fn split(b: &[u8]) -> Result { + // Step 1. A payload too short to hold its header has no readable magic. + if b.len() < WVG1_HEADER { + return refuse(PM, "1", "the header is incomplete", 0); + } + let h = Header::read(b); + if &h.magic != b"WVG1" { + return refuse(PM, "1", "magic", 0); + } + if h.format != 1 { + return refuse(PM, "1", "format", 0); + } + if h.zero != [0; 8] { + return refuse(PM, "1", "zero", 0); + } + // Step 2, in field order. + let caps: [(&'static str, u64, u64); 15] = [ + ("n_sizes", u64::from(h.n_sizes), SIZES_MAX), + ("n_rates", u64::from(h.n_rates), RATES_MAX), + ("n_sets", u64::from(h.n_sets), SETS_MAX), + ("n_tables", u64::from(h.n_tables), TABLES_MAX), + ("n_paints", u64::from(h.n_paints), PAINTS_MAX), + ("n_paths", u64::from(h.n_paths), PATHS_MAX), + ("n_items", u64::from(h.n_items), ITEMS_MAX), + ("n_keys", u64::from(h.n_keys), KEYS_MAX), + ("n_glyphs", u64::from(h.n_glyphs), GLYPHS_MAX), + ("n_clusters", u64::from(h.n_clusters), CLUSTERS_MAX), + ("path_contours", u64::from(h.path_contours), PATH_CONTOURS_MAX), + ("path_points", u64::from(h.path_points), PATH_POINTS_MAX), + ("strings_len", u64::from(h.strings_len), STRINGS_MAX), + ("inline_len", u64::from(h.inline_len), INLINE_MAX), + ("held_len", u64::from(h.held_len), HELD_MAX), + ]; + for (name, v, cap) in caps { + if v > cap { + return refuse(Code::TooLarge, "2", name, 0); + } + } + if u64::from(h.inline_len) + u64::from(h.held_len) > SETS_BYTES_MAX { + return refuse(Code::TooLarge, "2", "inline_len + held_len", 0); + } + let exact = h.exact_len(); + if exact > PAYLOAD_MAX { + return refuse(Code::TooLarge, "2", "exact length", 0); + } + // Step 3. + if exact != b.len() as u64 { + return refuse(PM, "3", "exact length", 0); + } + Ok(read_tables(b, h)) +} + +/// The tables of a payload whose length is exact for its header. Every count is +/// backed by bytes, so the reservations below are bounded by the input. +pub fn read_tables(b: &[u8], h: Header) -> Doc { + let mut o = WVG1_HEADER; + let mut take = |n: usize| { + let s = o; + o += n; + s + }; + let mut d = Doc::default(); + for _ in 0..h.n_sizes { + let p = take(8); + d.sizes.push(Size { w: rd16(b, p), h: rd16(b, p + 2), cost: rd32(b, p + 4) }); + } + for _ in 0..h.n_rates { + let p = take(8); + d.rates.push(Rate { num: rd32(b, p), den: rd32(b, p + 4) }); + } + for _ in 0..h.n_sets { + let p = take(40); + let mut sha = [0u8; 32]; + sha.copy_from_slice(&b[p + 8..p + 40]); + d.sets.push(SetRec { carriage: b[p], zero: [b[p + 1], b[p + 2], b[p + 3]], length: rd32(b, p + 4), sha256: sha }); + } + for _ in 0..h.n_tables { + let p = take(68); + let mut e = [0u32; 17]; + for (i, v) in e.iter_mut().enumerate() { + *v = rd32(b, p + 4 * i); + } + d.tables.push(Table { e }); + } + d.paints = Vec::with_capacity(h.n_paints as usize); + for _ in 0..h.n_paints { + let p = take(4); + d.paints.push(Paint { rgba: [b[p], b[p + 1], b[p + 2], b[p + 3]] }); + } + d.tracks = Vec::with_capacity(h.n_tracks as usize); + for _ in 0..h.n_tracks { + let p = take(8); + d.tracks.push(Track { kind: b[p], zero1: b[p + 1], zero2: rd16(b, p + 2), n_keys: rd32(b, p + 4) }); + } + d.keys = Vec::with_capacity(h.n_keys as usize); + for _ in 0..h.n_keys { + let p = take(12); + d.keys.push(Key { t: rd32(b, p), value: rd32(b, p + 4) as i32, interp: b[p + 8], zero: [b[p + 9], b[p + 10], b[p + 11]] }); + } + d.paths = Vec::with_capacity(h.n_paths as usize); + for _ in 0..h.n_paths { + let p = take(16); + d.paths.push(Path { + n_contours: rd16(b, p), + n_points: rd16(b, p + 2), + zero: rd32(b, p + 4), + bbox: [rd16(b, p + 8) as i16, rd16(b, p + 10) as i16, rd16(b, p + 12) as i16, rd16(b, p + 14) as i16], + }); + } + d.path_ends = Vec::with_capacity(h.path_contours as usize); + for _ in 0..h.path_contours { + let p = take(2); + d.path_ends.push(rd16(b, p)); + } + d.path_points = Vec::with_capacity(h.path_points as usize); + for _ in 0..h.path_points { + let p = take(5); + d.path_points.push(Point { x: rd16(b, p) as i16, y: rd16(b, p + 2) as i16, tag: b[p + 4] }); + } + d.texts = Vec::with_capacity(h.n_texts as usize); + for _ in 0..h.n_texts { + let p = take(20); + d.texts.push(Text { + purpose: b[p], + dir: b[p + 1], + lang_len: b[p + 2], + mode: b[p + 3], + group: rd16(b, p + 4), + ruby: rd16(b, p + 6), + ruby_start: rd32(b, p + 8), + ruby_len: rd32(b, p + 12), + str_len: rd32(b, p + 16), + }); + } + d.items = Vec::with_capacity(h.n_items as usize); + for _ in 0..h.n_items { + let p = take(48); + let mut slots = [0u16; 7]; + for (i, s) in slots.iter_mut().enumerate() { + *s = rd16(b, p + 28 + 2 * i); + } + let mut z = [0u8; 6]; + z.copy_from_slice(&b[p + 42..p + 48]); + d.items.push(Item { + kind: b[p], + rule: b[p + 1], + zero2: rd16(b, p + 2), + reference: rd16(b, p + 4), + paint: rd16(b, p + 6), + text: rd16(b, p + 8), + zero10: rd16(b, p + 10), + n_glyphs: rd16(b, p + 12), + n_clusters: rd16(b, p + 14), + t_on: rd32(b, p + 16), + t_off: rd32(b, p + 20), + unit_scale: rd32(b, p + 24), + slots, + zero42: z, + }); + } + d.glyphs = Vec::with_capacity(h.n_glyphs as usize); + for _ in 0..h.n_glyphs { + let p = take(12); + d.glyphs.push(GlyphRec { gid: rd16(b, p), zero: rd16(b, p + 2), x: rd32(b, p + 4) as i32, y: rd32(b, p + 8) as i32 }); + } + d.clusters = Vec::with_capacity(h.n_clusters as usize); + for _ in 0..h.n_clusters { + let p = take(12); + d.clusters.push(Cluster { glyph_count: rd16(b, p), zero: rd16(b, p + 2), byte_first: rd32(b, p + 4), byte_len: rd32(b, p + 8) }); + } + let p = take(h.strings_len as usize); + d.strings = b[p..p + h.strings_len as usize].to_vec(); + let p = take(h.inline_len as usize); + d.inline = b[p..p + h.inline_len as usize].to_vec(); + d.header = h; + d +} + +/// Steps 1–5 of §2.7. +pub fn parse(b: &[u8]) -> Result { + let mut d = split(b)?; + record_pass(&d)?; + sums(&d)?; + d.index(); + cross(&d)?; + Ok(d) +} + +/// Step 4: the record pass, in file order. +pub fn record_pass(d: &Doc) -> Result<(), Refusal> { + let h = &d.header; + let side = |v: u16| (SIDE_MIN..=SIDE_MAX).contains(&u32::from(v)); + // The header's remaining fields, in field order. + if !(1..=TB_MAX).contains(&h.tb) { + return refuse(FR, "4", "tb", 0); + } + if u64::from(h.t0) >= TICK_LIMIT { + return refuse(FR, "4", "t0", 0); + } + if h.dur < 1 || u64::from(h.dur) > TICK_LIMIT - u64::from(h.t0) { + return refuse(FR, "4", "dur", 0); + } + if !side(h.design_w) { + return refuse(FR, "4", "design_w", 0); + } + if !side(h.design_h) { + return refuse(FR, "4", "design_h", 0); + } + if h.n_sizes == 0 { + return refuse(FR, "4", "n_sizes", 0); + } + if h.n_rates == 0 { + return refuse(FR, "4", "n_rates", 0); + } + if h.n_items == 0 { + return refuse(FR, "4", "n_items", 0); + } + let (dw, dh) = (u64::from(h.design_w), u64::from(h.design_h)); + for (i, s) in d.sizes.iter().enumerate() { + let (w, hh) = (u64::from(s.w), u64::from(s.h)); + if !side(s.w) || 8 * w < dw || w > 4 * dw { + return refuse(FR, "4", "SIZE.w", i as u64); + } + if !side(s.h) || w * dh != hh * dw { + return refuse(FR, "4", "SIZE.h", i as u64); + } + } + for (i, r) in d.rates.iter().enumerate() { + if !(1..=RATE_TERM_MAX).contains(&r.num) { + return refuse(FR, "4", "RATE.num", i as u64); + } + let (num, den) = (u64::from(r.num), u64::from(r.den)); + if !(1..=RATE_TERM_MAX).contains(&r.den) || gcd(num, den) != 1 || num > RATE_MAX_FPS * den || (den * u64::from(h.tb)) % num != 0 { + return refuse(FR, "4", "RATE.den", i as u64); + } + } + for (i, s) in d.sets.iter().enumerate() { + if s.carriage > 1 { + return refuse(FR, "4", "SET.carriage", i as u64); + } + if s.zero != [0; 3] { + return refuse(PM, "4", "SET.zero", i as u64); + } + if !(SET_LEN_MIN..=SET_LEN_MAX).contains(&s.length) { + return refuse(FR, "4", "SET.length", i as u64); + } + } + for (i, t) in d.tables.iter().enumerate() { + for (j, &e) in t.e.iter().enumerate() { + let ok = match j { + 0 => e == 0, + 16 => e == Q16_ONE, + _ => e <= Q16_ONE, + }; + if !ok { + return refuse(FR, "4", "TABLE.E", i as u64); + } + } + } + for (i, p) in d.paints.iter().enumerate() { + let [r, g, b, a] = p.rgba; + if r > a || g > a || b > a { + return refuse(FR, "4", "PAINT: r, g, b ≤ a", i as u64); + } + } + for (i, t) in d.tracks.iter().enumerate() { + if !(1..=3).contains(&t.kind) { + return refuse(FR, "4", "TRACK.kind", i as u64); + } + if t.zero1 != 0 || t.zero2 != 0 { + return refuse(PM, "4", "TRACK.zero", i as u64); + } + if !(1..=TRACK_KEYS_MAX).contains(&t.n_keys) { + return refuse(FR, "4", "TRACK.n_keys", i as u64); + } + } + for (i, k) in d.keys.iter().enumerate() { + if u64::from(k.t) >= TICK_LIMIT { + return refuse(FR, "4", "KEY.t", i as u64); + } + if u32::from(k.interp) >= 2 + u32::from(h.n_tables) { + return refuse(FR, "4", "KEY.interp", i as u64); + } + if k.zero != [0; 3] { + return refuse(PM, "4", "KEY.zero", i as u64); + } + } + for (i, p) in d.paths.iter().enumerate() { + if p.n_contours < 1 { + return refuse(FR, "4", "PATH.n_contours", i as u64); + } + if u64::from(p.n_points) > POINTS_MAX { + return refuse(Code::PointsLimit, "4", "PATH.n_points", i as u64); + } + if p.n_points < 1 || p.n_contours > p.n_points { + return refuse(FR, "4", "PATH.n_points", i as u64); + } + if p.zero != 0 { + return refuse(PM, "4", "PATH.zero", i as u64); + } + } + if let Some(i) = d.path_points.iter().position(|p| p.tag > 2) { + return refuse(FR, "4", "PATH_POINT.tag", i as u64); + } + for (i, t) in d.texts.iter().enumerate() { + let i = i as u64; + if t.purpose == 0 { + return refuse(FR, "4", "TEXT.purpose", i); + } + if t.dir > 1 { + return refuse(FR, "4", "TEXT.dir", i); + } + if !(1..=LANG_MAX).contains(&t.lang_len) { + return refuse(FR, "4", "TEXT.lang_len", i); + } + if t.mode > 2 { + return refuse(FR, "4", "TEXT.mode", i); + } + if t.ruby > h.n_texts { + return refuse(FR, "4", "TEXT.ruby", i); + } + if t.ruby == 0 && t.ruby_start != 0 { + return refuse(FR, "4", "TEXT.ruby_start", i); + } + if (t.ruby == 0) != (t.ruby_len == 0) { + return refuse(FR, "4", "TEXT.ruby_len", i); + } + if !(1..=STR_MAX).contains(&t.str_len) { + return refuse(FR, "4", "TEXT.str_len", i); + } + } + for (i, it) in d.items.iter().enumerate() { + item_fields(h, it, i as u64)?; + } + for (i, g) in d.glyphs.iter().enumerate() { + if g.zero != 0 { + return refuse(PM, "4", "GLYPH.zero", i as u64); + } + if !(-GLYPH_POS_LIMIT..GLYPH_POS_LIMIT).contains(&g.x) { + return refuse(FR, "4", "GLYPH.x", i as u64); + } + if !(-GLYPH_POS_LIMIT..GLYPH_POS_LIMIT).contains(&g.y) { + return refuse(FR, "4", "GLYPH.y", i as u64); + } + } + if let Some(i) = d.clusters.iter().position(|c| c.zero != 0) { + return refuse(PM, "4", "CLUSTER.zero", i as u64); + } + Ok(()) +} + +/// An `ITEM`'s fields in offset order (§2.4): each field's own range, then any rule +/// that relates it to an earlier field of the record. +fn item_fields(h: &Header, it: &Item, i: u64) -> Result<(), Refusal> { + let k = it.kind; + if k > KIND_RUN { + return refuse(FR, "4", "ITEM.kind", i); + } + let ok = match k { + KIND_BEGIN | KIND_PATH => it.rule <= 1, + _ => it.rule == 0, + }; + if !ok { + return refuse(FR, "4", "ITEM.rule", i); + } + if it.zero2 != 0 { + return refuse(PM, "4", "ITEM.zero@2", i); + } + let r = it.reference; + let ok = match k { + KIND_BEGIN => r == NONE || r < h.n_paths, + KIND_END => r == 0, + KIND_PATH => r < h.n_paths, + _ => r < u16::from(h.n_sets), + }; + if !ok || (k == KIND_BEGIN && r == NONE && it.rule != 0) { + return refuse(FR, "4", "ITEM.ref", i); + } + let ok = match k { + KIND_BEGIN => it.paint == NONE, + KIND_END => it.paint == 0, + _ => it.paint < h.n_paints, + }; + if !ok { + return refuse(FR, "4", "ITEM.paint", i); + } + let ok = match k { + KIND_BEGIN => it.text == NONE, + KIND_END => it.text == 0, + KIND_PATH => it.text == NONE || it.text < h.n_texts, + _ => it.text < h.n_texts, + }; + if !ok { + return refuse(FR, "4", "ITEM.text", i); + } + if it.zero10 != 0 { + return refuse(PM, "4", "ITEM.zero@10", i); + } + let run = k == KIND_RUN; + if (run && !(1..=RUN_GLYPHS_MAX).contains(&it.n_glyphs)) || (!run && it.n_glyphs != 0) { + return refuse(FR, "4", "ITEM.n_glyphs", i); + } + if (run && !(1..=RUN_CLUSTERS_MAX).contains(&it.n_clusters)) || (!run && it.n_clusters != 0) { + return refuse(FR, "4", "ITEM.n_clusters", i); + } + let end = k == KIND_END; + if (end && it.t_on != 0) || (!end && u64::from(it.t_on) >= TICK_LIMIT) { + return refuse(FR, "4", "ITEM.t_on", i); + } + if (end && it.t_off != 0) || (!end && (u64::from(it.t_off) > TICK_LIMIT || it.t_on >= it.t_off)) { + return refuse(FR, "4", "ITEM.t_off", i); + } + let us = it.unit_scale; + let ok = match k { + KIND_BEGIN => us <= UNIT_SCALE_MAX && (r == NONE) == (us == 0), + KIND_END => us == 0, + _ => (1..=UNIT_SCALE_MAX).contains(&us), + }; + if !ok { + return refuse(FR, "4", "ITEM.unit_scale", i); + } + for (s, &v) in it.slots.iter().enumerate() { + let ok = match k { + KIND_END => v == 0, + KIND_BEGIN if s < TX => v == NONE, + _ => v == NONE || v < h.n_tracks, + }; + if !ok { + return refuse(FR, "4", "ITEM.slot", i); + } + } + if it.zero42 != [0; 6] { + return refuse(PM, "4", "ITEM.zero@42", i); + } + Ok(()) +} + +/// Step 5(a): the sum rules. +pub fn sums(d: &Doc) -> Result<(), Refusal> { + let h = &d.header; + let by = |c: u8| d.sets.iter().filter(|s| s.carriage == c).map(|s| u64::from(s.length)).sum::(); + if by(1) != u64::from(h.inline_len) { + return refuse(PM, "5a", "SET lengths, inline", 0); + } + if by(0) != u64::from(h.held_len) { + return refuse(PM, "5a", "SET lengths, held", 0); + } + if d.tracks.iter().map(|t| u64::from(t.n_keys)).sum::() != u64::from(h.n_keys) { + return refuse(PM, "5a", "TRACK n_keys", 0); + } + if d.paths.iter().map(|p| u64::from(p.n_contours)).sum::() != u64::from(h.path_contours) { + return refuse(PM, "5a", "PATH n_contours", 0); + } + if d.paths.iter().map(|p| u64::from(p.n_points)).sum::() != u64::from(h.path_points) { + return refuse(PM, "5a", "PATH n_points", 0); + } + if d.texts.iter().map(|t| u64::from(t.lang_len) + u64::from(t.str_len)).sum::() != u64::from(h.strings_len) { + return refuse(PM, "5a", "TEXT lang_len + str_len", 0); + } + let runs = || d.items.iter().filter(|it| it.kind == KIND_RUN); + if runs().map(|it| u64::from(it.n_glyphs)).sum::() != u64::from(h.n_glyphs) { + return refuse(PM, "5a", "run n_glyphs", 0); + } + if runs().map(|it| u64::from(it.n_clusters)).sum::() != u64::from(h.n_clusters) { + return refuse(PM, "5a", "run n_clusters", 0); + } + Ok(()) +} + +impl Doc { + /// Fill [`Ix`] from the owners' counts. + pub fn index(&mut self) { + let mut ix = Ix::default(); + let mut a = 0u32; + for t in &self.tracks { + ix.track_key0.push(a); + a += t.n_keys; + } + let (mut e, mut p) = (0u32, 0u32); + for q in &self.paths { + ix.path_end0.push(e); + ix.path_pt0.push(p); + e += u32::from(q.n_contours); + p += u32::from(q.n_points); + } + let mut s = 0u32; + for t in &self.texts { + ix.text_off.push(s); + s += u32::from(t.lang_len) + t.str_len; + } + let (mut g, mut c) = (0u32, 0u32); + for it in &self.items { + ix.item_glyph0.push(g); + ix.item_cluster0.push(c); + if it.kind == KIND_RUN { + g += u32::from(it.n_glyphs); + c += u32::from(it.n_clusters); + } + } + self.ix = ix; + } + + pub fn track_keys(&self, t: usize) -> &[Key] { + &self.keys[self.ix.track_key0[t] as usize..][..self.tracks[t].n_keys as usize] + } + pub fn path_ends_of(&self, p: usize) -> &[u16] { + &self.path_ends[self.ix.path_end0[p] as usize..][..self.paths[p].n_contours as usize] + } + pub fn path_points_of(&self, p: usize) -> &[Point] { + &self.path_points[self.ix.path_pt0[p] as usize..][..self.paths[p].n_points as usize] + } + pub fn lang(&self, t: usize) -> &[u8] { + &self.strings[self.ix.text_off[t] as usize..][..self.texts[t].lang_len as usize] + } + pub fn string(&self, t: usize) -> &[u8] { + let o = self.ix.text_off[t] as usize + self.texts[t].lang_len as usize; + &self.strings[o..o + self.texts[t].str_len as usize] + } + pub fn run_glyphs(&self, i: usize) -> &[GlyphRec] { + &self.glyphs[self.ix.item_glyph0[i] as usize..][..self.items[i].n_glyphs as usize] + } + pub fn run_clusters(&self, i: usize) -> &[Cluster] { + &self.clusters[self.ix.item_cluster0[i] as usize..][..self.items[i].n_clusters as usize] + } + + /// Set the header's counts from the tables' lengths, so the length is exact. + pub fn sync_counts(&mut self) { + let h = &mut self.header; + h.n_sizes = self.sizes.len() as u8; + h.n_rates = self.rates.len() as u8; + h.n_sets = self.sets.len() as u8; + h.n_tables = self.tables.len() as u8; + h.n_paints = self.paints.len() as u16; + h.n_texts = self.texts.len() as u16; + h.n_tracks = self.tracks.len() as u16; + h.n_paths = self.paths.len() as u16; + h.n_items = self.items.len() as u32; + h.n_keys = self.keys.len() as u32; + h.n_glyphs = self.glyphs.len() as u32; + h.n_clusters = self.clusters.len() as u32; + h.path_contours = self.path_ends.len() as u32; + h.path_points = self.path_points.len() as u32; + h.strings_len = self.strings.len() as u32; + h.inline_len = self.inline.len() as u32; + } + + /// The canonical bytes: the header as held, then every table in file order. + pub fn write(&self) -> Vec { + let mut o = Vec::with_capacity(self.header.exact_len().min(PAYLOAD_MAX) as usize); + self.header.write(&mut o); + for s in &self.sizes { + o.extend_from_slice(&s.w.to_le_bytes()); + o.extend_from_slice(&s.h.to_le_bytes()); + o.extend_from_slice(&s.cost.to_le_bytes()); + } + for r in &self.rates { + o.extend_from_slice(&r.num.to_le_bytes()); + o.extend_from_slice(&r.den.to_le_bytes()); + } + for s in &self.sets { + o.push(s.carriage); + o.extend_from_slice(&s.zero); + o.extend_from_slice(&s.length.to_le_bytes()); + o.extend_from_slice(&s.sha256); + } + for t in &self.tables { + for e in t.e { + o.extend_from_slice(&e.to_le_bytes()); + } + } + for p in &self.paints { + o.extend_from_slice(&p.rgba); + } + for t in &self.tracks { + o.push(t.kind); + o.push(t.zero1); + o.extend_from_slice(&t.zero2.to_le_bytes()); + o.extend_from_slice(&t.n_keys.to_le_bytes()); + } + for k in &self.keys { + o.extend_from_slice(&k.t.to_le_bytes()); + o.extend_from_slice(&k.value.to_le_bytes()); + o.push(k.interp); + o.extend_from_slice(&k.zero); + } + for p in &self.paths { + o.extend_from_slice(&p.n_contours.to_le_bytes()); + o.extend_from_slice(&p.n_points.to_le_bytes()); + o.extend_from_slice(&p.zero.to_le_bytes()); + for v in p.bbox { + o.extend_from_slice(&v.to_le_bytes()); + } + } + for e in &self.path_ends { + o.extend_from_slice(&e.to_le_bytes()); + } + for p in &self.path_points { + o.extend_from_slice(&p.x.to_le_bytes()); + o.extend_from_slice(&p.y.to_le_bytes()); + o.push(p.tag); + } + for t in &self.texts { + o.extend_from_slice(&[t.purpose, t.dir, t.lang_len, t.mode]); + o.extend_from_slice(&t.group.to_le_bytes()); + o.extend_from_slice(&t.ruby.to_le_bytes()); + for v in [t.ruby_start, t.ruby_len, t.str_len] { + o.extend_from_slice(&v.to_le_bytes()); + } + } + for it in &self.items { + o.push(it.kind); + o.push(it.rule); + for v in [it.zero2, it.reference, it.paint, it.text, it.zero10, it.n_glyphs, it.n_clusters] { + o.extend_from_slice(&v.to_le_bytes()); + } + for v in [it.t_on, it.t_off, it.unit_scale] { + o.extend_from_slice(&v.to_le_bytes()); + } + for v in it.slots { + o.extend_from_slice(&v.to_le_bytes()); + } + o.extend_from_slice(&it.zero42); + } + for g in &self.glyphs { + o.extend_from_slice(&g.gid.to_le_bytes()); + o.extend_from_slice(&g.zero.to_le_bytes()); + o.extend_from_slice(&g.x.to_le_bytes()); + o.extend_from_slice(&g.y.to_le_bytes()); + } + for c in &self.clusters { + o.extend_from_slice(&c.glyph_count.to_le_bytes()); + o.extend_from_slice(&c.zero.to_le_bytes()); + o.extend_from_slice(&c.byte_first.to_le_bytes()); + o.extend_from_slice(&c.byte_len.to_le_bytes()); + } + o.extend_from_slice(&self.strings); + o.extend_from_slice(&self.inline); + o + } + + /// The `TEXTS` table's bytes as carried. + pub fn texts_bytes(&self) -> Vec { + let mut o = Vec::with_capacity(20 * self.texts.len()); + for t in &self.texts { + o.extend_from_slice(&[t.purpose, t.dir, t.lang_len, t.mode]); + o.extend_from_slice(&t.group.to_le_bytes()); + o.extend_from_slice(&t.ruby.to_le_bytes()); + for v in [t.ruby_start, t.ruby_len, t.str_len] { + o.extend_from_slice(&v.to_le_bytes()); + } + } + o + } +} + +/// Step 5 after the sum rules: (b) ordering, (c) typing, (d) groups, (e) paths, (f) +/// strings, (g) the canonical rules, (h) decorative path alternatives. +pub fn cross(d: &Doc) -> Result<(), Refusal> { + // (b) + for i in 1..d.sizes.len() { + if d.sizes[i].w <= d.sizes[i - 1].w { + return refuse(PM, "5b", "SIZEs ascend by w", i as u64); + } + } + for i in 1..d.rates.len() { + let (a, b) = (d.rates[i - 1], d.rates[i]); + if u64::from(a.num) * u64::from(b.den) >= u64::from(b.num) * u64::from(a.den) { + return refuse(PM, "5b", "RATEs ascend by num/den", i as u64); + } + } + for t in 0..d.tracks.len() { + let keys = d.track_keys(t); + if keys.windows(2).any(|w| w[1].t <= w[0].t) { + return refuse(PM, "5b", "keys ascend in t", t as u64); + } + if keys.last().is_some_and(|k| k.interp != 0) { + return refuse(PM, "5b", "the last key's interp is 0", t as u64); + } + } + // (c) typing, field_range: KEYS in order, then ITEMS in order. + for t in 0..d.tracks.len() { + let (lo, hi) = match d.tracks[t].kind { + 1 => (0, OPACITY_MAX), + 2 => (-TRANSLATION_MAX, TRANSLATION_MAX), + _ => (-MATRIX_MAX, MATRIX_MAX), + }; + if let Some(j) = d.track_keys(t).iter().position(|k| !(lo..=hi).contains(&k.value)) { + return refuse(FR, "5c", "KEY.value for its track's kind", (d.ix.track_key0[t] as usize + j) as u64); + } + } + for (i, it) in d.items.iter().enumerate() { + if it.kind == KIND_END { + continue; + } + for (s, &v) in it.slots.iter().enumerate() { + if v != NONE && d.tracks[v as usize].kind != SLOT_KIND[s] { + return refuse(FR, "5c", "a slot names a track of its kind", i as u64); + } + } + } + // (d) + let mut depth = 0u32; + for (i, it) in d.items.iter().enumerate() { + match it.kind { + KIND_BEGIN => { + depth += 1; + if depth > GROUP_DEPTH_MAX { + return refuse(PM, "5d", "group depth", i as u64); + } + } + KIND_END => { + if depth == 0 { + return refuse(PM, "5d", "a group end with no group open", i as u64); + } + depth -= 1; + } + _ => {} + } + } + if depth != 0 { + return refuse(PM, "5d", "a group open after the last item", 0); + } + // (e) + for p in 0..d.paths.len() { + let (ends, pts) = (d.path_ends_of(p), d.path_points_of(p)); + if !wos1::ends_ok(ends, d.paths[p].n_points) { + return refuse(PM, "5e", "PATH contour ends", p as u64); + } + if !wos1::outline_grammar_ok(pts, ends) { + return refuse(PM, "5e", "PATH contour grammar", p as u64); + } + if wos1::exact_box(pts) != d.paths[p].bbox { + return refuse(PM, "5e", "PATH box", p as u64); + } + } + // (f) + for t in 0..d.texts.len() { + if !lang_tag_ok(d.lang(t)) { + return refuse(PM, "5f", "language tag", t as u64); + } + if !string_ok(d.string(t)) { + return refuse(PM, "5f", "string", t as u64); + } + } + // (g) + first_reference(d)?; + no_duplicates(d)?; + text_blocks(d)?; + clusters(d)?; + // (h) + for (i, it) in d.items.iter().enumerate() { + if it.kind == KIND_PATH && it.text != NONE && d.texts[it.text as usize].purpose == DECORATIVE { + return refuse(PM, "5h", "a path's alternative is decorative", i as u64); + } + } + Ok(()) +} + +/// §2.5 rule 6: ASCII letters, digits and hyphens, with no leading, trailing or +/// doubled hyphen. +pub fn lang_tag_ok(t: &[u8]) -> bool { + !t.is_empty() + && t.iter().all(|c| c.is_ascii_alphanumeric() || *c == b'-') + && t[0] != b'-' + && t[t.len() - 1] != b'-' + && !t.windows(2).any(|w| w == b"--") +} + +/// §2.5 rule 6: valid UTF-8, no C0 control but U+000A, no U+007F, no C1 control. +pub fn string_ok(s: &[u8]) -> bool { + match core::str::from_utf8(s) { + Ok(s) => s.chars().all(|c| { + let v = c as u32; + !(v < 0x20 && v != 0x0A || v == 0x7F || (0x80..=0x9F).contains(&v)) + }), + Err(_) => false, + } +} + +/// A code-point boundary of a valid UTF-8 string: its end, or a byte that does not +/// continue a sequence. +fn boundary(s: &[u8], i: u64) -> bool { + i == s.len() as u64 || (i < s.len() as u64 && s[i as usize] & 0xC0 != 0x80) +} + +/// First references in order 0, 1, 2, …, and every entry referenced. +struct FirstRef { + seen: Vec, + next: usize, +} + +impl FirstRef { + fn new(n: usize) -> FirstRef { + FirstRef { seen: vec![false; n], next: 0 } + } + fn see(&mut self, v: usize) -> bool { + if !self.seen[v] { + if v != self.next { + return false; + } + self.seen[v] = true; + self.next += 1; + } + true + } + fn complete(&self) -> bool { + self.next == self.seen.len() + } +} + +/// §2.5 rule 2. +fn first_reference(d: &Doc) -> Result<(), Refusal> { + let (mut paths, mut sets) = (FirstRef::new(d.paths.len()), FirstRef::new(d.sets.len())); + let (mut paints, mut tracks) = (FirstRef::new(d.paints.len()), FirstRef::new(d.tracks.len())); + for (i, it) in d.items.iter().enumerate() { + if it.kind == KIND_END { + continue; + } + let ok = match it.kind { + KIND_RUN => sets.see(it.reference as usize), + _ if it.reference == NONE => true, + _ => paths.see(it.reference as usize), + } && (it.paint == NONE || paints.see(it.paint as usize)) + && it.slots.iter().all(|&s| s == NONE || tracks.see(s as usize)); + if !ok { + return refuse(PM, "5g", "rule 2: first reference", i as u64); + } + } + if !(paths.complete() && sets.complete() && paints.complete() && tracks.complete()) { + return refuse(PM, "5g", "rule 2: every entry referenced", 0); + } + let mut tables = FirstRef::new(d.tables.len()); + for t in 0..d.tracks.len() { + for k in d.track_keys(t) { + if k.interp >= 2 && !tables.see(k.interp as usize - 2) { + return refuse(PM, "5g", "rule 2: table first reference", t as u64); + } + } + } + if !tables.complete() { + return refuse(PM, "5g", "rule 2: every table referenced", 0); + } + Ok(()) +} + +/// Whether two entries of a pool of `n` compare equal, found by sorting the pool's +/// indices with `cmp`: at most about `n·log2 n` comparisons, never every pair +/// (§2.5 rule 3). +pub fn has_duplicate(n: usize, mut cmp: impl FnMut(usize, usize) -> Ordering) -> bool { + if n < 2 { + return false; + } + let mut idx: Vec = (0..n as u32).collect(); + idx.sort_unstable_by(|&a, &b| cmp(a as usize, b as usize)); + idx.windows(2).any(|w| cmp(w[0] as usize, w[1] as usize) == Ordering::Equal) +} + +/// Tracks compare by kind, then by their key sequences. +pub fn cmp_tracks(d: &Doc, a: usize, b: usize) -> Ordering { + let key = |k: &Key| (k.t, k.value, k.interp); + d.tracks[a].kind.cmp(&d.tracks[b].kind).then_with(|| d.track_keys(a).iter().map(key).cmp(d.track_keys(b).iter().map(key))) +} + +/// Paths compare by record, then contour ends, then points. +pub fn cmp_paths(d: &Doc, a: usize, b: usize) -> Ordering { + let rec = |p: &Path| (p.n_contours, p.n_points, p.zero, p.bbox); + rec(&d.paths[a]) + .cmp(&rec(&d.paths[b])) + .then_with(|| d.path_ends_of(a).cmp(d.path_ends_of(b))) + .then_with(|| d.path_points_of(a).cmp(d.path_points_of(b))) +} + +/// §2.5 rule 3. +fn no_duplicates(d: &Doc) -> Result<(), Refusal> { + if has_duplicate(d.sets.len(), |a, b| d.sets[a].sha256.cmp(&d.sets[b].sha256)) { + return refuse(PM, "5g", "rule 3: duplicate set", 0); + } + if has_duplicate(d.paints.len(), |a, b| d.paints[a].cmp(&d.paints[b])) { + return refuse(PM, "5g", "rule 3: duplicate paint", 0); + } + if has_duplicate(d.tracks.len(), |a, b| cmp_tracks(d, a, b)) { + return refuse(PM, "5g", "rule 3: duplicate track", 0); + } + if has_duplicate(d.paths.len(), |a, b| cmp_paths(d, a, b)) { + return refuse(PM, "5g", "rule 3: duplicate path", 0); + } + if has_duplicate(d.tables.len(), |a, b| d.tables[a].cmp(&d.tables[b])) { + return refuse(PM, "5g", "rule 3: duplicate table", 0); + } + Ok(()) +} + +/// §2.5 rule 4. +fn text_blocks(d: &Doc) -> Result<(), Refusal> { + let mut named = vec![false; d.texts.len()]; + for it in &d.items { + if (it.kind == KIND_RUN || it.kind == KIND_PATH) && it.text != NONE { + named[it.text as usize] = true; + } + } + if let Some(t) = named.iter().position(|n| !n) { + return refuse(PM, "5g", "rule 4: a block nothing draws", t as u64); + } + let mut max_group = 0u16; + for (i, t) in d.texts.iter().enumerate() { + let g = t.group; + if g != 0 { + if g > max_group.saturating_add(1) { + return refuse(PM, "5g", "rule 4: group numbered out of first use", i as u64); + } + if g <= max_group && d.texts[i - 1].group != g { + return refuse(PM, "5g", "rule 4: a group's blocks are not contiguous", i as u64); + } + max_group = max_group.max(g); + } + if t.ruby != 0 { + let base = t.ruby as usize - 1; + if base >= i { + return refuse(PM, "5g", "rule 4: ruby names a later block", i as u64); + } + let s = d.string(base); + let (a, n) = (u64::from(t.ruby_start), u64::from(t.ruby_len)); + if a + n > s.len() as u64 || !boundary(s, a) || !boundary(s, a + n) { + return refuse(PM, "5g", "rule 4: ruby range", i as u64); + } + } + } + Ok(()) +} + +/// §2.5 rule 5. +fn clusters(d: &Doc) -> Result<(), Refusal> { + for (i, it) in d.items.iter().enumerate() { + if it.kind != KIND_RUN { + continue; + } + let cs = d.run_clusters(i); + if cs.iter().map(|c| u64::from(c.glyph_count)).sum::() != u64::from(it.n_glyphs) { + return refuse(PM, "5g", "rule 5: glyph counts sum to n_glyphs", i as u64); + } + let s = d.string(it.text as usize); + for c in cs { + let (a, n) = (u64::from(c.byte_first), u64::from(c.byte_len)); + if a + n > s.len() as u64 || !boundary(s, a) || !boundary(s, a + n) { + return refuse(PM, "5g", "rule 5: cluster range", i as u64); + } + if c.glyph_count == 0 && c.byte_len == 0 { + return refuse(PM, "5g", "rule 5: an empty cluster", i as u64); + } + } + } + Ok(()) +} + +/// How a sink obtains held sets (§2.7 step 6): by digest, as a stream it reads from. +pub trait Resolver { + /// Begin reading the held set named by `sha256`; false if the sink cannot obtain it. + fn open(&mut self, sha256: &[u8; 32]) -> bool; + /// Read the next bytes of the set last opened into `buf`; 0 at its end. + fn read(&mut self, buf: &mut [u8]) -> usize; +} + +/// A resolver that holds no set. +pub struct NoSets; + +impl Resolver for NoSets { + fn open(&mut self, _: &[u8; 32]) -> bool { + false + } + fn read(&mut self, _: &mut [u8]) -> usize { + 0 + } +} + +/// A resolver over sets held in memory, found by their SHA-256. +#[derive(Default)] +pub struct SetStore { + sets: Vec<([u8; 32], Vec)>, + open: Option<(usize, usize)>, +} + +impl SetStore { + pub fn new() -> SetStore { + SetStore::default() + } + /// Hold `bytes` under their SHA-256. + pub fn add(&mut self, bytes: Vec) { + let h = crate::sha256::sha256(&bytes); + if !self.sets.iter().any(|(k, _)| *k == h) { + self.sets.push((h, bytes)); + } + } + /// Hold `bytes` under a digest of the caller's choosing (for refusal vectors). + pub fn add_as(&mut self, sha256: [u8; 32], bytes: Vec) { + self.sets.push((sha256, bytes)); + } + pub fn len(&self) -> usize { + self.sets.len() + } + pub fn is_empty(&self) -> bool { + self.sets.is_empty() + } +} + +impl Resolver for SetStore { + fn open(&mut self, sha256: &[u8; 32]) -> bool { + self.open = self.sets.iter().position(|(k, _)| k == sha256).map(|i| (i, 0)); + self.open.is_some() + } + fn read(&mut self, buf: &mut [u8]) -> usize { + let Some((i, at)) = self.open else { return 0 }; + let src = &self.sets[i].1[at..]; + let n = src.len().min(buf.len()); + buf[..n].copy_from_slice(&src[..n]); + self.open = Some((i, at + n)); + n + } +} + +/// Read at most `limit` bytes of the set the resolver has open. +pub fn read_held(r: &mut dyn Resolver, limit: usize) -> Vec { + const CHUNK: usize = 1 << 16; + let mut data: Vec = Vec::new(); + while data.len() < limit { + let start = data.len(); + let n = (limit - start).min(CHUNK); + data.resize(start + n, 0); + let got = r.read(&mut data[start..start + n]); + data.truncate(start + got.min(n)); + if got == 0 { + break; + } + } + data +} + +/// A payload that passed every check of §2.7, with its sets and each listed size's +/// cost. +#[derive(Clone, Debug)] +pub struct Loaded { + pub doc: Doc, + pub sets: Vec, + pub costs: Vec, +} + +/// Steps 6 and 7: the sets, then the glyphs. +pub fn load_sets(d: &Doc, r: &mut dyn Resolver) -> Result, Refusal> { + let mut out = Vec::with_capacity(d.sets.len()); + let mut at = 0usize; + for (i, s) in d.sets.iter().enumerate() { + let i = i as u64; + let len = s.length as usize; + let bytes: Vec = if s.carriage == 1 { + let b = d.inline[at..at + len].to_vec(); + at += len; + b + } else { + if !r.open(&s.sha256) { + return refuse(Code::OutlineNotHeld, "6", "held set not obtained", i); + } + read_held(r, len + 1) + }; + if bytes.len() != len { + return refuse(Code::OutlineMismatch, "6", "length", i); + } + if crate::sha256::sha256(&bytes) != s.sha256 { + return refuse(Code::OutlineMismatch, "6", "sha256", i); + } + match wos1::parse(&bytes) { + Ok(w) => out.push(w), + Err(e) => return Err(Refusal { step: "6", index: i, ..e }), + } + } + for (i, it) in d.items.iter().enumerate() { + if it.kind != KIND_RUN { + continue; + } + let set = &out[it.reference as usize]; + for (k, g) in d.run_glyphs(i).iter().enumerate() { + if set.glyph(g.gid).is_none() { + return refuse(Code::GlyphMissing, "7", "gid not in the run's set", (d.ix.item_glyph0[i] as usize + k) as u64); + } + } + } + Ok(out) +} + +/// Steps 1–9 of §2.7. +pub fn load(b: &[u8], r: &mut dyn Resolver) -> Result { + let doc = parse(b)?; + let sets = load_sets(&doc, r)?; + crate::place::interval_check(&doc, &sets)?; + let costs = crate::place::check_costs(&doc, &sets)?; + Ok(Loaded { doc, sets, costs }) +} diff --git a/wai/wai-vector/tests/arith.rs b/wai/wai-vector/tests/arith.rs new file mode 100644 index 000000000..3c767e133 --- /dev/null +++ b/wai/wai-vector/tests/arith.rs @@ -0,0 +1,79 @@ +//! §3.0, §3.9, §2.9: `div255`, `R_rat`, `R_half_up` and the straight-alpha channel, +//! against their definitions as exact rationals. + +use wai_vector::arith::*; + +/// `⌊n/d⌋` of the exact rational, in `i128`. +fn floor_q(n: i128, d: i128) -> i128 { + n.div_euclid(d) +} + +#[test] +fn div255_over_every_input() { + for x in 0..=65_025u32 { + let want = floor_q(2 * i128::from(x) + 255, 510); + assert_eq!(i128::from(div255(x)), want, "div255({x}) is the half-up rounding of x/255"); + // The rq form: pre-bias 128, multiplier 257, shift 16, floor. + assert_eq!(div255(x), ((x + 128) * 257) >> 16, "rq form at {x}"); + } + assert_eq!(div255(65_025), 255); + for c in 0..=255u32 { + assert_eq!(div255(255 * c), c, "div255(255c) = c"); + } +} + +#[test] +fn r_rat_is_half_up_of_the_exact_rational() { + for d in 1i64..=300 { + for n in -3_000i64..=3_000 { + let want = floor_q(2 * i128::from(n) + i128::from(d), 2 * i128::from(d)); + assert_eq!(i128::from(r_rat(n, d)), want, "R_rat({n}, {d})"); + } + } + let big = (1i64 << 58) - 1; + for d in [1i64, 2, 3, 1 << 20, (1 << 28) - 1, 1 << 28] { + for n in [big, -big, big - 7, -big + 7, 0, d / 2, -(d / 2), (d + 1) / 2, -(d + 1) / 2] { + let want = floor_q(2 * i128::from(n) + i128::from(d), 2 * i128::from(d)); + assert_eq!(i128::from(r_rat(n, d)), want, "R_rat({n}, {d})"); + } + } +} + +#[test] +fn r_half_up_is_the_rounded_shift() { + for s in 0u32..=20 { + for p in (-(1i64 << 21)..=(1 << 21)).step_by(13) { + let want = if s == 0 { i128::from(p) } else { floor_q(i128::from(p) + (1i128 << (s - 1)), 1i128 << s) }; + assert_eq!(i128::from(r_half_up(p, s)), want, "R_half_up({p}, {s})"); + } + } + for p in [-(1i64 << 47), (1i64 << 47) - 1, -32_768, 32_768, -1, 1] { + assert_eq!(i128::from(r_half_up(p, 16)), floor_q(i128::from(p) + (1 << 15), 1 << 16)); + } +} + +#[test] +fn straight_alpha_is_r_rat_over_every_c_le_a() { + for a in 1..=255u8 { + for c in 0..=a { + let v = unpremul(c, a); + assert_eq!(i64::from(v), r_rat(255 * i64::from(c), i64::from(a)), "({c}, {a})"); + assert_eq!(u32::from(v), (255 * u32::from(c) + u32::from(a) / 2) / u32::from(a)); + } + } + assert_eq!(unpremul(0, 0), 0); +} + +#[test] +fn quantisers_are_even_and_bounded() { + for v in -(1i32 << 19)..=(1 << 19) { + let (nz, eo) = (alpha_nonzero(v), alpha_evenodd(v)); + assert_eq!(nz, alpha_nonzero(-v)); + assert_eq!(eo, alpha_evenodd(-v)); + } + assert_eq!(alpha_nonzero(1 << 17), 255); + assert_eq!(alpha_nonzero(1 << 16), 128); + assert_eq!(alpha_evenodd(1 << 17), 255); + assert_eq!(alpha_evenodd(1 << 18), 0); + assert_eq!(alpha_nonzero(i32::MIN), 255); +} diff --git a/wai/wai-vector/tests/canonical.rs b/wai/wai-vector/tests/canonical.rs new file mode 100644 index 000000000..bee718763 --- /dev/null +++ b/wai/wai-vector/tests/canonical.rs @@ -0,0 +1,84 @@ +//! §2.5: one encoding per scene. Every payload the parser reads back writes the same +//! bytes, the authoring form round-trips, and duplicates are found by sorting. + +use std::cell::Cell; +use std::cmp::Ordering; + +use wai_vector::vectors::all_vectors; +use wai_vector::wvg1::{self, Doc, Key, Track, cmp_tracks, has_duplicate}; +use wai_vector::{form, wos1}; + +#[test] +fn canonical_round_trip_on_every_vector() { + let (mut n, mut forms) = (0, 0); + for v in all_vectors() { + match v.ext { + "wvg1" => { + // Every payload the form can split goes to the form and back unchanged. + let f = form::to_json(&v.bytes, ""); + assert_eq!(form::to_bytes(&f).as_deref(), Ok(&v.bytes[..]), "{}: form round trip", v.name); + forms += 1; + if let Ok(d) = wvg1::parse(&v.bytes) { + assert_eq!(d.write(), v.bytes, "{}: parse then write", v.name); + n += 1; + } + } + "wos1" => { + if let Ok(w) = wos1::parse(&v.bytes) { + assert_eq!(w.write(), v.bytes, "{}: parse then write", v.name); + n += 1; + } + } + _ => {} + } + } + assert!(n > 25 && forms > 200, "{n} round trips, {forms} forms"); +} + +/// Review A's F10 shape: 65,535 tracks of 64 keys, equal but for the last key, in a +/// fixed shuffle. Detection sorts, so it compares at most 2·n·⌈log2 n⌉ times, never +/// every pair (about 2^31). +#[test] +fn duplicates_by_sorting_comparison_count() { + let n = 65_535usize; + let k = 64u32; + let mut order: Vec = (0..n as u32).collect(); + let mut s = 0x9E37_79B9_7F4A_7C15u64; + for i in (1..n).rev() { + s ^= s << 13; + s ^= s >> 7; + s ^= s << 17; + order.swap(i, (s % (i as u64 + 1)) as usize); + } + let mut d = Doc::default(); + for &v in &order { + d.tracks.push(Track { kind: 2, zero1: 0, zero2: 0, n_keys: k }); + for j in 0..k { + let value = if j + 1 == k { v as i32 } else { 0 }; + d.keys.push(Key { t: j, value, interp: 0, zero: [0; 3] }); + } + } + d.index(); + let bound = 2 * n as u64 * u64::from(usize::BITS - (n - 1).leading_zeros()); + assert_eq!(bound, 2 * 65_535 * 16); + let count = Cell::new(0u64); + let cmp = |a: usize, b: usize| -> Ordering { + count.set(count.get() + 1); + assert!(count.get() <= bound, "more than {bound} comparisons"); + cmp_tracks(&d, a, b) + }; + assert!(!has_duplicate(n, cmp), "no two tracks are equal"); + assert!(count.get() <= bound); + eprintln!("{n} tracks: {} comparisons, bound {bound}, pairs {}", count.get(), n as u64 * (n as u64 - 1) / 2); + // Two equal tracks are found within the same bound. + let last = d.ix.track_key0[n - 1] as usize + k as usize - 1; + let other = d.ix.track_key0[n - 2] as usize + k as usize - 1; + d.keys[last].value = d.keys[other].value; + count.set(0); + let cmp = |a: usize, b: usize| -> Ordering { + count.set(count.get() + 1); + assert!(count.get() <= bound, "more than {bound} comparisons"); + cmp_tracks(&d, a, b) + }; + assert!(has_duplicate(n, cmp), "the two equal tracks are found"); +} diff --git a/wai/wai-vector/tests/clock_track.rs b/wai/wai-vector/tests/clock_track.rs new file mode 100644 index 000000000..2dacf5fef --- /dev/null +++ b/wai/wai-vector/tests/clock_track.rs @@ -0,0 +1,101 @@ +//! §3.1, §3.2 and §2.7 *Render*: the frame range by division, and track evaluation. + +use wai_vector::clock::{frame_range, frames, in_range}; +use wai_vector::track::eval; +use wai_vector::wvg1::{Key, Table}; + +fn key(t: u32, value: i32, interp: u8) -> Key { + Key { t, value, interp, zero: [0; 3] } +} + +/// At `P = 2^40` (tb = 2^20, a rate of 1/2^20), `g·P` does not fit 64 bits for +/// `g ≥ 2^23`, and wraps to 0 at `g = 2^24`. The range is decided by division. +#[test] +fn frame_range_by_division() { + let p = 1u64 << 40; + let (t0, dur) = (0u32, (1u32 << 31) - 1); + assert_eq!(frame_range(t0, dur, p), (0, 0)); + for g in [1u64, 1 << 23, 1 << 24, (1 << 24) + 1, (1 << 31) - 1, 1 << 32, 1 << 63, u64::MAX] { + assert!(!in_range(g, t0, dur, p), "frame {g} is out of range at P = 2^40"); + } + assert!(in_range(0, t0, dur, p)); + // An ordinary rate: 25 fps at tb = 120000, from t0 = 4801 for one second. + let p = 4_800; + // Its last tick is 124,800 = 26·4800. + assert_eq!(frame_range(4_801, 120_000, p), (2, 26)); + assert!(!in_range(1, 4_801, 120_000, p) && in_range(2, 4_801, 120_000, p) && in_range(26, 4_801, 120_000, p) && !in_range(27, 4_801, 120_000, p)); + // A document with no frame at a rate: one tick between frame ticks. + assert_eq!(frames(1, 1, 4_800).count(), 0); + assert!(!in_range(0, 1, 1, 4_800)); +} + +/// M2: a 750-frame roll at an integer speed, keys on frame ticks, lands every frame on +/// the grid at every listed rate. +#[test] +fn integer_speed_roll_lands_on_the_grid() { + let tb = 120_000u64; + for (num, den) in [(25u64, 1u64), (30_000, 1_001), (60, 1), (24_000, 1_001)] { + let p = den * tb / num; + for k in [1i64, 3, -2, 7] { + for frames_n in [750u64, 749, 1] { + if frames_n * p >= 1 << 31 { + continue; + } + let v0 = 12_345i64; + let v1 = v0 + 256 * k * frames_n as i64; + let keys = [key(0, v0 as i32, 1), key((frames_n * p) as u32, v1 as i32, 0)]; + for m in 0..=frames_n { + let v = eval(&keys, &[], (m * p) as i64); + assert_eq!(v, v0 + 256 * k * m as i64, "{num}/{den}, k = {k}, {frames_n} frames, frame {m}"); + } + } + } + } +} + +/// M5: every value lies between the two keys it interpolates, and each key's value is +/// reached exactly, for linear keys and for tables that are not monotone. +#[test] +fn values_stay_between_their_keys() { + let mut s = 0x2545_F491_4F6C_DD1Du64; + let mut rnd = |n: u64| { + s ^= s << 13; + s ^= s >> 7; + s ^= s << 17; + s % n + }; + let mut tables = Vec::new(); + for _ in 0..8 { + let mut e = [0u32; 17]; + e[16] = 65_536; + for x in e.iter_mut().take(16).skip(1) { + *x = rnd(65_537) as u32; + } + tables.push(Table { e }); + } + tables.push(Table { e: [0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 65536] }); + for case in 0..4_000 { + let n = 2 + rnd(4) as usize; + let mut t = rnd(1000) as u32; + let mut keys = Vec::new(); + for i in 0..n { + let interp = if i + 1 == n { 0 } else { [0u8, 1, 2, 3, 10][rnd(5) as usize] }; + let value = rnd(1 << 24) as i32 - (1 << 23); + keys.push(key(t, value, interp)); + t += 1 + if case % 3 == 0 { rnd(1 << 30) as u32 / n as u32 } else { rnd(5_000) as u32 }; + } + for (i, w) in keys.windows(2).enumerate() { + let (a, b) = (w[0], w[1]); + let (lo, hi) = (a.value.min(b.value) as i64, a.value.max(b.value) as i64); + assert_eq!(eval(&keys, &tables, i64::from(a.t)), i64::from(a.value), "key {i} exact"); + for tau in [a.t as i64, a.t as i64 + 1, (a.t as i64 + b.t as i64) / 2, b.t as i64 - 1] { + let v = eval(&keys, &tables, tau); + assert!(lo <= v && v <= hi, "case {case}: {v} outside [{lo}, {hi}] at {tau}"); + } + } + let last = keys[n - 1]; + assert_eq!(eval(&keys, &tables, i64::from(last.t)), i64::from(last.value)); + assert_eq!(eval(&keys, &tables, i64::from(last.t) + 99), i64::from(last.value)); + assert_eq!(eval(&keys, &tables, i64::from(keys[0].t) - 1), i64::from(keys[0].value)); + } +} diff --git a/wai/wai-vector/tests/corpus.rs b/wai/wai-vector/tests/corpus.rs new file mode 100644 index 000000000..d9c672a30 --- /dev/null +++ b/wai/wai-vector/tests/corpus.rs @@ -0,0 +1,52 @@ +//! `vector-conformance/`: the generator reproduces every committed file, and every +//! expected file is recomputed from its vector alone. + +use std::path::PathBuf; + +use wai_vector::vectors::{self, CORPUS}; +use wai_vector::wvg1::SetStore; + +fn wai() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("..") +} + +#[test] +fn the_generator_reproduces_the_committed_corpus() { + let files = vectors::generate().unwrap(); + assert!(files.len() > 500); + for (rel, bytes) in files { + let have = std::fs::read(wai().join(&rel)).unwrap_or_else(|e| panic!("{rel}: {e}")); + assert!(have == bytes, "{rel}: the generator writes other bytes"); + } +} + +#[test] +fn every_expected_file_is_recomputed_from_its_vector() { + let corpus = wai().join(CORPUS); + let mut store = SetStore::new(); + let mut sets: Vec = std::fs::read_dir(corpus.join("sets")).unwrap().flatten().map(|e| e.path()).collect(); + sets.sort(); + for p in sets { + store.add(std::fs::read(p).unwrap()); + } + let mut n = 0; + let mut groups: Vec = std::fs::read_dir(corpus.join("vectors")).unwrap().flatten().map(|e| e.path()).collect(); + groups.sort(); + for gdir in groups { + let group = gdir.file_name().unwrap().to_string_lossy().into_owned(); + let mut files: Vec = std::fs::read_dir(&gdir).unwrap().flatten().map(|e| e.path()).collect(); + files.sort(); + for f in files { + let name = f.file_stem().unwrap().to_string_lossy().into_owned(); + let ext = f.extension().unwrap().to_string_lossy().into_owned(); + if name == "index" || (ext == "json" && group != "arith") { + continue; + } + let got = vectors::recompute(&group, &ext, &std::fs::read(&f).unwrap(), &mut store).unwrap(); + let exp = std::fs::read_to_string(corpus.join("expected").join(&group).join(format!("{name}.json"))).unwrap(); + assert_eq!(got, exp, "{group}/{name}.{ext}"); + n += 1; + } + } + assert!(n > 250, "{n} vectors"); +} diff --git a/wai/wai-vector/tests/fuzz_smoke.rs b/wai/wai-vector/tests/fuzz_smoke.rs new file mode 100644 index 000000000..ce6c013b6 --- /dev/null +++ b/wai/wai-vector/tests/fuzz_smoke.rs @@ -0,0 +1,103 @@ +//! A deterministic, corpus-seeded fuzz of the `WVG1` and `WOS1` parsers (§4.7 of the +//! design; §2.7): no input panics, and every input accepted writes back to its own +//! bytes. Seeds: every vector of the corpus and the files under `fuzz/seeds/`. +//! +//! `WAI_VECTOR_FUZZ_ITERS` sets the mutations per seed (default 40). + +use std::panic::{AssertUnwindSafe, catch_unwind}; +use std::path::PathBuf; + +use wai_vector::vectors::{all_vectors, corpus_store}; +use wai_vector::{wos1, wvg1}; + +struct Rng(u64); + +impl Rng { + fn next(&mut self) -> u64 { + self.0 ^= self.0 << 13; + self.0 ^= self.0 >> 7; + self.0 ^= self.0 << 17; + self.0 + } + fn below(&mut self, n: usize) -> usize { + (self.next() % n.max(1) as u64) as usize + } +} + +const INTERESTING: [u32; 14] = [0, 1, 2, 3, 15, 16, 255, 0xFFFF, 0x1_0000, 0x7FFF_FFFF, 0x8000_0000, 0xFFFF_FFFF, 1 << 20, (1 << 22) + 1]; + +fn mutate(seed: &[u8], r: &mut Rng) -> Vec { + let mut b = seed.to_vec(); + for _ in 0..1 + r.below(4) { + let n = b.len(); + match r.below(7) { + 0 if n > 0 => { + let i = r.below(n); + b[i] ^= 1 << r.below(8); + } + 1 if n > 0 => { + let i = r.below(n); + b[i] = r.next() as u8; + } + 2 if n > 0 => b.truncate(r.below(n)), + 3 => b.push(r.next() as u8), + 4 if n > 0 => { + let i = r.below(n); + b.insert(i, r.next() as u8); + } + 5 if n >= 4 => { + // A field-sized value at a 4-aligned offset, most often in a header. + let i = if r.below(2) == 0 { 4 * r.below(20.min(n / 4)) } else { 4 * r.below(n / 4) }; + let v = INTERESTING[r.below(INTERESTING.len())]; + b[i..i + 4].copy_from_slice(&v.to_le_bytes()); + } + 6 if n >= 2 => { + let i = r.below(n - 1); + let v = INTERESTING[r.below(INTERESTING.len())] as u16; + b[i..i + 2].copy_from_slice(&v.to_le_bytes()); + } + _ => {} + } + } + b +} + +#[test] +fn fuzz_smoke() { + let iters: usize = std::env::var("WAI_VECTOR_FUZZ_ITERS").ok().and_then(|s| s.parse().ok()).unwrap_or(40); + let mut seeds: Vec<(bool, Vec)> = all_vectors() + .into_iter() + .filter(|v| v.ext != "json" && v.bytes.len() <= 1 << 16) + .map(|v| (v.ext == "wos1", v.bytes)) + .collect(); + let dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("fuzz/seeds"); + let mut names: Vec = std::fs::read_dir(&dir).expect("fuzz/seeds").flatten().map(|e| e.path()).collect(); + names.sort(); + assert!(!names.is_empty()); + for p in names { + seeds.push((p.extension().is_some_and(|x| x == "wos1"), std::fs::read(&p).unwrap())); + } + let mut store = corpus_store(); + let mut r = Rng(0x5EED_0F_D7_0002); + let (mut runs, mut accepted) = (0usize, 0usize); + for (is_wos1, seed) in &seeds { + for _ in 0..iters { + let input = mutate(seed, &mut r); + let ok = catch_unwind(AssertUnwindSafe(|| { + if *is_wos1 { + wos1::parse(&input).ok().map(|w| w.write()) + } else { + wvg1::load(&input, &mut store).ok().map(|l| l.doc.write()) + } + })); + let out = ok.unwrap_or_else(|_| panic!("a parser panicked on input {}", wai_vector::json::hex(&input))); + if let Some(written) = out { + assert_eq!(written, input, "an accepted input writes back to its own bytes"); + accepted += 1; + } + runs += 1; + } + } + eprintln!("fuzz smoke: {runs} inputs from {} seeds, {accepted} accepted", seeds.len()); + assert!(runs >= seeds.len() * iters); +} diff --git a/wai/wai-vector/tests/geometry_cost.rs b/wai/wai-vector/tests/geometry_cost.rs new file mode 100644 index 000000000..bafdc54c4 --- /dev/null +++ b/wai/wai-vector/tests/geometry_cost.rs @@ -0,0 +1,135 @@ +//! §3.4: the load-time interval check and the per-frame cost, at their boundaries, and +//! review A's attack payloads refused with the codes §2.7 gives. + +use wai_vector::bounds::{COST_CEILING, DEVICE_MAX, DEVICE_MIN}; +use wai_vector::place::{self, fill_cost, origin, point_offset, linear_map}; +use wai_vector::refuse::Code; +use wai_vector::track::eval; +use wai_vector::vectors::{corpus_store, find}; +use wai_vector::wvg1::{self, NoSets}; + +fn load(group: &str, name: &str) -> Result { + let v = find(group, name).unwrap_or_else(|| panic!("no vector {group}/{name}")); + wvg1::load(&v.bytes, &mut corpus_store()) +} + +#[test] +fn interval_check_boundary() { + for name in ["x-high-edge", "x-low-edge", "y-high-edge", "empty-glyph-edge"] { + assert!(load("geometry", name).is_ok(), "{name}: an end at the range's edge is accepted"); + } + for name in ["x-high-over", "x-low-over", "y-high-over", "second-size-over", "inactive-item-over", "clip-over", "groups-sum-over", "empty-glyph-over"] { + assert_eq!(load("geometry", name).unwrap_err().code, Code::GeometryRange, "{name}"); + } +} + +/// The rule is the interval computation, not the true range: this document's device +/// x reaches exactly 2^22 − 1 at every tick, and it is refused. +#[test] +fn interval_not_true_range() { + let v = find("geometry", "true-range-fits").unwrap(); + let d = wvg1::parse(&v.bytes).unwrap(); + // The true range, evaluated at every tick of the item's window and every corner. + let it = &d.items[0]; + let (w, dw) = (i64::from(d.sizes[0].w), i64::from(d.header.design_w)); + let track = |s: usize| d.track_keys(it.slots[s] as usize); + let bx = d.paths[0].bbox; + let (mut lo, mut hi) = (i64::MAX, i64::MIN); + for tau in i64::from(it.t_on)..i64::from(it.t_off) { + let m = [eval(track(0), &d.tables, tau), eval(track(1), &d.tables, tau), 0, 65_536]; + let l = linear_map(m, i64::from(it.unit_scale), w, dw); + let t = origin([eval(track(4), &d.tables, tau), 0], m, [0, 0], w, dw); + for px in [bx[0], bx[2]] { + for py in [bx[1], bx[3]] { + let x = t[0] + point_offset(l, [i64::from(px), i64::from(py)])[0]; + lo = lo.min(x); + hi = hi.max(x); + } + } + } + assert!(DEVICE_MIN <= lo && hi == DEVICE_MAX, "the true range [{lo}, {hi}] fits, its end at 2^22 - 1"); + assert_eq!(load("geometry", "true-range-fits").unwrap_err().code, Code::GeometryRange); +} + +#[test] +fn cost_ceiling_boundary() { + let l = load("cost", "ceiling").expect("a cost of exactly 2^32 - 1 is accepted"); + assert_eq!(l.costs, vec![COST_CEILING]); + assert_eq!(load("cost", "ceiling-plus-one").unwrap_err().code, Code::TooLarge); + let e = load("cost", "ceiling-stated-low").unwrap_err(); + assert_eq!((e.code, e.step), (Code::PayloadMalformed, "9"), "a stated cost off by one"); + let e = load("cost", "reused-path-stated-high").unwrap_err(); + assert_eq!((e.code, e.step), (Code::PayloadMalformed, "9")); +} + +/// Each use of a reused path counts: three fills of one 4-point path whose box is +/// 11 × 11 pixels at 640 × 360. +#[test] +fn cost_counts_a_reused_path_per_use() { + let one = 4 * (1024 + 11 + 11) + 11 * 11; + assert_eq!(fill_cost(4, 11, 11), one); + assert_eq!(load("cost", "reused-path").unwrap().costs, vec![640 * 360 + 3 * one]); + assert_eq!(load("cost", "touching-windows").unwrap().costs, vec![640 * 360 + one], "touching windows count once"); + // A group: w·h, plus its clip (101 × 51 pixels, 4 points), plus its child. + let clip = fill_cost(4, 101, 51); + assert_eq!(load("cost", "group").unwrap().costs, vec![2 * 640 * 360 + clip + one]); +} + +#[test] +fn review_a_attack_payloads_are_refused() { + for name in ["attack-a-reused-full-canvas", "attack-b-reused-cubic-path", "attack-c-full-canvas-glyphs"] { + let e = load("cost", name).unwrap_err(); + assert_eq!((e.code, e.step), (Code::TooLarge, "9"), "{name}: the cost exceeds the ceiling"); + } + let one = load("cost", "attack-b-one-item").expect("one heavy item alone is accepted"); + assert_eq!(one.costs, vec![4096 * 4096 + fill_cost(16_381, 4096, 4096)]); + for name in ["attack-d-64-held-sets", "attack-d-3-held-sets"] { + let e = load("refusals", name).unwrap_err(); + assert_eq!((e.code, e.step), (Code::TooLarge, "2"), "{name}: held_len past 2^26 before anything is fetched"); + } + assert_eq!(load("refusals", "attack-d-2-held-sets").unwrap_err().code, Code::OutlineNotHeld); + let e = load("refusals", "attack-e-duplicate-tracks").unwrap_err(); + assert_eq!((e.code, e.step), (Code::PayloadMalformed, "5g")); + // The cost needs nothing but the payload and its sets: computed again here. + let v = find("cost", "attack-a-reused-full-canvas").unwrap(); + let d = wvg1::parse(&v.bytes).unwrap(); + let sets = wvg1::load_sets(&d, &mut NoSets).unwrap(); + assert_eq!(place::costs(&d, &sets), vec![4096 * 4096 + 260 * fill_cost(4, 4096, 4096)]); +} + +/// Review A's three shapes at full scale, built in memory: the cost reproduces the +/// figures RC2 recomputed for the design (A: 65,536 fills of a full-canvas +/// rectangle; C: 2^20 full-canvas glyph records in 256 runs of 4,096, with each run's +/// hull term), and B's from its formula. +#[test] +fn review_a_full_scale_costs() { + let cost_of = |d: &wvg1::Doc| { + let d = wvg1::parse(&d.write()).expect("steps 1-5"); + let sets = wvg1::load_sets(&d, &mut NoSets).expect("inline sets"); + place::costs(&d, &sets) + }; + let mut a = wvg1::parse(&find("cost", "attack-a-reused-full-canvas").unwrap().bytes).unwrap(); + let item = a.items[0]; + a.items = vec![item; 65_536]; + a.sync_counts(); + assert_eq!(cost_of(&a), vec![1_101_944_324_096]); + let mut b = wvg1::parse(&find("cost", "attack-b-reused-cubic-path").unwrap().bytes).unwrap(); + let item = b.items[0]; + b.items = vec![item; 65_536]; + b.sync_counts(); + // RC2 counted 5,460 cubics as 16,380 points (10,992,717,135,872); the path stores + // the start point too, 16,381. + assert_eq!(cost_of(&b), vec![4096 * 4096 + 65_536 * fill_cost(16_381, 4096, 4096)]); + assert_eq!(4096 * 4096 + 65_536 * fill_cost(16_380, 4096, 4096), 10_992_717_135_872); + let mut c = wvg1::parse(&find("cost", "attack-c-full-canvas-glyphs").unwrap().bytes).unwrap(); + let mut run = c.items[0]; + run.n_glyphs = 4096; + let g = c.glyphs[0]; + let mut cl = c.clusters[0]; + cl.glyph_count = 4096; + c.items = vec![run; 256]; + c.glyphs = vec![g; 1 << 20]; + c.clusters = vec![cl; 256]; + c.sync_counts(); + assert_eq!(cost_of(&c), vec![17_635_152_494_592]); +} diff --git a/wai/wai-vector/tests/held_sets.rs b/wai/wai-vector/tests/held_sets.rs new file mode 100644 index 000000000..fc06556c5 --- /dev/null +++ b/wai/wai-vector/tests/held_sets.rs @@ -0,0 +1,58 @@ +//! §2.7 step 6: a held set is read by digest, at most `length + 1` bytes of it, and +//! hashed before it is parsed. + +use wai_vector::refuse::Code; +use wai_vector::sha256::sha256; +use wai_vector::vectors::{corpus_store, find, sets}; +use wai_vector::wvg1::{self, Resolver}; + +/// A resolver that serves one stream for one digest and counts the bytes it hands out. +struct Counting { + sha: [u8; 32], + data: Vec, + at: usize, + served: usize, +} + +impl Resolver for Counting { + fn open(&mut self, sha: &[u8; 32]) -> bool { + self.at = 0; + *sha == self.sha + } + fn read(&mut self, buf: &mut [u8]) -> usize { + let n = buf.len().min(self.data.len() - self.at); + buf[..n].copy_from_slice(&self.data[self.at..self.at + n]); + self.at += n; + self.served += n; + n + } +} + +#[test] +fn held_set_one_byte_longer_is_a_mismatch() { + let v = find("refusals", "s6-held-one-byte-longer").unwrap(); + let e = wvg1::load(&v.bytes, &mut corpus_store()).unwrap_err(); + assert_eq!((e.code, e.step), (Code::OutlineMismatch, "6")); + let v = find("canonical", "held").unwrap(); + assert!(wvg1::load(&v.bytes, &mut corpus_store()).is_ok()); +} + +/// A stream far longer than its record's length: the sink reads `length + 1` bytes and +/// stops. +#[test] +fn a_counting_resolver_sees_at_most_length_plus_one_bytes() { + let b = sets::set_b().write(); + let v = find("canonical", "held").unwrap(); + let d = wvg1::parse(&v.bytes).unwrap(); + assert_eq!(d.sets[0].length as usize, b.len()); + let mut long = b.clone(); + long.extend(std::iter::repeat_n(0xAB, 1 << 20)); + let mut r = Counting { sha: sha256(&b), data: long, at: 0, served: 0 }; + let e = wvg1::load(&v.bytes, &mut r).unwrap_err(); + assert_eq!(e.code, Code::OutlineMismatch); + assert!(r.served <= b.len() + 1, "the sink read {} bytes of a set of length {}", r.served, b.len()); + // The exact stream: read to its end and accepted. + let mut r = Counting { sha: sha256(&b), data: b.clone(), at: 0, served: 0 }; + assert!(wvg1::load(&v.bytes, &mut r).is_ok()); + assert_eq!(r.served, b.len()); +} diff --git a/wai/wai-vector/tests/peak_alloc.rs b/wai/wai-vector/tests/peak_alloc.rs new file mode 100644 index 000000000..aeba9b787 --- /dev/null +++ b/wai/wai-vector/tests/peak_alloc.rs @@ -0,0 +1,72 @@ +//! Parse memory is O(input) plus fixed: nothing is reserved by a header's counts until +//! the exact length shows the bytes back them (§2.0, §2.7 steps 2–3). +//! +//! One test in its own binary, so the counting allocator sees only it. + +use std::alloc::{GlobalAlloc, Layout, System}; +use std::sync::atomic::{AtomicUsize, Ordering}; + +use wai_vector::vectors::{all_vectors, corpus_store}; +use wai_vector::wvg1::{self, Header}; + +struct Counting; + +static NOW: AtomicUsize = AtomicUsize::new(0); +static PEAK: AtomicUsize = AtomicUsize::new(0); + +unsafe impl GlobalAlloc for Counting { + unsafe fn alloc(&self, l: Layout) -> *mut u8 { + let p = unsafe { System.alloc(l) }; + if !p.is_null() { + let n = NOW.fetch_add(l.size(), Ordering::SeqCst) + l.size(); + PEAK.fetch_max(n, Ordering::SeqCst); + } + p + } + unsafe fn dealloc(&self, p: *mut u8, l: Layout) { + unsafe { System.dealloc(p, l) }; + NOW.fetch_sub(l.size(), Ordering::SeqCst); + } +} + +#[global_allocator] +static A: Counting = Counting; + +/// The peak bytes allocated while `f` runs, above what was live before it. +fn peak(f: impl FnOnce()) -> usize { + let base = NOW.load(Ordering::SeqCst); + PEAK.store(base, Ordering::SeqCst); + f(); + PEAK.load(Ordering::SeqCst) - base +} + +const C: usize = 6; +const FIXED: usize = 64 << 10; + +#[test] +fn peak_allocation_is_linear_in_the_input() { + let mut store = corpus_store(); + let held: usize = wai_vector::vectors::sets::corpus_sets().iter().map(|(_, b)| b.len()).max().unwrap(); + let mut worst = 0f64; + for v in all_vectors().into_iter().filter(|v| v.ext == "wvg1") { + let input = v.bytes.len() + held; + let p = peak(|| { + let _ = wvg1::load(&v.bytes, &mut store); + }); + assert!(p <= C * input + FIXED, "{}: peak {p} bytes for {input} bytes of input", v.name); + worst = worst.max(p as f64 / input as f64); + } + // Headers that claim the caps over a payload of 80 bytes: refused at the exact + // length, having reserved nothing the counts name. + let mut h = Header::read(&all_vectors().into_iter().find(|v| v.name == "minimal").unwrap().bytes); + h.n_keys = 1 << 22; + h.n_glyphs = 1 << 20; + h.n_items = 65_536; + let mut b = Vec::new(); + h.write(&mut b); + let p = peak(|| { + assert!(wvg1::parse(&b).is_err()); + }); + assert!(p <= FIXED, "a header claiming the caps made the parser reserve {p} bytes"); + eprintln!("worst peak / input over the corpus: {worst:.2}"); +} diff --git a/wai/wai-vector/tests/refusal_order.rs b/wai/wai-vector/tests/refusal_order.rs new file mode 100644 index 000000000..38f423cd3 --- /dev/null +++ b/wai/wai-vector/tests/refusal_order.rs @@ -0,0 +1,135 @@ +//! §2.7 and §2.1: each code, and the order of the checks, pinned by pairs of faults. + +use wai_vector::refuse::Code; +use wai_vector::vectors::{all_vectors, corpus_store, find}; +use wai_vector::{wos1, wvg1}; + +fn code_of(group: &str, name: &str) -> (Code, &'static str) { + let v = find(group, name).unwrap_or_else(|| panic!("no vector {group}/{name}")); + let r = match v.ext { + "wos1" => wos1::parse(&v.bytes).err(), + _ => wvg1::load(&v.bytes, &mut corpus_store()).err(), + }; + let r = r.unwrap_or_else(|| panic!("{group}/{name} was accepted")); + (r.code, r.step) +} + +fn accepted(group: &str, name: &str) -> bool { + let v = find(group, name).unwrap(); + match v.ext { + "wos1" => wos1::parse(&v.bytes).is_ok(), + _ => wvg1::load(&v.bytes, &mut corpus_store()).is_ok(), + } +} + +#[test] +fn wos1_load_check_order() { + let g = "refusals"; + for (name, code) in [ + ("wos1-short", Code::OutlineMalformed), + ("wos1-magic", Code::OutlineMalformed), + ("wos1-flags", Code::OutlineMalformed), + ("wos1-n-glyphs-cap", Code::TooLarge), + ("wos1-notes-zero", Code::OutlineMalformed), + ("wos1-length", Code::OutlineMalformed), + ("wos1-points-limit", Code::PointsLimit), + ("wos1-gid-order", Code::OutlineMalformed), + ("wos1-sums", Code::OutlineMalformed), + ("wos1-ends-order", Code::OutlineMalformed), + ("wos1-tag", Code::OutlineMalformed), + ("wos1-grammar", Code::OutlineMalformed), + ("wos1-grammar-one-point-control", Code::OutlineMalformed), + ("wos1-box", Code::OutlineMalformed), + ("wos1-notes-utf8", Code::OutlineMalformed), + ("wos1-points-16384", Code::PointsLimit), + ] { + assert_eq!(code_of(g, name).0, code, "{name}"); + } + // The pairs: each fault alone has another code, so the first check wins. + assert_eq!(code_of(g, "wos1-points-limit-before-gid-order"), (Code::PointsLimit, "wos1.4"), "check 4 before check 5"); + assert_eq!(code_of(g, "wos1-zero-before-points-limit"), (Code::OutlineMalformed, "wos1.4"), "records in order"); + assert_eq!(code_of(g, "wos1-points-limit-before-zero"), (Code::PointsLimit, "wos1.4"), "n_points first within a record"); + assert_eq!(code_of(g, "wos1-cap-before-length"), (Code::TooLarge, "wos1.2"), "check 2 before check 3"); + assert_eq!(code_of(g, "wos1-zero-glyphs-before-points-cap"), (Code::OutlineMalformed, "wos1.2"), "field order in check 2"); + assert!(accepted(g, "wos1-set-a")); + assert!(accepted(g, "wos1-points-16383")); +} + +#[test] +fn record_pass_reports_field_range_before_any_cross_table_check() { + // ITEM.kind = 4 with ref = 0, beside an inline set marked held (a step 5(a) sum). + assert_eq!(code_of("refusals", "s4-item-kind-four"), (Code::FieldRange, "4")); + // KEY.interp = 2 + j with j >= n_tables, beside the same sum fault. + assert_eq!(code_of("refusals", "s4-key-interp-before-sum"), (Code::FieldRange, "4")); + // Each fault alone. + assert_eq!(code_of("refusals", "s4-key-interp"), (Code::FieldRange, "4")); + assert_eq!(code_of("refusals", "s5a-inline-sum"), (Code::PayloadMalformed, "5a")); +} + +#[test] +fn the_four_new_sum_rules() { + for name in ["s5a-path-contours-sum", "s5a-path-points-sum", "s5a-strings-sum", "s5a-glyphs-sum", "s5a-clusters-sum"] { + assert_eq!(code_of("refusals", name), (Code::PayloadMalformed, "5a"), "{name}"); + } +} + +#[test] +fn exact_length_and_trailing_bytes() { + let min = find("canonical", "minimal").unwrap().bytes; + assert!(wvg1::load(&min, &mut corpus_store()).is_ok()); + let mut long = min.clone(); + long.push(0); + let e = wvg1::parse(&long).unwrap_err(); + assert_eq!((e.code, e.step), (Code::PayloadMalformed, "3"), "one trailing byte"); + let e = wvg1::parse(&min[..min.len() - 1]).unwrap_err(); + assert_eq!((e.code, e.step), (Code::PayloadMalformed, "3"), "one byte short"); + let e = wvg1::parse(&min[..79]).unwrap_err(); + assert_eq!((e.code, e.step), (Code::PayloadMalformed, "1"), "a short header"); +} + +#[test] +fn steps_in_order() { + let g = "refusals"; + for (name, code, step) in [ + ("s1-magic-before-cap", Code::PayloadMalformed, "1"), + ("s2-cap-before-range", Code::TooLarge, "2"), + ("s2-cap-before-length", Code::TooLarge, "2"), + ("s4-header-before-record", Code::FieldRange, "4"), + ("s4-set-carriage-before-zero", Code::FieldRange, "4"), + ("s4-set-zero-before-length", Code::PayloadMalformed, "4"), + ("s4-item-zero2-before-ref", Code::PayloadMalformed, "4"), + ("s4-item-rule-before-zero2", Code::FieldRange, "4"), + ("s4-path-points-limit-before-zero", Code::PointsLimit, "4"), + ("s5a-sum-before-typing", Code::PayloadMalformed, "5a"), + ("s5c-typing-before-groups", Code::FieldRange, "5c"), + ("s6-order-held-first", Code::OutlineNotHeld, "6"), + ("s6-order-inline-first", Code::OutlineMalformed, "6"), + ("s7-before-geometry", Code::GlyphMissing, "7"), + ] { + assert_eq!(code_of(g, name), (code, step), "{name}"); + } +} + +/// Every vector's code is the one its note names. +#[test] +fn every_vector_has_the_code_its_note_names() { + let mut store = corpus_store(); + let mut n = 0; + for v in all_vectors() { + let got = match v.ext { + "wos1" => wos1::parse(&v.bytes).err().map(|e| e.code.name()), + "wvg1" => wvg1::load(&v.bytes, &mut store).err().map(|e| e.code.name()), + _ => continue, + }; + let want = match v.note.rsplit_once("-> ") { + Some((_, rest)) => Some(rest.split(|c: char| !(c.is_ascii_lowercase() || c == '_')).next().unwrap()), + None => { + assert!(v.note.ends_with("accepted"), "{}: the note names no outcome", v.name); + None + } + }; + assert_eq!(got, want, "{}/{}: {}", v.group, v.name, v.note); + n += 1; + } + assert!(n > 200, "{n} vectors"); +} diff --git a/wai/wai-vector/wasm/Cargo.lock b/wai/wai-vector/wasm/Cargo.lock new file mode 100644 index 000000000..90f97ccee --- /dev/null +++ b/wai/wai-vector/wasm/Cargo.lock @@ -0,0 +1,14 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "wai-vector" +version = "0.1.0" + +[[package]] +name = "wai-vector-wasm" +version = "0.1.0" +dependencies = [ + "wai-vector", +] diff --git a/wai/wai-vector/wasm/Cargo.toml b/wai/wai-vector/wasm/Cargo.toml new file mode 100644 index 000000000..dde479aef --- /dev/null +++ b/wai/wai-vector/wasm/Cargo.toml @@ -0,0 +1,20 @@ +# The vector recomputation of `wai-vector`, as a WebAssembly module for a browser's +# engine (`wasm32-unknown-unknown`), with a C ABI and no bindings generator, so that +# `verify.mjs` recomputes every vector file under Node with no dependency. +[package] +name = "wai-vector-wasm" +version = "0.1.0" +edition = "2024" +rust-version = "1.97" +license = "Apache-2.0" +publish = false + +[lib] +crate-type = ["cdylib"] +path = "src/lib.rs" + +[dependencies] +wai-vector = { path = ".." } + +[profile.release] +debug = false diff --git a/wai/wai-vector/wasm/src/lib.rs b/wai/wai-vector/wasm/src/lib.rs new file mode 100644 index 000000000..44fd7250a --- /dev/null +++ b/wai/wai-vector/wasm/src/lib.rs @@ -0,0 +1,87 @@ +//! `wai_vector::vectors::recompute` behind a C ABI. The caller hands every set under +//! `sets/` to [`wv_add_set`], then for each vector writes its group, extension and +//! bytes into memory from [`wv_alloc`], calls [`wv_recompute`] (or [`wv_form`] for +//! the authoring form), and reads the result from [`wv_out_ptr`] and [`wv_out_len`]. + +use std::cell::RefCell; + +use wai_vector::SetStore; +use wai_vector::vectors; + +thread_local! { + static OUT: RefCell> = const { RefCell::new(Vec::new()) }; + static STORE: RefCell> = const { RefCell::new(None) }; +} + +/// A buffer of `n` bytes for the caller to fill; freed by [`wv_free`]. +#[unsafe(no_mangle)] +pub extern "C" fn wv_alloc(n: usize) -> *mut u8 { + let mut v = vec![0u8; n]; + let p = v.as_mut_ptr(); + std::mem::forget(v); + p +} + +/// Free a buffer from [`wv_alloc`]. +/// +/// # Safety +/// `p` and `n` are a pointer and length [`wv_alloc`] returned and was given. +#[unsafe(no_mangle)] +pub unsafe extern "C" fn wv_free(p: *mut u8, n: usize) { + drop(unsafe { Vec::from_raw_parts(p, n, n) }); +} + +/// Hold the `n` bytes at `p` as a set a held `SET` record may name. +/// +/// # Safety +/// `p` points to `n` readable bytes. +#[unsafe(no_mangle)] +pub unsafe extern "C" fn wv_add_set(p: *const u8, n: usize) { + let b = unsafe { std::slice::from_raw_parts(p, n) }.to_vec(); + STORE.with(|s| s.borrow_mut().get_or_insert_with(SetStore::new).add(b)); +} + +fn set_out(status: u32, out: Vec) -> u32 { + OUT.with(|o| *o.borrow_mut() = out); + status +} + +/// Recompute the expected file of the vector of group `g`, extension `e` and bytes +/// `d`. Returns 0 with the expected file as the output, or 1 with the error. +/// +/// # Safety +/// Each pointer points to its length of readable bytes. +#[unsafe(no_mangle)] +pub unsafe extern "C" fn wv_recompute(g: *const u8, gn: usize, e: *const u8, en: usize, d: *const u8, dn: usize) -> u32 { + let group = unsafe { std::slice::from_raw_parts(g, gn) }; + let ext = unsafe { std::slice::from_raw_parts(e, en) }; + let data = unsafe { std::slice::from_raw_parts(d, dn) }; + let (Ok(group), Ok(ext)) = (std::str::from_utf8(group), std::str::from_utf8(ext)) else { + return set_out(1, b"group or extension not UTF-8".to_vec()); + }; + let r = STORE.with(|s| vectors::recompute(group, ext, data, s.borrow_mut().get_or_insert_with(SetStore::new))); + match r { + Ok(s) => set_out(0, s.into_bytes()), + Err(e) => set_out(1, e.into_bytes()), + } +} + +/// The authoring form of the payload of `n` bytes at `p`. +/// +/// # Safety +/// `p` points to `n` readable bytes. +#[unsafe(no_mangle)] +pub unsafe extern "C" fn wv_form(p: *const u8, n: usize) -> u32 { + let data = unsafe { std::slice::from_raw_parts(p, n) }; + set_out(0, vectors::form_of(data).into_bytes()) +} + +#[unsafe(no_mangle)] +pub extern "C" fn wv_out_ptr() -> *const u8 { + OUT.with(|o| o.borrow().as_ptr()) +} + +#[unsafe(no_mangle)] +pub extern "C" fn wv_out_len() -> usize { + OUT.with(|o| o.borrow().len()) +} diff --git a/wai/wai-vector/wasm/verify.mjs b/wai/wai-vector/wasm/verify.mjs new file mode 100644 index 000000000..c900e8931 --- /dev/null +++ b/wai/wai-vector/wasm/verify.mjs @@ -0,0 +1,71 @@ +// Recompute every expected file of vector-conformance under this engine's +// WebAssembly, and require each to equal the committed file byte for byte; and the +// authoring form beside each payload. +// +// node verify.mjs +import { readFileSync, readdirSync } from 'node:fs'; +import { join } from 'node:path'; + +const [wasmPath, root] = process.argv.slice(2); +if (!wasmPath || !root) { + console.error('usage: node verify.mjs '); + process.exit(2); +} +const { instance } = await WebAssembly.instantiate(readFileSync(wasmPath), {}); +const x = instance.exports; +const enc = new TextEncoder(); + +function put(bytes) { + const p = x.wv_alloc(bytes.length); + new Uint8Array(x.memory.buffer, p, bytes.length).set(bytes); + return p; +} +function out() { + return new Uint8Array(x.memory.buffer, x.wv_out_ptr(), x.wv_out_len()).slice(); +} + +for (const f of readdirSync(join(root, 'sets')).filter((n) => n.endsWith('.wos1')).sort()) { + const b = readFileSync(join(root, 'sets', f)); + const p = put(b); + x.wv_add_set(p, b.length); + x.wv_free(p, b.length); +} + +let vectors = 0, forms = 0, bad = 0; +for (const group of readdirSync(join(root, 'vectors')).sort()) { + for (const f of readdirSync(join(root, 'vectors', group)).sort()) { + const dot = f.lastIndexOf('.'); + const name = f.slice(0, dot), ext = f.slice(dot + 1); + if (name === 'index' || (ext === 'json' && group !== 'arith')) continue; + const data = readFileSync(join(root, 'vectors', group, f)); + const [g, e] = [enc.encode(group), enc.encode(ext)]; + const [pg, pe, pd] = [put(g), put(e), put(data)]; + const status = x.wv_recompute(pg, g.length, pe, e.length, pd, data.length); + const got = out(); + x.wv_free(pg, g.length); x.wv_free(pe, e.length); + vectors += 1; + const want = readFileSync(join(root, 'expected', group, name + '.json')); + if (status !== 0) { + bad += 1; + console.error(`FAIL ${group}/${f}: ${new TextDecoder().decode(got)}`); + } else if (Buffer.compare(Buffer.from(got), want) !== 0) { + bad += 1; + console.error(`DIFF ${group}/${f}: the recomputed file differs`); + } + if (ext === 'wvg1') { + x.wv_form(pd, data.length); + forms += 1; + if (Buffer.compare(Buffer.from(out()), readFileSync(join(root, 'vectors', group, name + '.json'))) !== 0) { + bad += 1; + console.error(`FORM ${group}/${f}: the authoring form differs`); + } + } + x.wv_free(pd, data.length); + } +} +console.log(`recomputed ${vectors} vectors and ${forms} authoring forms, under ${process.version}`); +if (bad > 0) { + console.error(`${bad} files failed`); + process.exit(1); +} +console.log('vector-conformance: every vector verifies'); -- 2.54.0 (Apple Git-157) From 5b0f2abde0694382e05c9b99de939d48b106922e Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Sun, 11 Oct 2026 04:29:28 -0400 Subject: [PATCH 2/2] wai-vector: clippy-clean, the empty frame range built without a reversed literal; no generated byte changes Co-Authored-By: Claude Opus 5.5 --- wai/wai-vector/src/bounds.rs | 3 ++- wai/wai-vector/src/clock.rs | 4 ++-- wai/wai-vector/src/json.rs | 4 ++-- wai/wai-vector/src/place.rs | 10 +++++----- wai/wai-vector/src/vectors.rs | 5 ++++- wai/wai-vector/src/vectors/arith_vectors.rs | 7 +++++-- wai/wai-vector/src/vectors/canonical.rs | 5 +---- wai/wai-vector/src/vectors/cost.rs | 3 --- wai/wai-vector/src/vectors/refusals.rs | 7 +++++-- wai/wai-vector/tests/fuzz_smoke.rs | 2 +- 10 files changed, 27 insertions(+), 23 deletions(-) diff --git a/wai/wai-vector/src/bounds.rs b/wai/wai-vector/src/bounds.rs index d0e5aaf15..57528343a 100644 --- a/wai/wai-vector/src/bounds.rs +++ b/wai/wai-vector/src/bounds.rs @@ -97,7 +97,8 @@ const _: () = assert!(512 * DENSITY_MAX == (1 << 31) - (1 << 17)); // The run sum S of 4,096 terms each at most 2^17 fits u32 and i32. const _: () = assert!((RUN_GLYPHS_MAX as u64) << 17 <= 1 << 29); // div255's largest intermediate 257·(65025 + 128) is below 2^24. -const _: () = assert!(257 * (65_025 + 128) < 1 << 24); +pub const DIV255_DOMAIN_MAX: u32 = 65_025; +const _: () = assert!(257 * (DIV255_DOMAIN_MAX + 128) < 1 << 24); // The exact length at the caps, the inline and held bytes aside, fits u64 trivially; // the cap on it is PAYLOAD_MAX. const _: () = assert!(REC_ITEM * ITEMS_MAX + REC_KEY * KEYS_MAX < 1 << 40); diff --git a/wai/wai-vector/src/clock.rs b/wai/wai-vector/src/clock.rs index ac264eea0..86083e39c 100644 --- a/wai/wai-vector/src/clock.rs +++ b/wai/wai-vector/src/clock.rs @@ -10,7 +10,7 @@ use crate::arith::{ceil_div, floor_div}; /// The first and last frame of the document at `P` ticks per frame. The range is /// empty when the first exceeds the last. pub fn frame_range(t0: u32, dur: u32, p: u64) -> (i64, i64) { - debug_assert!(p >= 1 && p <= 1 << 40); + debug_assert!((1..=1 << 40).contains(&p)); let p = p as i64; let first = ceil_div(i64::from(t0), p); let last = floor_div(i64::from(t0) + i64::from(dur) - 1, p); @@ -34,5 +34,5 @@ pub fn tick(g: u64, p: u64) -> i64 { /// The frames of the document at `P` ticks per frame, as `first..=last`. pub fn frames(t0: u32, dur: u32, p: u64) -> core::ops::RangeInclusive { let (first, last) = frame_range(t0, dur, p); - if first > last { 1..=0 } else { first as u64..=last as u64 } + if first > last { core::ops::RangeInclusive::new(1, 0) } else { first as u64..=last as u64 } } diff --git a/wai/wai-vector/src/json.rs b/wai/wai-vector/src/json.rs index f8a164bcc..f72e50361 100644 --- a/wai/wai-vector/src/json.rs +++ b/wai/wai-vector/src/json.rs @@ -373,7 +373,7 @@ pub fn hex(b: &[u8]) -> String { /// Bytes from lowercase or uppercase hexadecimal of even length. pub fn unhex(s: &str) -> Option> { let b = s.as_bytes(); - if b.len() % 2 != 0 { + if !b.len().is_multiple_of(2) { return None; } let d = |c: u8| match c { @@ -382,7 +382,7 @@ pub fn unhex(s: &str) -> Option> { b'A'..=b'F' => Some(c - b'A' + 10), _ => None, }; - b.chunks_exact(2).map(|p| Some(d(p[0])? << 4 | d(p[1])?)).collect() + b.as_chunks::<2>().0.iter().map(|p| Some(d(p[0])? << 4 | d(p[1])?)).collect() } #[cfg(test)] diff --git a/wai/wai-vector/src/place.rs b/wai/wai-vector/src/place.rs index f517236aa..715a7f0b1 100644 --- a/wai/wai-vector/src/place.rs +++ b/wai/wai-vector/src/place.rs @@ -54,7 +54,7 @@ impl Iv { pub const fn point(v: i64) -> Iv { Iv { lo: v, hi: v } } - pub fn add(self, o: Iv) -> Iv { + pub fn plus(self, o: Iv) -> Iv { Iv { lo: self.lo + o.lo, hi: self.hi + o.hi } } /// The interval times a scalar: the interval between the two end products. @@ -115,7 +115,7 @@ impl<'a> Scene<'a> { s.item_win.push(None); continue; } - let own = [acc[0].add(s.slot(it, TX)), acc[1].add(s.slot(it, TY))]; + let own = [acc[0].plus(s.slot(it, TX)), acc[1].plus(s.slot(it, TY))]; let w = (win.0.max(i64::from(it.t_on)), win.1.min(i64::from(it.t_off))); s.item_o.push(own); s.item_win.push(if w.0 < w.1 { Some(w) } else { None }); @@ -154,10 +154,10 @@ pub fn device_iv(o: [Iv; 2], m: [Iv; 4], l: [Iv; 4], g: [i64; 2], bx: [i16; 4], for ax in 0..2 { let (m1, m2) = (m[2 * ax], m[2 * ax + 1]); let (l1, l2) = (l[2 * ax], l[2 * ax + 1]); - let num = o[ax].scale(1 << 16).add(m1.scale(g[0])).add(m2.scale(g[1])); + let num = o[ax].scale(1 << 16).plus(m1.scale(g[0])).plus(m2.scale(g[1])); let org = num.map(|e| r_rat(e * w, den)); - let pt = l1.hull(bxx).add(l2.hull(bxy)).map(|e| r_half_up(e, 16)); - out[ax] = org.add(pt); + let pt = l1.hull(bxx).plus(l2.hull(bxy)).map(|e| r_half_up(e, 16)); + out[ax] = org.plus(pt); } out } diff --git a/wai/wai-vector/src/vectors.rs b/wai/wai-vector/src/vectors.rs index 6827402b9..df3c7ef98 100644 --- a/wai/wai-vector/src/vectors.rs +++ b/wai/wai-vector/src/vectors.rs @@ -200,8 +200,11 @@ fn index_text(vs: &[&Vector]) -> String { s } +/// An entry of the tree-wide digest sidecar: its key, its buffer, and its digest fields. +type SidecarEntry = (String, String, Vec<(&'static str, Vec)>); + /// The tree-wide digest sidecar: entries `(key, buffer, [(field, digests)])`. -fn sidecar_text(entries: &[(String, String, Vec<(&'static str, Vec)>)]) -> String { +fn sidecar_text(entries: &[SidecarEntry]) -> String { let mut s = String::from("{\n"); for (i, (k, buffer, fields)) in entries.iter().enumerate() { json::push_str(&mut s, k); diff --git a/wai/wai-vector/src/vectors/arith_vectors.rs b/wai/wai-vector/src/vectors/arith_vectors.rs index 236372fb6..d7ad30546 100644 --- a/wai/wai-vector/src/vectors/arith_vectors.rs +++ b/wai/wai-vector/src/vectors/arith_vectors.rs @@ -76,6 +76,9 @@ fn half_up_cases() -> Vec<(i64, i64)> { v } +/// A track's kind and its keys `(t, value, interp)`. +type TrackSpec = (u8, Vec<(u32, i64, u8)>); + /// Interpolation at the extremes: the longest spans, the widest value steps, a /// non-monotone table and table entries at 0 and 2^16. fn interp_input() -> String { @@ -88,7 +91,7 @@ fn interp_input() -> String { let tr = 1i64 << 22; let mx = 1i64 << 20; // (kind, keys (t, value, interp)) - let tracks: Vec<(u8, Vec<(u32, i64, u8)>)> = vec![ + let tracks: Vec = vec![ (2, vec![(0, -tr, 1), (max_t, tr, 0)]), (2, vec![(0, tr, 1), (max_t, -tr, 0)]), (3, vec![(0, -mx, 2), (max_t, mx, 0)]), @@ -112,7 +115,7 @@ fn interp_input() -> String { if i > 0 { s.push(','); } - s.push_str(&format!("{{\"keys\":[")); + s.push_str("{\"keys\":["); for (j, (t, v, e)) in keys.iter().enumerate() { if j > 0 { s.push(','); diff --git a/wai/wai-vector/src/vectors/canonical.rs b/wai/wai-vector/src/vectors/canonical.rs index 06fdefa30..a7501c94b 100644 --- a/wai/wai-vector/src/vectors/canonical.rs +++ b/wai/wai-vector/src/vectors/canonical.rs @@ -1,12 +1,11 @@ //! The `canonical` group (§2.5): accepted payloads of every structure, each of which //! re-serialises to its own bytes, and one refusal per canonical rule. -use alloc::string::String; use alloc::vec; use alloc::vec::Vec; use super::Vector; -use super::sets::{rect, set_a, set_b}; +use super::sets::{set_a, set_b}; use crate::scene::*; use crate::wos1::Point; use crate::wvg1::Doc; @@ -375,7 +374,5 @@ pub fn vectors() -> Vec { s.items = vec![ItemDef::Path { path: PathDef::rect(0, 0, 2_560, 2_560), rule: 0, paint: RED, text: Some(0), t_on: 0, t_off: TB, unit_scale: UNIT, slots: NO_SLOTS }]; add("path-alternative-decorative", s.bytes(), "step 5(h): a path whose text alternative is a decorative block -> payload_malformed"); - let _ = rect; - let _ = String::new(); v } diff --git a/wai/wai-vector/src/vectors/cost.rs b/wai/wai-vector/src/vectors/cost.rs index 749c1b73a..ebc5f4c55 100644 --- a/wai/wai-vector/src/vectors/cost.rs +++ b/wai/wai-vector/src/vectors/cost.rs @@ -4,7 +4,6 @@ //! once, a group's cost, and review A's three attack shapes scaled to the smallest //! count that still exceeds the ceiling. -use alloc::format; use alloc::vec; use alloc::vec::Vec; @@ -92,7 +91,6 @@ pub fn cubic_comb(n: usize) -> PathDef { c.push(Point { x: a, y: 2 * (s / 3), tag: 2 }); c.push(Point { x: b, y: b, tag: 0 }); } - let _ = rect; PathDef { contours: vec![c] } } @@ -158,6 +156,5 @@ pub fn vectors() -> Vec { clusters: vec![(256, 0, 1)], }]; add("attack-c-full-canvas-glyphs", s.bytes(), "review A, attack C, scaled: one run of 256 glyph records each covering the canvas -> too_large"); - let _ = format!(""); v } diff --git a/wai/wai-vector/src/vectors/refusals.rs b/wai/wai-vector/src/vectors/refusals.rs index ddb410880..43306ad86 100644 --- a/wai/wai-vector/src/vectors/refusals.rs +++ b/wai/wai-vector/src/vectors/refusals.rs @@ -88,6 +88,9 @@ fn with_held_set(sha: [u8; 32], length: u32) -> Vec { const BIG_POINTS: u16 = 16_384; +/// A change to a header's fields. +type HeaderPatch = fn(&mut Header); + pub fn vectors() -> Vec { let g = "refusals"; let mut v: Vec = Vec::new(); @@ -108,7 +111,7 @@ pub fn vectors() -> Vec { add("s1-magic-before-cap", { let mut b = minimal.clone(); b[0] = b'X'; b[24] = 9; b }, "pair: a bad magic and n_sizes past its cap -> payload_malformed (step 1 before step 2)"); // ------------------------------------------------------------ step 2 - let caps: [(&str, fn(&mut Header)); 15] = [ + let caps: [(&str, HeaderPatch); 15] = [ ("n_sizes", |h| h.n_sizes = 9), ("n_rates", |h| h.n_rates = 5), ("n_sets", |h| h.n_sets = 65), @@ -185,7 +188,7 @@ pub fn vectors() -> Vec { add("s3-truncated", minimal[..minimal.len() - 1].to_vec(), "step 3: one byte short -> payload_malformed"); // ------------------------------------------------------------ step 4: the header - let hdr: [(&str, fn(&mut Header), &str); 11] = [ + let hdr: [(&str, HeaderPatch, &str); 11] = [ ("tb-zero", |h| h.tb = 0, "tb = 0"), ("tb-over", |h| h.tb = (1 << 20) + 1, "tb = 2^20 + 1"), ("t0-over", |h| h.t0 = 1 << 31, "t0 = 2^31"), diff --git a/wai/wai-vector/tests/fuzz_smoke.rs b/wai/wai-vector/tests/fuzz_smoke.rs index ce6c013b6..d104e6980 100644 --- a/wai/wai-vector/tests/fuzz_smoke.rs +++ b/wai/wai-vector/tests/fuzz_smoke.rs @@ -78,7 +78,7 @@ fn fuzz_smoke() { seeds.push((p.extension().is_some_and(|x| x == "wos1"), std::fs::read(&p).unwrap())); } let mut store = corpus_store(); - let mut r = Rng(0x5EED_0F_D7_0002); + let mut r = Rng(0x5EED_0FD7_0002); let (mut runs, mut accepted) = (0usize, 0usize); for (is_wos1, seed) in &seeds { for _ in 0..iters { -- 2.54.0 (Apple Git-157)