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 000000000..4881114df Binary files /dev/null and b/wai/vector-conformance/sets/synthetic-a.wos1 differ diff --git a/wai/vector-conformance/sets/synthetic-b.wos1 b/wai/vector-conformance/sets/synthetic-b.wos1 new file mode 100644 index 000000000..100a5cdb2 Binary files /dev/null and b/wai/vector-conformance/sets/synthetic-b.wos1 differ diff --git a/wai/vector-conformance/sets/synthetic-bad-notes.wos1 b/wai/vector-conformance/sets/synthetic-bad-notes.wos1 new file mode 100644 index 000000000..836909c71 Binary files /dev/null and b/wai/vector-conformance/sets/synthetic-bad-notes.wos1 differ diff --git a/wai/vector-conformance/sha256.json b/wai/vector-conformance/sha256.json new file mode 100644 index 000000000..1def50a78 --- /dev/null +++ b/wai/vector-conformance/sha256.json @@ -0,0 +1,3 @@ +{ +"arith/div255":{"buffer":"the div255 table: 65,026 u8 values for x = 0..65025, in order","sha256":"1d58ac892356b3da45331270a22885cd5724224f31a4d9dd43c258f9fae3e03d"} +} diff --git a/wai/vector-conformance/vectors/arith/alpha.json b/wai/vector-conformance/vectors/arith/alpha.json new file mode 100644 index 000000000..a0fdd276e --- /dev/null +++ b/wai/vector-conformance/vectors/arith/alpha.json @@ -0,0 +1 @@ +{"op":"alpha"} diff --git a/wai/vector-conformance/vectors/arith/div255.json b/wai/vector-conformance/vectors/arith/div255.json new file mode 100644 index 000000000..ca03c105e --- /dev/null +++ b/wai/vector-conformance/vectors/arith/div255.json @@ -0,0 +1 @@ +{"op":"div255"} diff --git a/wai/vector-conformance/vectors/arith/half_up.json b/wai/vector-conformance/vectors/arith/half_up.json new file mode 100644 index 000000000..be922f058 --- /dev/null +++ b/wai/vector-conformance/vectors/arith/half_up.json @@ -0,0 +1 @@ +{"cases":[[-140737488355328,0],[140737488355327,0],[-70368744210432,0],[70368744210432,0],[-32769,0],[-32768,0],[-32767,0],[-1,0],[0,0],[1,0],[32767,0],[32768,0],[65535,0],[65536,0],[131071,0],[-140737488355328,1],[140737488355327,1],[-70368744210432,1],[70368744210432,1],[-32769,1],[-32768,1],[-32767,1],[-1,1],[0,1],[1,1],[32767,1],[32768,1],[65535,1],[65536,1],[131071,1],[-140737488355328,16],[140737488355327,16],[-70368744210432,16],[70368744210432,16],[-32769,16],[-32768,16],[-32767,16],[-1,16],[0,16],[1,16],[32767,16],[32768,16],[65535,16],[65536,16],[131071,16],[-140737488355328,17],[140737488355327,17],[-70368744210432,17],[70368744210432,17],[-32769,17],[-32768,17],[-32767,17],[-1,17],[0,17],[1,17],[32767,17],[32768,17],[65535,17],[65536,17],[131071,17]],"op":"half_up"} diff --git a/wai/vector-conformance/vectors/arith/index.json b/wai/vector-conformance/vectors/arith/index.json new file mode 100644 index 000000000..0ab92dd26 --- /dev/null +++ b/wai/vector-conformance/vectors/arith/index.json @@ -0,0 +1,8 @@ +{ +"alpha":"both coverage quantisers over every v in [-2^18, 2^18], as two tables (§3.8)", +"div255":"div255 over every input 0..=65025: the table's SHA-256 and the first x of each value (§3.9)", +"half_up":"R_half_up(p, s) at s = 0, 1, 16 and 17, ties of both signs and the widths of §3.12", +"interp":"track evaluation at the extremes: spans of 2^31 - 1 ticks, value steps of 2^23, non-monotone tables (§3.2)", +"r_rat":"R_rat(n, d) on windows with ties of both signs and at the driver's extremes (§3.0)", +"unpremul":"the straight-alpha channel R_rat(255c, A) over every c <= A (§2.9)" +} diff --git a/wai/vector-conformance/vectors/arith/interp.json b/wai/vector-conformance/vectors/arith/interp.json new file mode 100644 index 000000000..86b22cef2 --- /dev/null +++ b/wai/vector-conformance/vectors/arith/interp.json @@ -0,0 +1 @@ +{"op":"interp","tables":[[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]],"ticks":[-1,0,1,2,3,99,100,101,102,103,104,2000,4198,4199,4200,29999,30000,1073741824,2147483646,2147483647,2147483648],"tracks":[{"keys":[[0,-4194304,1],[2147483647,4194304,0]],"kind":2},{"keys":[[0,4194304,1],[2147483647,-4194304,0]],"kind":2},{"keys":[[0,-1048576,2],[2147483647,1048576,0]],"kind":3},{"keys":[[0,1048576,3],[2147483647,-1048576,0]],"kind":3},{"keys":[[0,0,4],[2147483647,255,0]],"kind":1},{"keys":[[100,255,1],[103,0,2],[4199,17,0]],"kind":1},{"keys":[[0,0,1],[30000,5376,0]],"kind":2}]} diff --git a/wai/vector-conformance/vectors/arith/r_rat.json b/wai/vector-conformance/vectors/arith/r_rat.json new file mode 100644 index 000000000..c55aa5657 --- /dev/null +++ b/wai/vector-conformance/vectors/arith/r_rat.json @@ -0,0 +1 @@ +{"cases":[[-600,1],[-593,1],[-586,1],[-579,1],[-572,1],[-565,1],[-558,1],[-551,1],[-544,1],[-537,1],[-530,1],[-523,1],[-516,1],[-509,1],[-502,1],[-495,1],[-488,1],[-481,1],[-474,1],[-467,1],[-460,1],[-453,1],[-446,1],[-439,1],[-432,1],[-425,1],[-418,1],[-411,1],[-404,1],[-397,1],[-390,1],[-383,1],[-376,1],[-369,1],[-362,1],[-355,1],[-348,1],[-341,1],[-334,1],[-327,1],[-320,1],[-313,1],[-306,1],[-299,1],[-292,1],[-285,1],[-278,1],[-271,1],[-264,1],[-257,1],[-250,1],[-243,1],[-236,1],[-229,1],[-222,1],[-215,1],[-208,1],[-201,1],[-194,1],[-187,1],[-180,1],[-173,1],[-166,1],[-159,1],[-152,1],[-145,1],[-138,1],[-131,1],[-124,1],[-117,1],[-110,1],[-103,1],[-96,1],[-89,1],[-82,1],[-75,1],[-68,1],[-61,1],[-54,1],[-47,1],[-40,1],[-33,1],[-26,1],[-19,1],[-12,1],[-5,1],[2,1],[9,1],[16,1],[23,1],[30,1],[37,1],[44,1],[51,1],[58,1],[65,1],[72,1],[79,1],[86,1],[93,1],[100,1],[107,1],[114,1],[121,1],[128,1],[135,1],[142,1],[149,1],[156,1],[163,1],[170,1],[177,1],[184,1],[191,1],[198,1],[205,1],[212,1],[219,1],[226,1],[233,1],[240,1],[247,1],[254,1],[261,1],[268,1],[275,1],[282,1],[289,1],[296,1],[303,1],[310,1],[317,1],[324,1],[331,1],[338,1],[345,1],[352,1],[359,1],[366,1],[373,1],[380,1],[387,1],[394,1],[401,1],[408,1],[415,1],[422,1],[429,1],[436,1],[443,1],[450,1],[457,1],[464,1],[471,1],[478,1],[485,1],[492,1],[499,1],[506,1],[513,1],[520,1],[527,1],[534,1],[541,1],[548,1],[555,1],[562,1],[569,1],[576,1],[583,1],[590,1],[597,1],[0,1],[0,1],[-600,2],[-593,2],[-586,2],[-579,2],[-572,2],[-565,2],[-558,2],[-551,2],[-544,2],[-537,2],[-530,2],[-523,2],[-516,2],[-509,2],[-502,2],[-495,2],[-488,2],[-481,2],[-474,2],[-467,2],[-460,2],[-453,2],[-446,2],[-439,2],[-432,2],[-425,2],[-418,2],[-411,2],[-404,2],[-397,2],[-390,2],[-383,2],[-376,2],[-369,2],[-362,2],[-355,2],[-348,2],[-341,2],[-334,2],[-327,2],[-320,2],[-313,2],[-306,2],[-299,2],[-292,2],[-285,2],[-278,2],[-271,2],[-264,2],[-257,2],[-250,2],[-243,2],[-236,2],[-229,2],[-222,2],[-215,2],[-208,2],[-201,2],[-194,2],[-187,2],[-180,2],[-173,2],[-166,2],[-159,2],[-152,2],[-145,2],[-138,2],[-131,2],[-124,2],[-117,2],[-110,2],[-103,2],[-96,2],[-89,2],[-82,2],[-75,2],[-68,2],[-61,2],[-54,2],[-47,2],[-40,2],[-33,2],[-26,2],[-19,2],[-12,2],[-5,2],[2,2],[9,2],[16,2],[23,2],[30,2],[37,2],[44,2],[51,2],[58,2],[65,2],[72,2],[79,2],[86,2],[93,2],[100,2],[107,2],[114,2],[121,2],[128,2],[135,2],[142,2],[149,2],[156,2],[163,2],[170,2],[177,2],[184,2],[191,2],[198,2],[205,2],[212,2],[219,2],[226,2],[233,2],[240,2],[247,2],[254,2],[261,2],[268,2],[275,2],[282,2],[289,2],[296,2],[303,2],[310,2],[317,2],[324,2],[331,2],[338,2],[345,2],[352,2],[359,2],[366,2],[373,2],[380,2],[387,2],[394,2],[401,2],[408,2],[415,2],[422,2],[429,2],[436,2],[443,2],[450,2],[457,2],[464,2],[471,2],[478,2],[485,2],[492,2],[499,2],[506,2],[513,2],[520,2],[527,2],[534,2],[541,2],[548,2],[555,2],[562,2],[569,2],[576,2],[583,2],[590,2],[597,2],[1,2],[-1,2],[-600,3],[-593,3],[-586,3],[-579,3],[-572,3],[-565,3],[-558,3],[-551,3],[-544,3],[-537,3],[-530,3],[-523,3],[-516,3],[-509,3],[-502,3],[-495,3],[-488,3],[-481,3],[-474,3],[-467,3],[-460,3],[-453,3],[-446,3],[-439,3],[-432,3],[-425,3],[-418,3],[-411,3],[-404,3],[-397,3],[-390,3],[-383,3],[-376,3],[-369,3],[-362,3],[-355,3],[-348,3],[-341,3],[-334,3],[-327,3],[-320,3],[-313,3],[-306,3],[-299,3],[-292,3],[-285,3],[-278,3],[-271,3],[-264,3],[-257,3],[-250,3],[-243,3],[-236,3],[-229,3],[-222,3],[-215,3],[-208,3],[-201,3],[-194,3],[-187,3],[-180,3],[-173,3],[-166,3],[-159,3],[-152,3],[-145,3],[-138,3],[-131,3],[-124,3],[-117,3],[-110,3],[-103,3],[-96,3],[-89,3],[-82,3],[-75,3],[-68,3],[-61,3],[-54,3],[-47,3],[-40,3],[-33,3],[-26,3],[-19,3],[-12,3],[-5,3],[2,3],[9,3],[16,3],[23,3],[30,3],[37,3],[44,3],[51,3],[58,3],[65,3],[72,3],[79,3],[86,3],[93,3],[100,3],[107,3],[114,3],[121,3],[128,3],[135,3],[142,3],[149,3],[156,3],[163,3],[170,3],[177,3],[184,3],[191,3],[198,3],[205,3],[212,3],[219,3],[226,3],[233,3],[240,3],[247,3],[254,3],[261,3],[268,3],[275,3],[282,3],[289,3],[296,3],[303,3],[310,3],[317,3],[324,3],[331,3],[338,3],[345,3],[352,3],[359,3],[366,3],[373,3],[380,3],[387,3],[394,3],[401,3],[408,3],[415,3],[422,3],[429,3],[436,3],[443,3],[450,3],[457,3],[464,3],[471,3],[478,3],[485,3],[492,3],[499,3],[506,3],[513,3],[520,3],[527,3],[534,3],[541,3],[548,3],[555,3],[562,3],[569,3],[576,3],[583,3],[590,3],[597,3],[1,3],[-1,3],[-600,4],[-593,4],[-586,4],[-579,4],[-572,4],[-565,4],[-558,4],[-551,4],[-544,4],[-537,4],[-530,4],[-523,4],[-516,4],[-509,4],[-502,4],[-495,4],[-488,4],[-481,4],[-474,4],[-467,4],[-460,4],[-453,4],[-446,4],[-439,4],[-432,4],[-425,4],[-418,4],[-411,4],[-404,4],[-397,4],[-390,4],[-383,4],[-376,4],[-369,4],[-362,4],[-355,4],[-348,4],[-341,4],[-334,4],[-327,4],[-320,4],[-313,4],[-306,4],[-299,4],[-292,4],[-285,4],[-278,4],[-271,4],[-264,4],[-257,4],[-250,4],[-243,4],[-236,4],[-229,4],[-222,4],[-215,4],[-208,4],[-201,4],[-194,4],[-187,4],[-180,4],[-173,4],[-166,4],[-159,4],[-152,4],[-145,4],[-138,4],[-131,4],[-124,4],[-117,4],[-110,4],[-103,4],[-96,4],[-89,4],[-82,4],[-75,4],[-68,4],[-61,4],[-54,4],[-47,4],[-40,4],[-33,4],[-26,4],[-19,4],[-12,4],[-5,4],[2,4],[9,4],[16,4],[23,4],[30,4],[37,4],[44,4],[51,4],[58,4],[65,4],[72,4],[79,4],[86,4],[93,4],[100,4],[107,4],[114,4],[121,4],[128,4],[135,4],[142,4],[149,4],[156,4],[163,4],[170,4],[177,4],[184,4],[191,4],[198,4],[205,4],[212,4],[219,4],[226,4],[233,4],[240,4],[247,4],[254,4],[261,4],[268,4],[275,4],[282,4],[289,4],[296,4],[303,4],[310,4],[317,4],[324,4],[331,4],[338,4],[345,4],[352,4],[359,4],[366,4],[373,4],[380,4],[387,4],[394,4],[401,4],[408,4],[415,4],[422,4],[429,4],[436,4],[443,4],[450,4],[457,4],[464,4],[471,4],[478,4],[485,4],[492,4],[499,4],[506,4],[513,4],[520,4],[527,4],[534,4],[541,4],[548,4],[555,4],[562,4],[569,4],[576,4],[583,4],[590,4],[597,4],[2,4],[-2,4],[-600,7],[-593,7],[-586,7],[-579,7],[-572,7],[-565,7],[-558,7],[-551,7],[-544,7],[-537,7],[-530,7],[-523,7],[-516,7],[-509,7],[-502,7],[-495,7],[-488,7],[-481,7],[-474,7],[-467,7],[-460,7],[-453,7],[-446,7],[-439,7],[-432,7],[-425,7],[-418,7],[-411,7],[-404,7],[-397,7],[-390,7],[-383,7],[-376,7],[-369,7],[-362,7],[-355,7],[-348,7],[-341,7],[-334,7],[-327,7],[-320,7],[-313,7],[-306,7],[-299,7],[-292,7],[-285,7],[-278,7],[-271,7],[-264,7],[-257,7],[-250,7],[-243,7],[-236,7],[-229,7],[-222,7],[-215,7],[-208,7],[-201,7],[-194,7],[-187,7],[-180,7],[-173,7],[-166,7],[-159,7],[-152,7],[-145,7],[-138,7],[-131,7],[-124,7],[-117,7],[-110,7],[-103,7],[-96,7],[-89,7],[-82,7],[-75,7],[-68,7],[-61,7],[-54,7],[-47,7],[-40,7],[-33,7],[-26,7],[-19,7],[-12,7],[-5,7],[2,7],[9,7],[16,7],[23,7],[30,7],[37,7],[44,7],[51,7],[58,7],[65,7],[72,7],[79,7],[86,7],[93,7],[100,7],[107,7],[114,7],[121,7],[128,7],[135,7],[142,7],[149,7],[156,7],[163,7],[170,7],[177,7],[184,7],[191,7],[198,7],[205,7],[212,7],[219,7],[226,7],[233,7],[240,7],[247,7],[254,7],[261,7],[268,7],[275,7],[282,7],[289,7],[296,7],[303,7],[310,7],[317,7],[324,7],[331,7],[338,7],[345,7],[352,7],[359,7],[366,7],[373,7],[380,7],[387,7],[394,7],[401,7],[408,7],[415,7],[422,7],[429,7],[436,7],[443,7],[450,7],[457,7],[464,7],[471,7],[478,7],[485,7],[492,7],[499,7],[506,7],[513,7],[520,7],[527,7],[534,7],[541,7],[548,7],[555,7],[562,7],[569,7],[576,7],[583,7],[590,7],[597,7],[3,7],[-3,7],[-600,255],[-593,255],[-586,255],[-579,255],[-572,255],[-565,255],[-558,255],[-551,255],[-544,255],[-537,255],[-530,255],[-523,255],[-516,255],[-509,255],[-502,255],[-495,255],[-488,255],[-481,255],[-474,255],[-467,255],[-460,255],[-453,255],[-446,255],[-439,255],[-432,255],[-425,255],[-418,255],[-411,255],[-404,255],[-397,255],[-390,255],[-383,255],[-376,255],[-369,255],[-362,255],[-355,255],[-348,255],[-341,255],[-334,255],[-327,255],[-320,255],[-313,255],[-306,255],[-299,255],[-292,255],[-285,255],[-278,255],[-271,255],[-264,255],[-257,255],[-250,255],[-243,255],[-236,255],[-229,255],[-222,255],[-215,255],[-208,255],[-201,255],[-194,255],[-187,255],[-180,255],[-173,255],[-166,255],[-159,255],[-152,255],[-145,255],[-138,255],[-131,255],[-124,255],[-117,255],[-110,255],[-103,255],[-96,255],[-89,255],[-82,255],[-75,255],[-68,255],[-61,255],[-54,255],[-47,255],[-40,255],[-33,255],[-26,255],[-19,255],[-12,255],[-5,255],[2,255],[9,255],[16,255],[23,255],[30,255],[37,255],[44,255],[51,255],[58,255],[65,255],[72,255],[79,255],[86,255],[93,255],[100,255],[107,255],[114,255],[121,255],[128,255],[135,255],[142,255],[149,255],[156,255],[163,255],[170,255],[177,255],[184,255],[191,255],[198,255],[205,255],[212,255],[219,255],[226,255],[233,255],[240,255],[247,255],[254,255],[261,255],[268,255],[275,255],[282,255],[289,255],[296,255],[303,255],[310,255],[317,255],[324,255],[331,255],[338,255],[345,255],[352,255],[359,255],[366,255],[373,255],[380,255],[387,255],[394,255],[401,255],[408,255],[415,255],[422,255],[429,255],[436,255],[443,255],[450,255],[457,255],[464,255],[471,255],[478,255],[485,255],[492,255],[499,255],[506,255],[513,255],[520,255],[527,255],[534,255],[541,255],[548,255],[555,255],[562,255],[569,255],[576,255],[583,255],[590,255],[597,255],[127,255],[-127,255],[-600,510],[-593,510],[-586,510],[-579,510],[-572,510],[-565,510],[-558,510],[-551,510],[-544,510],[-537,510],[-530,510],[-523,510],[-516,510],[-509,510],[-502,510],[-495,510],[-488,510],[-481,510],[-474,510],[-467,510],[-460,510],[-453,510],[-446,510],[-439,510],[-432,510],[-425,510],[-418,510],[-411,510],[-404,510],[-397,510],[-390,510],[-383,510],[-376,510],[-369,510],[-362,510],[-355,510],[-348,510],[-341,510],[-334,510],[-327,510],[-320,510],[-313,510],[-306,510],[-299,510],[-292,510],[-285,510],[-278,510],[-271,510],[-264,510],[-257,510],[-250,510],[-243,510],[-236,510],[-229,510],[-222,510],[-215,510],[-208,510],[-201,510],[-194,510],[-187,510],[-180,510],[-173,510],[-166,510],[-159,510],[-152,510],[-145,510],[-138,510],[-131,510],[-124,510],[-117,510],[-110,510],[-103,510],[-96,510],[-89,510],[-82,510],[-75,510],[-68,510],[-61,510],[-54,510],[-47,510],[-40,510],[-33,510],[-26,510],[-19,510],[-12,510],[-5,510],[2,510],[9,510],[16,510],[23,510],[30,510],[37,510],[44,510],[51,510],[58,510],[65,510],[72,510],[79,510],[86,510],[93,510],[100,510],[107,510],[114,510],[121,510],[128,510],[135,510],[142,510],[149,510],[156,510],[163,510],[170,510],[177,510],[184,510],[191,510],[198,510],[205,510],[212,510],[219,510],[226,510],[233,510],[240,510],[247,510],[254,510],[261,510],[268,510],[275,510],[282,510],[289,510],[296,510],[303,510],[310,510],[317,510],[324,510],[331,510],[338,510],[345,510],[352,510],[359,510],[366,510],[373,510],[380,510],[387,510],[394,510],[401,510],[408,510],[415,510],[422,510],[429,510],[436,510],[443,510],[450,510],[457,510],[464,510],[471,510],[478,510],[485,510],[492,510],[499,510],[506,510],[513,510],[520,510],[527,510],[534,510],[541,510],[548,510],[555,510],[562,510],[569,510],[576,510],[583,510],[590,510],[597,510],[255,510],[-255,510],[288230376151711743,1],[-288230376151711743,1],[288230376151711742,1],[-288230376151711742,1],[144115188075855872,1],[-144115188075855872,1],[0,1],[0,1],[1,1],[-1,1],[288230376151711743,3],[-288230376151711743,3],[288230376151711742,3],[-288230376151711742,3],[144115188075855873,3],[-144115188075855873,3],[1,3],[-1,3],[2,3],[-2,3],[288230376151711743,1048576],[-288230376151711743,1048576],[288230376151711742,1048576],[-288230376151711742,1048576],[144115188076380160,1048576],[-144115188076380160,1048576],[524288,1048576],[-524288,1048576],[524288,1048576],[-524288,1048576],[288230376151711743,268435456],[-288230376151711743,268435456],[288230376151711742,268435456],[-288230376151711742,268435456],[144115188210073600,268435456],[-144115188210073600,268435456],[134217728,268435456],[-134217728,268435456],[134217728,268435456],[-134217728,268435456],[288230376151711743,268435455],[-288230376151711743,268435455],[288230376151711742,268435455],[-288230376151711742,268435455],[144115188210073599,268435455],[-144115188210073599,268435455],[134217727,268435455],[-134217727,268435455],[134217728,268435455],[-134217728,268435455],[288230376151711743,268435456],[-288230376151711743,268435456],[288230376151711742,268435456],[-288230376151711742,268435456],[144115188210073600,268435456],[-144115188210073600,268435456],[134217728,268435456],[-134217728,268435456],[134217728,268435456],[-134217728,268435456]],"op":"r_rat"} diff --git a/wai/vector-conformance/vectors/arith/unpremul.json b/wai/vector-conformance/vectors/arith/unpremul.json new file mode 100644 index 000000000..da526cbb3 --- /dev/null +++ b/wai/vector-conformance/vectors/arith/unpremul.json @@ -0,0 +1 @@ +{"op":"unpremul"} diff --git a/wai/vector-conformance/vectors/canonical/block-unreferenced.json b/wai/vector-conformance/vectors/canonical/block-unreferenced.json new file mode 100644 index 000000000..a8a6898c8 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/block-unreferenced.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":8,"inline_len":554,"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"} +], +"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":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,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":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/block-unreferenced.wvg1 b/wai/vector-conformance/vectors/canonical/block-unreferenced.wvg1 new file mode 100644 index 000000000..005e72c02 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/block-unreferenced.wvg1 differ 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 000000000..84e163dae Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/cluster-empty.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/cluster-mid-character.json b/wai/vector-conformance/vectors/canonical/cluster-mid-character.json new file mode 100644 index 000000000..a708d80ff --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/cluster-mid-character.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,1], +[1,0,1,2], +[1,0,3,2] +], +"strings":"frété", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/canonical/cluster-mid-character.wvg1 b/wai/vector-conformance/vectors/canonical/cluster-mid-character.wvg1 new file mode 100644 index 000000000..7ae8f075f Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/cluster-mid-character.wvg1 differ 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 000000000..bec731a06 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/cluster-past-string.wvg1 differ 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 000000000..fb20d926b Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/clusters-sum.wvg1 differ 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 000000000..11a10e45f Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/clusters.wvg1 differ 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 000000000..473f5d14d Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/every-table.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/group-not-contiguous.json b/wai/vector-conformance/vectors/canonical/group-not-contiguous.json new file mode 100644 index 000000000..179979683 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/group-not-contiguous.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":2,"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-not-contiguous.wvg1 b/wai/vector-conformance/vectors/canonical/group-not-contiguous.wvg1 new file mode 100644 index 000000000..6ed3ef191 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/group-not-contiguous.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/group-number-skips.json b/wai/vector-conformance/vectors/canonical/group-number-skips.json new file mode 100644 index 000000000..3f7b0905a --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/group-number-skips.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":2,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":1}, +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":2,"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} +], +"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-number-skips.wvg1 b/wai/vector-conformance/vectors/canonical/group-number-skips.wvg1 new file mode 100644 index 000000000..d58209588 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/group-number-skips.wvg1 differ 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 000000000..a1dcffabf Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/group-split-by-ungrouped.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/groups-in-order.json b/wai/vector-conformance/vectors/canonical/groups-in-order.json new file mode 100644 index 000000000..9afa7faeb --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/groups-in-order.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":1,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":1}, +{"purpose":3,"dir":0,"lang_len":2,"mode":0,"group":2,"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/groups-in-order.wvg1 b/wai/vector-conformance/vectors/canonical/groups-in-order.wvg1 new file mode 100644 index 000000000..a421fd64c Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/groups-in-order.wvg1 differ 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 000000000..ca545c377 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/groups.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/held.json b/wai/vector-conformance/vectors/canonical/held.json new file mode 100644 index 000000000..1506501e4 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/held.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":5,"inline_len":0,"held_len":374,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":248358} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[ +{"carriage":0,"zero@1":[0,0,0],"length":374,"sha256":"32c21dbbd02fc491367cd7c5bd3727141d810aaecd16204ccd08b71819372b7d"} +], +"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":3} +], +"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,5000,20000], +[3,0,9096,20000], +[1,0,13192,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1], +[1,0,2,1] +], +"strings":"enABA", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/held.wvg1 b/wai/vector-conformance/vectors/canonical/held.wvg1 new file mode 100644 index 000000000..73412851f Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/held.wvg1 differ 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 000000000..bfcc58879 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/minimal.wvg1 differ 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 000000000..d000df748 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/paint-duplicate.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/paint-first-use.json b/wai/vector-conformance/vectors/canonical/paint-first-use.json new file mode 100644 index 000000000..862a234f7 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/paint-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":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":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":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-first-use.wvg1 b/wai/vector-conformance/vectors/canonical/paint-first-use.wvg1 new file mode 100644 index 000000000..8031fc64f Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/paint-first-use.wvg1 differ 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 000000000..d0bdb89a2 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/paint-unreferenced.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/path-alternative-decorative.json b/wai/vector-conformance/vectors/canonical/path-alternative-decorative.json new file mode 100644 index 000000000..715f06fab --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/path-alternative-decorative.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":1,"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":10,"inline_len":0,"held_len":0,"zero@72":[0,0,0,0,0,0,0,0]}, +"sizes":[ +{"w":640,"h":360,"cost":234705} +], +"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":2560,"ymax":2560} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[2560,0,0], +[2560,2560,0], +[0,2560,0] +], +"texts":[ +{"purpose":13,"dir":0,"lang_len":2,"mode":0,"group":0,"ruby":0,"ruby_start":0,"ruby_len":0,"str_len":8} +], +"items":[ +{"kind":2,"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":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":"enornament", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/canonical/path-alternative-decorative.wvg1 b/wai/vector-conformance/vectors/canonical/path-alternative-decorative.wvg1 new file mode 100644 index 000000000..61a284578 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/path-alternative-decorative.wvg1 differ 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 000000000..8218726eb Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/path-duplicate.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/ruby-mid-character.json b/wai/vector-conformance/vectors/canonical/ruby-mid-character.json new file mode 100644 index 000000000..acc737cff --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/ruby-mid-character.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":1,"ruby_len":2,"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-mid-character.wvg1 b/wai/vector-conformance/vectors/canonical/ruby-mid-character.wvg1 new file mode 100644 index 000000000..ce4e8cdd7 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/ruby-mid-character.wvg1 differ 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 000000000..28e5ed313 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/ruby-names-itself.wvg1 differ 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 000000000..eee47a807 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/ruby-past-string.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/ruby.json b/wai/vector-conformance/vectors/canonical/ruby.json new file mode 100644 index 000000000..2f121c346 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/ruby.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":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.wvg1 b/wai/vector-conformance/vectors/canonical/ruby.wvg1 new file mode 100644 index 000000000..aecf2bf21 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/ruby.wvg1 differ 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 000000000..ff4488b9f Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/set-duplicate.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/shared.json b/wai/vector-conformance/vectors/canonical/shared.json new file mode 100644 index 000000000..70b03d943 --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/shared.json @@ -0,0 +1,49 @@ +{ +"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":1,"n_paths":2,"n_items":4,"n_keys":2,"n_glyphs":0,"n_clusters":0,"path_contours":2,"path_points":9,"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":275766} +], +"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":2} +], +"keys":[ +[0,0,1,[0,0,0]], +[120000,25600,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":5120,"ymax":5120}, +{"n_contours":1,"n_points":5,"zero@4":0,"xmin":10490,"ymin":10000,"xmax":29510,"ymax":28090} +], +"path_ends":[3,4], +"path_points":[ +[0,0,0], +[5120,0,0], +[5120,5120,0], +[0,5120,0], +[20000,10000,0], +[25880,28090,0], +[10490,16910,0], +[29510,16910,0], +[14120,28090,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":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":0,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":1,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"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":0,"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/shared.wvg1 b/wai/vector-conformance/vectors/canonical/shared.wvg1 new file mode 100644 index 000000000..4320a664f Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/shared.wvg1 differ diff --git a/wai/vector-conformance/vectors/canonical/sizes-rates.json b/wai/vector-conformance/vectors/canonical/sizes-rates.json new file mode 100644 index 000000000..cbc8d4a1f --- /dev/null +++ b/wai/vector-conformance/vectors/canonical/sizes-rates.json @@ -0,0 +1,41 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":360,"n_sizes":5,"n_rates":4,"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":80,"h":45,"cost":7969}, +{"w":320,"h":180,"cost":64705}, +{"w":640,"h":360,"cost":245505}, +{"w":1280,"h":720,"cost":967705}, +{"w":2560,"h":1440,"cost":3854505} +], +"rates":[ +{"num":24000,"den":1001}, +{"num":24,"den":1}, +{"num":25,"den":1}, +{"num":120,"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":25600,"ymax":25600} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[25600,0,0], +[25600,25600,0], +[0,25600,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/sizes-rates.wvg1 b/wai/vector-conformance/vectors/canonical/sizes-rates.wvg1 new file mode 100644 index 000000000..347ce50e1 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/sizes-rates.wvg1 differ 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 000000000..8f5675359 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/table-duplicate.wvg1 differ 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 000000000..262acd7b0 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/table-first-use.wvg1 differ 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 000000000..355b07574 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/table-unreferenced.wvg1 differ 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 000000000..ba35a5220 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/track-duplicate.wvg1 differ 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 000000000..196253c61 Binary files /dev/null and b/wai/vector-conformance/vectors/canonical/track-first-use.wvg1 differ diff --git a/wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.json b/wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.json new file mode 100644 index 000000000..e272c5650 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.json @@ -0,0 +1,293 @@ +{ +"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":260,"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":4096,"h":4096,"cost":4294967295} +], +"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":32767,"ymax":32767} +], +"path_ends":[3], +"path_points":[ +[0,0,0], +[32767,0,0], +[32767,32767,0], +[0,32767,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":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_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-a-reused-full-canvas.wvg1 b/wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.wvg1 new file mode 100644 index 000000000..32057f42e Binary files /dev/null and b/wai/vector-conformance/vectors/cost/attack-a-reused-full-canvas.wvg1 differ 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 000000000..b953465f6 Binary files /dev/null and b/wai/vector-conformance/vectors/cost/attack-b-one-item.wvg1 differ diff --git a/wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.json b/wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.json new file mode 100644 index 000000000..4a62ca6aa --- /dev/null +++ b/wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.json @@ -0,0 +1,16436 @@ +{ +"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":26,"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":4294967295} +], +"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]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_scale":2097152,"m00":65535,"m01":65535,"m10":65535,"m11":65535,"tx":65535,"ty":65535,"op":65535,"zero@42":[0,0,0,0,0,0]}, +{"kind":2,"rule":0,"zero@2":0,"ref":0,"paint":0,"text":65535,"zero@10":0,"n_glyphs":0,"n_clusters":0,"t_on":0,"t_off":120000,"unit_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-reused-cubic-path.wvg1 b/wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.wvg1 new file mode 100644 index 000000000..a0cefe5d9 Binary files /dev/null and b/wai/vector-conformance/vectors/cost/attack-b-reused-cubic-path.wvg1 differ 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 000000000..79ce1be8a Binary files /dev/null and b/wai/vector-conformance/vectors/cost/attack-c-full-canvas-glyphs.wvg1 differ diff --git a/wai/vector-conformance/vectors/cost/ceiling-plus-one.json b/wai/vector-conformance/vectors/cost/ceiling-plus-one.json new file mode 100644 index 000000000..89495a727 --- /dev/null +++ b/wai/vector-conformance/vectors/cost/ceiling-plus-one.json @@ -0,0 +1,298 @@ +{ +"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":12,"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":8,"zero@4":0,"xmin":0,"ymin":0,"xmax":31583,"ymax":14911} +], +"path_ends":[3,7], +"path_points":[ +[0,0,0], +[32767,0,0], +[32767,32767,0], +[0,32767,0], +[0,0,0], +[31583,0,0], +[31583,14911,0], +[0,14911,0], +[0,14911,0], +[0,14911,0], +[0,14911,0], +[0,14911,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-plus-one.wvg1 b/wai/vector-conformance/vectors/cost/ceiling-plus-one.wvg1 new file mode 100644 index 000000000..1ac28b353 Binary files /dev/null and b/wai/vector-conformance/vectors/cost/ceiling-plus-one.wvg1 differ 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 000000000..895b9ff80 Binary files /dev/null and b/wai/vector-conformance/vectors/cost/ceiling-stated-low.wvg1 differ 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 000000000..2ed60e0df Binary files /dev/null and b/wai/vector-conformance/vectors/cost/ceiling.wvg1 differ 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 000000000..9f5a113fc Binary files /dev/null and b/wai/vector-conformance/vectors/cost/group.wvg1 differ 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 000000000..30f252ffb Binary files /dev/null and b/wai/vector-conformance/vectors/cost/reused-path-stated-high.wvg1 differ diff --git a/wai/vector-conformance/vectors/cost/reused-path.json b/wai/vector-conformance/vectors/cost/reused-path.json new file mode 100644 index 000000000..7cc61075b --- /dev/null +++ b/wai/vector-conformance/vectors/cost/reused-path.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":243315} +], +"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.wvg1 b/wai/vector-conformance/vectors/cost/reused-path.wvg1 new file mode 100644 index 000000000..05bab3536 Binary files /dev/null and b/wai/vector-conformance/vectors/cost/reused-path.wvg1 differ diff --git a/wai/vector-conformance/vectors/cost/touching-windows.json b/wai/vector-conformance/vectors/cost/touching-windows.json new file mode 100644 index 000000000..ebd3c8dbe --- /dev/null +++ b/wai/vector-conformance/vectors/cost/touching-windows.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":2,"n_texts":0,"n_tracks":0,"n_paths":1,"n_items":2,"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":234705} +], +"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":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":60000,"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":60000,"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/touching-windows.wvg1 b/wai/vector-conformance/vectors/cost/touching-windows.wvg1 new file mode 100644 index 000000000..9f22a3100 Binary files /dev/null and b/wai/vector-conformance/vectors/cost/touching-windows.wvg1 differ diff --git a/wai/vector-conformance/vectors/geometry/clip-over.json b/wai/vector-conformance/vectors/geometry/clip-over.json new file mode 100644 index 000000000..6cf5a3f61 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/clip-over.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":0,"n_paints":1,"n_texts":0,"n_tracks":1,"n_paths":2,"n_items":3,"n_keys":1,"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":469004} +], +"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,4194204,0,[0,0,0]] +], +"paths":[ +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100}, +{"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], +[100,0,0], +[100,100,0], +[0,100,0], +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,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":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]} +], +"glyphs":[], +"clusters":[], +"strings":"", +"inline":"" +} diff --git a/wai/vector-conformance/vectors/geometry/clip-over.wvg1 b/wai/vector-conformance/vectors/geometry/clip-over.wvg1 new file mode 100644 index 000000000..12fcfcf5b Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/clip-over.wvg1 differ 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 000000000..c874e2059 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/empty-glyph-edge.wvg1 differ diff --git a/wai/vector-conformance/vectors/geometry/empty-glyph-over.json b/wai/vector-conformance/vectors/geometry/empty-glyph-over.json new file mode 100644 index 000000000..2b683926b --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/empty-glyph-over.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,4194304,20000] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enA ", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/geometry/empty-glyph-over.wvg1 b/wai/vector-conformance/vectors/geometry/empty-glyph-over.wvg1 new file mode 100644 index 000000000..a70985555 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/empty-glyph-over.wvg1 differ 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 000000000..9816f0411 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/groups-sum-over.wvg1 differ diff --git a/wai/vector-conformance/vectors/geometry/inactive-item-over.json b/wai/vector-conformance/vectors/geometry/inactive-item-over.json new file mode 100644 index 000000000..e24ee31e2 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/inactive-item-over.json @@ -0,0 +1,47 @@ +{ +"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":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":234516} +], +"rates":[ +{"num":25,"den":1} +], +"sets":[], +"tables":[], +"paints":[ +[20,160,60,255], +[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,4194204,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":256,"ymax":256}, +{"n_contours":1,"n_points":4,"zero@4":0,"xmin":0,"ymin":0,"xmax":100,"ymax":100} +], +"path_ends":[3,3], +"path_points":[ +[0,0,0], +[256,0,0], +[256,256,0], +[0,256,0], +[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":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":1073741824,"t_off":1073741825,"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/inactive-item-over.wvg1 b/wai/vector-conformance/vectors/geometry/inactive-item-over.wvg1 new file mode 100644 index 000000000..5b054d905 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/inactive-item-over.wvg1 differ 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 000000000..0a9340fa0 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/second-size-over.wvg1 differ 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 000000000..d3106a2a8 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/true-range-fits.wvg1 differ 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 000000000..640338a4f Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/x-high-edge.wvg1 differ diff --git a/wai/vector-conformance/vectors/geometry/x-high-over.json b/wai/vector-conformance/vectors/geometry/x-high-over.json new file mode 100644 index 000000000..9150227fe --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/x-high-over.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,4194204,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-over.wvg1 b/wai/vector-conformance/vectors/geometry/x-high-over.wvg1 new file mode 100644 index 000000000..ab53e3285 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/x-high-over.wvg1 differ 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 000000000..86d04ba3f Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/x-low-edge.wvg1 differ diff --git a/wai/vector-conformance/vectors/geometry/x-low-over.json b/wai/vector-conformance/vectors/geometry/x-low-over.json new file mode 100644 index 000000000..9aedbe34d --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/x-low-over.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":-1,"ymin":0,"xmax":99,"ymax":100} +], +"path_ends":[3], +"path_points":[ +[-1,0,0], +[99,0,0], +[99,100,0], +[-1,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-over.wvg1 b/wai/vector-conformance/vectors/geometry/x-low-over.wvg1 new file mode 100644 index 000000000..e2285dc9a Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/x-low-over.wvg1 differ 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 000000000..696dd3c56 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/y-high-edge.wvg1 differ diff --git a/wai/vector-conformance/vectors/geometry/y-high-over.json b/wai/vector-conformance/vectors/geometry/y-high-over.json new file mode 100644 index 000000000..18f170d05 --- /dev/null +++ b/wai/vector-conformance/vectors/geometry/y-high-over.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,4194204,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-over.wvg1 b/wai/vector-conformance/vectors/geometry/y-high-over.wvg1 new file mode 100644 index 000000000..8ff9ae8c6 Binary files /dev/null and b/wai/vector-conformance/vectors/geometry/y-high-over.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.json b/wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.json new file mode 100644 index 000000000..56ce9289e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.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":0,"held_len":67108864,"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"} +], +"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":"" +} diff --git a/wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.wvg1 b/wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.wvg1 new file mode 100644 index 000000000..906d98de5 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/attack-d-2-held-sets.wvg1 differ 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 000000000..287dbeb0b Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/attack-d-3-held-sets.wvg1 differ 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 000000000..ee1a1ad0d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/attack-d-64-held-sets.wvg1 differ 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 000000000..e8841aaba Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/attack-e-duplicate-tracks.wvg1 differ 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 000000000..57ea3710c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/rich.wvg1 differ 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 000000000..56e7708dc Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s1-format.wvg1 differ 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 000000000..d9464654c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s1-magic-before-cap.wvg1 differ 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 000000000..6789d3ec3 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s1-magic.wvg1 differ 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 000000000..c04de2f31 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s1-short.wvg1 differ 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 000000000..d1c366976 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s1-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-before-length.json b/wai/vector-conformance/vectors/refusals/s2-cap-before-length.json new file mode 100644 index 000000000..b6355879a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-before-length.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010500000100000000000100010000000000000000000000000000000100000004000000000000000000000000000000000000000000000080026801149403001900000001000000c81e1eff01000400000000000000000000010001030000000000000001000000000100010000000001000200000000000000ffff00000000000000000000c0d4010000000100ffffffffffffffffffffffffffff00000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-before-length.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-before-length.wvg1 new file mode 100644 index 000000000..c4210bc67 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-before-length.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-before-range.json b/wai/vector-conformance/vectors/refusals/s2-cap-before-range.json new file mode 100644 index 000000000..88a81ace3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-before-range.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200000000000100400002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-before-range.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-before-range.wvg1 new file mode 100644 index 000000000..4eb2d6b5e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-before-range.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-held_len.json b/wai/vector-conformance/vectors/refusals/s2-cap-held_len.json new file mode 100644 index 000000000..55c0387e3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-held_len.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000400000002000000020000000200000008000000040000002a020000010000040000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-held_len.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-held_len.wvg1 new file mode 100644 index 000000000..aa010a4e1 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-held_len.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-inline_len.json b/wai/vector-conformance/vectors/refusals/s2-cap-inline_len.json new file mode 100644 index 000000000..431af2613 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-inline_len.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d40100800268010101010102000100030002000400000004000000020000000200000002000000080000000400000001000002000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-inline_len.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-inline_len.wvg1 new file mode 100644 index 000000000..5aa6f2939 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-inline_len.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.json new file mode 100644 index 000000000..8c86d7281 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000400000002000000010010000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.wvg1 new file mode 100644 index 000000000..6e0611158 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_clusters.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.json new file mode 100644 index 000000000..6eba0808e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000400000001001000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.wvg1 new file mode 100644 index 000000000..c8794d662 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_glyphs.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_items.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_items.json new file mode 100644 index 000000000..0f88b75e2 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_items.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200010001000400000002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_items.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_items.wvg1 new file mode 100644 index 000000000..8eb65927c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_items.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_keys.json b/wai/vector-conformance/vectors/refusals/s2-cap-n_keys.json new file mode 100644 index 000000000..27192854b --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s2-cap-n_keys.json @@ -0,0 +1,3 @@ +{ +"raw":"5756473101000000c0d4010000000000c0d4010080026801010101010200010003000200040000000100400002000000020000000200000008000000040000002a020000000000000000000000000000" +} diff --git a/wai/vector-conformance/vectors/refusals/s2-cap-n_keys.wvg1 b/wai/vector-conformance/vectors/refusals/s2-cap-n_keys.wvg1 new file mode 100644 index 000000000..3ebbca836 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_keys.wvg1 differ 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 000000000..be3e6f166 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_paints.wvg1 differ 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 000000000..443aec642 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_paths.wvg1 differ 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 000000000..a0b292255 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_rates.wvg1 differ 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 000000000..8df9a0e46 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_sets.wvg1 differ 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 000000000..f05a3d06a Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_sizes.wvg1 differ 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 000000000..037fccee2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-n_tables.wvg1 differ 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 000000000..c539c14c9 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-path_contours.wvg1 differ 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 000000000..8f9c08de3 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-path_points.wvg1 differ 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 000000000..3a60a413e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-cap-strings_len.wvg1 differ 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 000000000..b10a308a7 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-exact-length.wvg1 differ 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 000000000..e171a6f0d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s2-sets-total.wvg1 differ 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 000000000..39a350810 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s3-trailing-byte.wvg1 differ 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 000000000..71339e0bb Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s3-truncated.wvg1 differ 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 000000000..e5b02a1d4 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-cluster-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-design-h-large.json b/wai/vector-conformance/vectors/refusals/s4-design-h-large.json new file mode 100644 index 000000000..c70e9debd --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-design-h-large.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":640,"design_h":4097,"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-h-large.wvg1 b/wai/vector-conformance/vectors/refusals/s4-design-h-large.wvg1 new file mode 100644 index 000000000..5d0635ec9 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-design-h-large.wvg1 differ 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 000000000..986e31ef5 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-design-w-before-h.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-design-w-small.json b/wai/vector-conformance/vectors/refusals/s4-design-w-small.json new file mode 100644 index 000000000..0f0942a7b --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-design-w-small.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":120000,"t0":0,"dur":120000,"design_w":15,"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-design-w-small.wvg1 b/wai/vector-conformance/vectors/refusals/s4-design-w-small.wvg1 new file mode 100644 index 000000000..9e6f3d0de Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-design-w-small.wvg1 differ 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 000000000..a7f7ec2aa Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-dur-over.wvg1 differ 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 000000000..0668c7a74 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-dur-zero.wvg1 differ 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 000000000..35c944a5f Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-glyph-x.wvg1 differ 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 000000000..925fe8b98 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-glyph-y.wvg1 differ 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 000000000..6c41aa94b Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-glyph-zero.wvg1 differ 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 000000000..1db83a910 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-header-before-record.wvg1 differ 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 000000000..98f8a207b Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-clusters-over.wvg1 differ 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 000000000..dff6c7c37 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-end-slot.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-glyphs-path.json b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-path.json new file mode 100644 index 000000000..1f217d112 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-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":65535,"zero@10":0,"n_glyphs":1,"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-glyphs-path.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-path.wvg1 new file mode 100644 index 000000000..269b9c03c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-path.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-over.json b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-over.json new file mode 100644 index 000000000..1734f5645 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-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":4097,"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-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-over.wvg1 new file mode 100644 index 000000000..92c5a2b66 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-over.wvg1 differ 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 000000000..4972d9263 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-glyphs-run-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-kind-four.json b/wai/vector-conformance/vectors/refusals/s4-item-kind-four.json new file mode 100644 index 000000000..594c11028 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-kind-four.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":4,"rule":0,"zero@2":0,"ref":0,"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-kind-four.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-kind-four.wvg1 new file mode 100644 index 000000000..4e7cc8c04 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-kind-four.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-matrix-begin.json b/wai/vector-conformance/vectors/refusals/s4-item-matrix-begin.json new file mode 100644 index 000000000..13d7c0ddd --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-matrix-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":65535,"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":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-matrix-begin.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-matrix-begin.wvg1 new file mode 100644 index 000000000..4c5e24e97 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-matrix-begin.wvg1 differ 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 000000000..0eb69d7ed Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-paint-begin.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-paint-end.json b/wai/vector-conformance/vectors/refusals/s4-item-paint-end.json new file mode 100644 index 000000000..bab23171b --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-paint-end.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":1,"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-end.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-paint-end.wvg1 new file mode 100644 index 000000000..2e090ba5c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-paint-end.wvg1 differ 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 000000000..111380bc4 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-ref-path.wvg1 differ 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 000000000..e130eac95 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-ref-set.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-rule-before-zero2.json b/wai/vector-conformance/vectors/refusals/s4-item-rule-before-zero2.json new file mode 100644 index 000000000..98b1cd88d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-rule-before-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":2,"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-rule-before-zero2.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-rule-before-zero2.wvg1 new file mode 100644 index 000000000..6ee09ac0c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-rule-before-zero2.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.json b/wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.json new file mode 100644 index 000000000..ba57dfa82 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.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":1,"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":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-rule-no-clip.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.wvg1 new file mode 100644 index 000000000..39b1bf1b8 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-rule-no-clip.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-rule-path.json b/wai/vector-conformance/vectors/refusals/s4-item-rule-path.json new file mode 100644 index 000000000..2a5bdac0d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-rule-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":2,"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-rule-path.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-rule-path.wvg1 new file mode 100644 index 000000000..0a195c866 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-rule-path.wvg1 differ 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 000000000..292684117 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-rule-run.wvg1 differ 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 000000000..f899ff35e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-slot-range.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-t-off-order.json b/wai/vector-conformance/vectors/refusals/s4-item-t-off-order.json new file mode 100644 index 000000000..d1a19a961 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-t-off-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]], +[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":0,"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-t-off-order.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-t-off-order.wvg1 new file mode 100644 index 000000000..876d33c6b Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-t-off-order.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-t-off-over.json b/wai/vector-conformance/vectors/refusals/s4-item-t-off-over.json new file mode 100644 index 000000000..28cf1c2ae --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-t-off-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":2147483649,"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-t-off-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-t-off-over.wvg1 new file mode 100644 index 000000000..949b540d8 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-t-off-over.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-t-on.json b/wai/vector-conformance/vectors/refusals/s4-item-t-on.json new file mode 100644 index 000000000..b4e9f4d4f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-t-on.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":2147483648,"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-t-on.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-t-on.wvg1 new file mode 100644 index 000000000..502cc0817 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-t-on.wvg1 differ 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 000000000..8cb388948 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-text-path.wvg1 differ 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 000000000..5523b3108 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-text-run.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.json b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.json new file mode 100644 index 000000000..3e72f0e65 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.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":0,"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-unit-scale-clip.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.wvg1 new file mode 100644 index 000000000..b80c299fb Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-clip.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-over.json b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-over.json new file mode 100644 index 000000000..145d409ac --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-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":2,"t_on":0,"t_off":120000,"unit_scale":16777217,"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-over.wvg1 b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-over.wvg1 new file mode 100644 index 000000000..99e0c078d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-over.wvg1 differ 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 000000000..da6701b3f Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-unit-scale-zero.wvg1 differ 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 000000000..7b5cd26c0 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-zero10.wvg1 differ 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 000000000..78415d8e0 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-zero2-before-ref.wvg1 differ 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 000000000..d08a70856 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-zero2.wvg1 differ 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 000000000..b4659cabd Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-item-zero42.wvg1 differ 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 000000000..3a3a9bb49 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-key-interp-before-sum.wvg1 differ 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 000000000..3b366cb36 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-key-interp.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-key-t.json b/wai/vector-conformance/vectors/refusals/s4-key-t.json new file mode 100644 index 000000000..705e85b14 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-key-t.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]], +[2147483648,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-t.wvg1 b/wai/vector-conformance/vectors/refusals/s4-key-t.wvg1 new file mode 100644 index 000000000..77e995a20 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-key-t.wvg1 differ 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 000000000..84255c826 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-key-zero.wvg1 differ 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 000000000..89a79eb0a Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-n-items-zero.wvg1 differ 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 000000000..805d9b611 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-n-rates-zero.wvg1 differ 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 000000000..c33992610 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-n-sizes-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.json b/wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.json new file mode 100644 index 000000000..9440504ff --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.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,199], +[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-paint-over-alpha.wvg1 b/wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.wvg1 new file mode 100644 index 000000000..51fa76660 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-paint-over-alpha.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.json b/wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.json new file mode 100644 index 000000000..98af3d37d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.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":5,"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-contours-over-points.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.wvg1 new file mode 100644 index 000000000..a8e886708 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-contours-over-points.wvg1 differ 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 000000000..866a7f44e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-n-contours-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-path-n-points-zero.json b/wai/vector-conformance/vectors/refusals/s4-path-n-points-zero.json new file mode 100644 index 000000000..cc91eb208 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-n-points-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":0,"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-points-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-n-points-zero.wvg1 new file mode 100644 index 000000000..d4f237222 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-n-points-zero.wvg1 differ 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 000000000..9a9c060a2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-point-tag.wvg1 differ 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 000000000..e17a4e6ef Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-points-limit-before-zero.wvg1 differ 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 000000000..b0e8b0ea6 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-points-limit.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-path-zero.json b/wai/vector-conformance/vectors/refusals/s4-path-zero.json new file mode 100644 index 000000000..cc2887f22 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-path-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":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-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-path-zero.wvg1 new file mode 100644 index 000000000..9ed10e92d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-path-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-den-zero.json b/wai/vector-conformance/vectors/refusals/s4-rate-den-zero.json new file mode 100644 index 000000000..574f34f0a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-rate-den-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":0} +], +"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-den-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-rate-den-zero.wvg1 new file mode 100644 index 000000000..0d69e620c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-rate-den-zero.wvg1 differ 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 000000000..1cbe1468a Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-rate-gcd.wvg1 differ 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 000000000..3b2eb1a85 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-rate-num-zero.wvg1 differ 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 000000000..920d74a25 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-rate-over-240.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.json b/wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.json new file mode 100644 index 000000000..f3d38ffd9 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.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":7,"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-p-not-integral.wvg1 b/wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.wvg1 new file mode 100644 index 000000000..935579240 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-rate-p-not-integral.wvg1 differ 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 000000000..b0d758964 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-set-carriage-before-zero.wvg1 differ 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 000000000..2ce13c85f Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-set-carriage.wvg1 differ 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 000000000..9de30ca54 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-set-length-large.wvg1 differ 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 000000000..9c6ddda8e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-set-length-small.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.json b/wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.json new file mode 100644 index 000000000..45d7222f2 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.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":[1,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-zero-before-length.wvg1 b/wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.wvg1 new file mode 100644 index 000000000..cf068830e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-set-zero-before-length.wvg1 differ 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 000000000..61ebe629e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-set-zero.wvg1 differ 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 000000000..b6c4081a2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-size-aspect.wvg1 differ 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 000000000..0d2cbb9fc Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-size-w-over-4x.wvg1 differ 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 000000000..d34b26111 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-size-w-small.wvg1 differ 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 000000000..6c6750794 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-size-w-under-8th.wvg1 differ 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 000000000..84bb8af74 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-t0-before-dur.wvg1 differ 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 000000000..6143295f4 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-t0-over.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-table-e0.json b/wai/vector-conformance/vectors/refusals/s4-table-e0.json new file mode 100644 index 000000000..2f0b1d575 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-table-e0.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":[ +[1,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-table-e0.wvg1 b/wai/vector-conformance/vectors/refusals/s4-table-e0.wvg1 new file mode 100644 index 000000000..e3e99c433 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-table-e0.wvg1 differ 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 000000000..4084cb3c6 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-table-e16.wvg1 differ 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 000000000..06dfb1970 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-table-over.wvg1 differ 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 000000000..84a61aba4 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-tb-before-record.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.json b/wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.json new file mode 100644 index 000000000..c8e2f3666 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.json @@ -0,0 +1,64 @@ +{ +"header":{"magic":"WVG1","format":1,"tb":119999,"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-not-divisible.wvg1 b/wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.wvg1 new file mode 100644 index 000000000..586b8f79d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-tb-not-divisible.wvg1 differ 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 000000000..f45717f85 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-tb-over.wvg1 differ 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 000000000..cbf66bfde Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-tb-zero.wvg1 differ 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 000000000..6d4ce1467 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-dir.wvg1 differ 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 000000000..278b9c303 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-over.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-text-lang-len-zero.json b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-zero.json new file mode 100644 index 000000000..81c1c8d6e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-lang-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":0,"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-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-zero.wvg1 new file mode 100644 index 000000000..489e354c3 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-lang-len-zero.wvg1 differ 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 000000000..62417f85a Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-mode.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-text-purpose-zero.json b/wai/vector-conformance/vectors/refusals/s4-text-purpose-zero.json new file mode 100644 index 000000000..ad3ceff20 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-purpose-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":0,"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-text-purpose-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-purpose-zero.wvg1 new file mode 100644 index 000000000..4214e38c6 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-purpose-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-text-ruby-len-zero.json b/wai/vector-conformance/vectors/refusals/s4-text-ruby-len-zero.json new file mode 100644 index 000000000..1ae339dff --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-text-ruby-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":1,"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-ruby-len-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-text-ruby-len-zero.wvg1 new file mode 100644 index 000000000..4cdd0e6d9 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-ruby-len-zero.wvg1 differ 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 000000000..d439e09f0 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-ruby-over.wvg1 differ 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 000000000..13bfc0d92 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-ruby-start.wvg1 differ 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 000000000..72b2bffcd Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-str-len-over.wvg1 differ 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 000000000..e6347a2e8 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-text-str-len-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-track-kind-four.json b/wai/vector-conformance/vectors/refusals/s4-track-kind-four.json new file mode 100644 index 000000000..59f9a986f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-track-kind-four.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":4,"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-four.wvg1 b/wai/vector-conformance/vectors/refusals/s4-track-kind-four.wvg1 new file mode 100644 index 000000000..0983800ce Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-track-kind-four.wvg1 differ 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 000000000..3f2c4f7aa Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-track-kind-zero.wvg1 differ 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 000000000..b7fc9c168 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-over.wvg1 differ 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 000000000..d34c790f9 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-track-n-keys-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s4-track-zero.json b/wai/vector-conformance/vectors/refusals/s4-track-zero.json new file mode 100644 index 000000000..aa40f5695 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s4-track-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":1,"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-zero.wvg1 b/wai/vector-conformance/vectors/refusals/s4-track-zero.wvg1 new file mode 100644 index 000000000..3c2a14f24 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s4-track-zero.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5a-clusters-sum.json b/wai/vector-conformance/vectors/refusals/s5a-clusters-sum.json new file mode 100644 index 000000000..5fc7e8ceb --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-clusters-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":3,"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], +[1,0,0,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-clusters-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-clusters-sum.wvg1 new file mode 100644 index 000000000..8c9aff5ce Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-clusters-sum.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.json b/wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.json new file mode 100644 index 000000000..0f3068523 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-glyphs-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":3,"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], +[1,0,0,0] +], +"clusters":[ +[1,0,0,1], +[1,0,1,1] +], +"strings":"enAB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.wvg1 new file mode 100644 index 000000000..e83fc99ce Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-glyphs-sum.wvg1 differ 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 000000000..fdd78695a Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-held-sum.wvg1 differ 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 000000000..61fb26b21 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-inline-sum.wvg1 differ 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 000000000..bd22e5205 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-path-contours-sum.wvg1 differ 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 000000000..7e59f71f8 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-path-points-sum.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5a-strings-sum.json b/wai/vector-conformance/vectors/refusals/s5a-strings-sum.json new file mode 100644 index 000000000..3eb0c1d36 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5a-strings-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":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":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":"enABZ", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5a-strings-sum.wvg1 b/wai/vector-conformance/vectors/refusals/s5a-strings-sum.wvg1 new file mode 100644 index 000000000..ee8abae42 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-strings-sum.wvg1 differ 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 000000000..76524bb9d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-sum-before-typing.wvg1 differ 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 000000000..c16e2eedb Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5a-track-keys-sum.wvg1 differ 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 000000000..017d6edf2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5b-keys-order.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5b-last-key-interp.json b/wai/vector-conformance/vectors/refusals/s5b-last-key-interp.json new file mode 100644 index 000000000..5108a7bd4 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5b-last-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,2,[0,0,0]], +[120000,2560,1,[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-last-key-interp.wvg1 b/wai/vector-conformance/vectors/refusals/s5b-last-key-interp.wvg1 new file mode 100644 index 000000000..9473199f5 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5b-last-key-interp.wvg1 differ 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 000000000..c75ffcf99 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5b-rates-order.wvg1 differ 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 000000000..7d0bf0e4f Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5b-sizes-equal.wvg1 differ 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 000000000..5e0540758 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5b-sizes-order.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5c-matrix-key.json b/wai/vector-conformance/vectors/refusals/s5c-matrix-key.json new file mode 100644 index 000000000..d86998863 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5c-matrix-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,200,0,[0,0,0]], +[0,1048577,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-matrix-key.wvg1 b/wai/vector-conformance/vectors/refusals/s5c-matrix-key.wvg1 new file mode 100644 index 000000000..dd3fbc497 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5c-matrix-key.wvg1 differ 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 000000000..3a61a1f1e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5c-opacity-key.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5c-slot-kind.json b/wai/vector-conformance/vectors/refusals/s5c-slot-kind.json new file mode 100644 index 000000000..dc4d65be3 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5c-slot-kind.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":1,"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-slot-kind.wvg1 b/wai/vector-conformance/vectors/refusals/s5c-slot-kind.wvg1 new file mode 100644 index 000000000..80fb65a6d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5c-slot-kind.wvg1 differ 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 000000000..1c663a54f Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5c-translation-key.wvg1 differ 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 000000000..ffde4dd9c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5c-typing-before-groups.wvg1 differ 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 000000000..d23e1dac7 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5d-depth-five.wvg1 differ 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 000000000..3a86a055e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5d-end-first.wvg1 differ 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 000000000..0ad43bb86 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5d-open.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5e-box.json b/wai/vector-conformance/vectors/refusals/s5e-box.json new file mode 100644 index 000000000..0bafa953f --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5e-box.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":5121,"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/s5e-box.wvg1 b/wai/vector-conformance/vectors/refusals/s5e-box.wvg1 new file mode 100644 index 000000000..016bb6edb Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5e-box.wvg1 differ 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 000000000..6b655bf37 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5e-ends-last.wvg1 differ 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 000000000..ca3d24a45 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5e-ends-order.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.json b/wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.json new file mode 100644 index 000000000..5f7bf1382 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.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,1], +[5120,5120,1], +[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-two-quads.wvg1 b/wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.wvg1 new file mode 100644 index 000000000..28b738f1c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5e-grammar-two-quads.wvg1 differ 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 000000000..f935cc820 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5e-grammar.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-c0.json b/wai/vector-conformance/vectors/refusals/s5f-string-c0.json new file mode 100644 index 000000000..a69babb6d --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-c0.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":"enA\u0001", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-c0.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-c0.wvg1 new file mode 100644 index 000000000..2e80e2e31 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-c0.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-c1.json b/wai/vector-conformance/vectors/refusals/s5f-string-c1.json new file mode 100644 index 000000000..b4cd1ab3a --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-c1.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":"en…", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-c1.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-c1.wvg1 new file mode 100644 index 000000000..78f4fad88 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-c1.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-del.json b/wai/vector-conformance/vectors/refusals/s5f-string-del.json new file mode 100644 index 000000000..daf0ecce5 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-del.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":"enA\u007f", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-del.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-del.wvg1 new file mode 100644 index 000000000..060a53357 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-del.wvg1 differ 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 000000000..09f67a872 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-newline.wvg1 differ 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 000000000..520875cae Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-overlong.wvg1 differ 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 000000000..9f511d9bf Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-surrogate.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-utf8.json b/wai/vector-conformance/vectors/refusals/s5f-string-utf8.json new file mode 100644 index 000000000..4965a98bc --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-string-utf8.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":"656e41ff"}, +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-string-utf8.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-string-utf8.wvg1 new file mode 100644 index 000000000..5cdeb23ad Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-string-utf8.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.json b/wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.json new file mode 100644 index 000000000..88646f87e --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.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":8,"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":6,"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-double-hyphen.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.wvg1 new file mode 100644 index 000000000..6dd23cb3c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-tag-double-hyphen.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.json b/wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.json new file mode 100644 index 000000000..45abf6526 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.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":3,"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/s5f-tag-leading-hyphen.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.wvg1 new file mode 100644 index 000000000..54eff3885 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-tag-leading-hyphen.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.json b/wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.json new file mode 100644 index 000000000..a0cd43339 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.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":3,"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-AB", +"inline":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.wvg1 b/wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.wvg1 new file mode 100644 index 000000000..2240b53e2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-tag-trailing-hyphen.wvg1 differ 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 000000000..63761b840 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s5f-tag-underscore.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s6-held-malformed.json b/wai/vector-conformance/vectors/refusals/s6-held-malformed.json new file mode 100644 index 000000000..7e1eb6d96 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-held-malformed.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":382,"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":382,"sha256":"7dbbb62569b7dd86881cb93a471240692be85e9d09392245925cb59dad06e624"} +], +"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-malformed.wvg1 b/wai/vector-conformance/vectors/refusals/s6-held-malformed.wvg1 new file mode 100644 index 000000000..dd6ebbe76 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-held-malformed.wvg1 differ 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 000000000..ca2ffcc6c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-held-not-held.wvg1 differ 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 000000000..de65d384b Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-held-one-byte-longer.wvg1 differ 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 000000000..cab992c0e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-held-shorter.wvg1 differ 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 000000000..879b0d77d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-inline-hash.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-malformed.json b/wai/vector-conformance/vectors/refusals/s6-inline-malformed.json new file mode 100644 index 000000000..01bc71ab1 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-inline-malformed.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":"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":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":"584f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-malformed.wvg1 b/wai/vector-conformance/vectors/refusals/s6-inline-malformed.wvg1 new file mode 100644 index 000000000..375309914 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-inline-malformed.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-points-limit.json b/wai/vector-conformance/vectors/refusals/s6-inline-points-limit.json new file mode 100644 index 000000000..555b4d304 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-inline-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":"bc992834b22a764f32577e2c43af90bbe0b79d3ebedb5c5f110b1a0ba8fcbdbc"} +], +"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":"574f53310100000000080000080000002100000008000000d500000000000000000000000000000000000000000000000100010000400000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-points-limit.wvg1 b/wai/vector-conformance/vectors/refusals/s6-inline-points-limit.wvg1 new file mode 100644 index 000000000..5b90e27c0 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-inline-points-limit.wvg1 differ diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-too-large.json b/wai/vector-conformance/vectors/refusals/s6-inline-too-large.json new file mode 100644 index 000000000..42b04a205 --- /dev/null +++ b/wai/vector-conformance/vectors/refusals/s6-inline-too-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":554,"sha256":"63d1eba0b203052661bdc3657d837c6c0cdabebf8937652d818307f80f2e3765"} +], +"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":"574f53310100000000080000010001002100000008000000d500000000000000000000000000000000000000000000000100010004000000640088faf40100000200020008000000640088fa4c0400000300010008000000640088fa4c0400000400010005000000640088fa4c0400000500010003000000640088fa4c040000060001000100000000000000000000000900010004000000000088fad0070000030003000700070004000200000003006400000000f401000000f40188fa00640088fa0064000000004c040000004c0488fa00640088fa002c0138ff002c0150fb00840350fb00840338ff0058020000004c040000014c0444fd004c0488fa01580288fa00640088fa01640044fd006400000001640000000090017cfc0220030cfe024c0488fa004c0400000064000000004c04000000580288fa0000000000000000000000d007000000d00788fa00000088fa006e616d653d73796e7468657469632d610a736f757263653d67656e657261746564206279207761692d766563746f7220766563746f72732067656e2066726f6d20666f726d756c61730a6c6963656e63653d4170616368652d322e300a0a54686973206f75746c696e6520736574207761732067656e65726174656420696e2074686973207265706f7369746f72792066726f6d20666f726d756c61732e204974206973206c6963656e73656420756e6465722074686520417061636865204c6963656e73652c2056657273696f6e20322e302e0a" +} diff --git a/wai/vector-conformance/vectors/refusals/s6-inline-too-large.wvg1 b/wai/vector-conformance/vectors/refusals/s6-inline-too-large.wvg1 new file mode 100644 index 000000000..3c350d84d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-inline-too-large.wvg1 differ 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 000000000..a0352d615 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-order-held-first.wvg1 differ 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 000000000..ae48f1c62 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s6-order-inline-first.wvg1 differ 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 000000000..601554c95 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s7-before-geometry.wvg1 differ 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 000000000..7a05efbd0 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/s7-glyph-missing.wvg1 differ 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 000000000..b0b54605e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-box-empty-glyph.wos1 differ 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 000000000..68d72517c Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-box.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-cap-before-length.wos1 b/wai/vector-conformance/vectors/refusals/wos1-cap-before-length.wos1 new file mode 100644 index 000000000..637b74bc1 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-cap-before-length.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-contours-cap.wos1 b/wai/vector-conformance/vectors/refusals/wos1-contours-cap.wos1 new file mode 100644 index 000000000..1267d48d4 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-contours-cap.wos1 differ 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 000000000..5b15c53bf Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-contours-over-points.wos1 differ 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 000000000..76d929ce4 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-ends-last.wos1 differ 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 000000000..3387d951d Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-ends-order.wos1 differ 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 000000000..98cc7a9cc Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-flags.wos1 differ 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 000000000..3d30f2102 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-format.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-gid-order.wos1 b/wai/vector-conformance/vectors/refusals/wos1-gid-order.wos1 new file mode 100644 index 000000000..f0ff24595 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-gid-order.wos1 differ 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 000000000..a433cf0dd Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-glyph-zero.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-grammar-one-point-control.wos1 b/wai/vector-conformance/vectors/refusals/wos1-grammar-one-point-control.wos1 new file mode 100644 index 000000000..f8ec42598 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-grammar-one-point-control.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-grammar.wos1 b/wai/vector-conformance/vectors/refusals/wos1-grammar.wos1 new file mode 100644 index 000000000..429b67d4e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-grammar.wos1 differ 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 000000000..15202bc33 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-length.wos1 differ 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 000000000..26b85c03e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-magic.wos1 differ 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 000000000..ecc4e6ea9 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-n-glyphs-cap.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-n-glyphs-zero.wos1 b/wai/vector-conformance/vectors/refusals/wos1-n-glyphs-zero.wos1 new file mode 100644 index 000000000..ae4f0a23e Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-n-glyphs-zero.wos1 differ 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 000000000..6842c3fdd Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-notes-cap.wos1 differ 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 000000000..d3161b110 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-notes-utf8.wos1 differ 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 000000000..54b6d1e78 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-notes-zero.wos1 differ 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 000000000..78e3cb43b Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-16383.wos1 differ 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 000000000..b29f4e036 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-16384.wos1 differ 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 000000000..910096bec Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-cap.wos1 differ 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 000000000..67e67cbec Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-limit-before-gid-order.wos1 differ 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 000000000..e9fcb84a2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-limit-before-zero.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-points-limit.wos1 b/wai/vector-conformance/vectors/refusals/wos1-points-limit.wos1 new file mode 100644 index 000000000..9b357ff84 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-limit.wos1 differ 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 000000000..01dd8cac2 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-points-no-contour.wos1 differ 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 000000000..4881114df Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-set-a.wos1 differ 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 000000000..704baa127 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-short.wos1 differ 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 000000000..b2540b633 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-sums.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-tag.wos1 b/wai/vector-conformance/vectors/refusals/wos1-tag.wos1 new file mode 100644 index 000000000..e9bebb401 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-tag.wos1 differ 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 000000000..7bad63c50 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-zero-before-points-limit.wos1 differ diff --git a/wai/vector-conformance/vectors/refusals/wos1-zero-glyphs-before-points-cap.wos1 b/wai/vector-conformance/vectors/refusals/wos1-zero-glyphs-before-points-cap.wos1 new file mode 100644 index 000000000..14f409cfb Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-zero-glyphs-before-points-cap.wos1 differ 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 000000000..2f339ca35 Binary files /dev/null and b/wai/vector-conformance/vectors/refusals/wos1-zero.wos1 differ 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 000000000..473f5d14d Binary files /dev/null and b/wai/wai-vector/fuzz/seeds/every-table.wvg1 differ diff --git a/wai/wai-vector/fuzz/seeds/set-a.wos1 b/wai/wai-vector/fuzz/seeds/set-a.wos1 new file mode 100644 index 000000000..4881114df Binary files /dev/null and b/wai/wai-vector/fuzz/seeds/set-a.wos1 differ 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..57528343a --- /dev/null +++ b/wai/wai-vector/src/bounds.rs @@ -0,0 +1,106 @@ +//! 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. +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); +// 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..86083e39c --- /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!((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); + (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 { core::ops::RangeInclusive::new(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..f72e50361 --- /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().is_multiple_of(2) { + 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.as_chunks::<2>().0.iter().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..715a7f0b1 --- /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 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. + 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].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 }); + 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).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).plus(l2.hull(bxy)).map(|e| r_half_up(e, 16)); + out[ax] = org.plus(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..df3c7ef98 --- /dev/null +++ b/wai/wai-vector/src/vectors.rs @@ -0,0 +1,282 @@ +//! 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 +} + +/// 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: &[SidecarEntry]) -> 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..d7ad30546 --- /dev/null +++ b/wai/wai-vector/src/vectors/arith_vectors.rs @@ -0,0 +1,259 @@ +//! 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 +} + +/// 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 { + 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 = 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("{\"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..a7501c94b --- /dev/null +++ b/wai/wai-vector/src/vectors/canonical.rs @@ -0,0 +1,378 @@ +//! 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::vec; +use alloc::vec::Vec; + +use super::Vector; +use super::sets::{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"); + + 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..ebc5f4c55 --- /dev/null +++ b/wai/wai-vector/src/vectors/cost.rs @@ -0,0 +1,160 @@ +//! 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::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 }); + } + 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"); + 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..43306ad86 --- /dev/null +++ b/wai/wai-vector/src/vectors/refusals.rs @@ -0,0 +1,593 @@ +//! 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; + +/// 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(); + 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, HeaderPatch); 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, 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"), + ("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..d104e6980 --- /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_0FD7_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');