From d716eb04ddb8325f935831d621fdf0908a084de6 Mon Sep 17 00:00:00 2001 From: Michele Bigi Date: Wed, 2 Sep 2026 15:24:17 +0200 Subject: [PATCH] feat: add spi_slave.v physical layer (Phase 4 SPI RTL, part 1/N) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First real RTL piece of the SPI interface (docs §8.1 protocol draft): the physical layer only -- Mode 0 (CPOL=0, CPHA=0), MSB-first, byte-level shift register with a 3-stage CDC synchronizer for SCLK/MOSI/CS_N (the SPI master clock is asynchronous to the FPGA system clock). Exposes rx_byte/rx_valid, tx_byte/tx_byte_req, and cs_active/cs_start/cs_end to the (not yet written) protocol engine. Documented an important consumer contract on tx_byte_req: it is a prefetch hint (fires once extra after the last byte of every transaction, since the slave cannot know in advance whether the master will keep clocking), not a "byte consumed" event -- a consumer must advance any stateful pointer (e.g. a RAM read address) on rx_valid instead, which fires exactly once per real byte transferred. sim/spi_slave_tb.v: bit-banged SPI master BFM (4 tests: single byte, multi-byte in one CS period, back-to-back transactions, slower SCLK). Two testbench-only bugs found and fixed during bring-up (RTL itself needed no functional change beyond the tx_byte_req contract comment): the BFM was advancing its tx queue on tx_byte_req instead of rx_valid (see contract above), and inter-test reset pulses raced against posedge clk (blocking `rst=1` landing on the same simulation time as a clock edge) -- fixed by asserting/deasserting reset on negedge clk instead. Verified two ways: Icarus Verilog (4/4 tests pass) and the real ECP5 toolchain used for prior benchmarks (Yosys 0.68 synth: 0 problems, 41 FF / 55 LUT4, no latches; nextpnr-ecp5 --45k --package CABGA381 --speed 8 --freq 80: PASS, Fmax 403.23 MHz; ecppack: bitstream generated with no errors). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01WQV3vS9TXaGDJ5cRfnfidt --- WORKLOG.md | 22 + rtl/spi_slave.v | 206 + sim/spi_slave.vcd | 13327 +++++++++++++++++++++++++++++++++++++++++++ sim/spi_slave_sim | 1006 ++++ sim/spi_slave_tb.v | 380 ++ 5 files changed, 14941 insertions(+) create mode 100644 rtl/spi_slave.v create mode 100644 sim/spi_slave.vcd create mode 100755 sim/spi_slave_sim create mode 100644 sim/spi_slave_tb.v diff --git a/WORKLOG.md b/WORKLOG.md index 970c361..ed4a935 100644 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -164,3 +164,25 @@ - 2026-09-02T04:40 — [FASE 12] — Scritta la spec completa in docs/FPGA-NeuralNetwork-Engine.md, nuova sezione "## 8.1 SPI Protocol v1 (draft, 2026-09-02)": fisico (SPI mode 0, MSB-first, single SPI, un comando per ciclo di CS), convenzione campi multi-byte big-endian, indirizzi a 3 byte (ADDR_WIDTH=22 bit + 2 bit riservati), tabella opcode completa (NOP 0x00, WRITE_RAM 0x01, READ_RAM 0x02, RESET 0x0F, SET_BASE 0x10, START 0x20, STATUS 0x21, READ_OUTPUT 0x22, READ_CONFIG 0x30), layout payload di READ_CONFIG (8 byte: ADDR_WIDTH, N_INPUTS, N_NEURONS, PARALLEL, DATA_WIDTH, versione protocollo), sessione di esempio end-to-end, elenco esplicito di ciò che resta fuori scope per v1 (Dual SPI, CRC/checksum, comandi di sequenziamento multi-layer -> rimandati a Fase 5). - 2026-09-02T04:45 — [FASE 12] — Aggiornata la checklist della "## Phase 4 — SPI Interface" nel roadmap: spuntato "Protocol/opcode set drafted" con riferimento a §8.1; aggiunti come non ancora fatti: SPI controller RTL, register bank RTL, RAM access passthrough RTL, testbench dedicato (stile SPI master BFM + stack completo, sulla falsariga di neuron_memory_tb.v). - 2026-09-02T04:46 — [FASE 12] — CONCLUSIONE: nessuna modifica a codice RTL/testbench in questa fase, solo documentazione di design (docs/FPGA-NeuralNetwork-Engine.md). Nessuna compilazione/simulazione necessaria. Prossimo step naturale: implementazione RTL del controller SPI/register-bank secondo questa spec, quando l'utente conferma che il draft è sufficientemente maturo (gli opcode restano volutamente aperti a revisione). + +## Fase: Implementazione RTL SPI - livello fisico (Fase 4 RTL) (2026-09-02) + +- 2026-09-02T05:00 — [FASE 13] — Utente conferma priorità: matrice di sequenziamento layer-to-layer (Fase 5) rimandata; procedere ORA con l'implementazione RTL vera dell'SPI (Fase 4), "fatta bene". Successivamente chiarito con "#4" = implementazione hardware COMPLETA di SPI, testata in tutte le sue sfaccettature (non solo happy path). +- 2026-09-02T05:02 — [FASE 13] — Piano comunicato: (1) spi_slave.v livello fisico + tb dedicato, (2) spi_engine.v FSM opcode + register bank, (3) arbitro bus condiviso spi_engine/neuron_memory, (4) top-level integrazione, (5) tb end-to-end con master SPI simulato che esegue l'intera sessione della spec. Iniziato dal punto più a rischio (CDC tra SCLK del master e clock di sistema). +- 2026-09-02T05:05 — [FASE 13] — Creato rtl/spi_slave.v: livello fisico SPI Mode 0 (CPOL=0,CPHA=0), MSB-first. Sincronizzatori a doppio flip-flop (3 stadi) per SCLK/MOSI/CS_N in ingresso dal dominio di clock del master (asincrono). Edge-detect su segnali sincronizzati. Shift register a 8 bit per rx (campiona MOSI su fronte di salita SCLK sincronizzato) e tx (aggiorna MISO su fronte di discesa SCLK sincronizzato). Segnali cs_start/cs_end (impulsi) e cs_active (livello) per delimitare le transazioni. Rimossa durante la scrittura una riga placeholder/dead-code lasciata per errore (wire sclk_rising ridondante). +- 2026-09-02T05:10 — [FASE 13] — Creato sim/spi_slave_tb.v: master SPI simulato bit-banged (Mode 0, MSB-first) con 4 test: TEST1 singolo byte (rx_byte/rx_valid + readback MISO), TEST2 multi-byte in una sola sessione CS, TEST3 transazioni back-to-back separate, TEST4 SCLK più lento (verifica indipendenza dal rapporto SCLK/clk). +- 2026-09-02T05:12 — [FASE 13] — Prima esecuzione: TEST1 e TEST3 PASS, TEST2 e TEST4 FAIL su mismatch MISO (sequenza byte ricevuta dal master shiftata, es. atteso "de ad be ef" ottenuto "ad be ef 00"). +- 2026-09-02T05:15 — [FASE 13] — Prima ipotesi (poi rivelatasi solo parzialmente corretta): margine di temporizzazione insufficiente nel BFM del testbench, basato su ritardi `#ns` non allineati al clock di sistema. Riscritto il BFM per usare conteggi di cicli di `clk` (task `clk_wait`) invece di `#ns` assoluti, con margini generosi (8 e 20 cicli per mezzo-bit, ben oltre la latenza di sincronizzazione CDC di ~4 cicli). Stesso esito di fallimento anche dopo questa riscrittura -> la causa non era (solo) di margine. +- 2026-09-02T05:20 — [FASE 13] — Aggiunta strumentazione di debug temporanea (blocco `always @(posedge clk)` con `$display`/poi `$strobe` che traccia tx_byte_req, sclk_rise/fall, cs_fell, rx_valid, bit_count, tx_shift, miso, tx_byte, tx_queue_idx). Individuata la causa reale: `tx_queue_idx` (nel testbench) veniva avanzato su OGNI impulso `tx_byte_req`, ma il DUT genera legittimamente un impulso "phantom" extra dopo l'ultimo bit di ogni transazione (non può sapere in anticipo se il master continuerà a inviare altri byte prima di rilasciare CS, quindi pre-carica comunque il prossimo byte per garantire la validità di MISO). Questo consumava un elemento di troppo dalla coda del testbench ad ogni transazione. +- 2026-09-02T05:25 — [FASE 13] — FIX 1 (contratto tx_byte_req): documentato esplicitamente in rtl/spi_slave.v (commento sul segnale `tx_byte_req`) che è un hint di prefetch, NON un evento "byte consumato" — un consumer non deve usarlo per avanzare un puntatore stateful (es. indirizzo di lettura RAM), pena un avanzamento di un byte in eccesso ad ogni transazione. Il segnale corretto per avanzare un puntatore è `rx_valid`, che scatta esattamente una volta per ogni byte REALMENTE trasferito (mai un impulso extra, essendo guidato dal conteggio di fronti SCLK realmente avvenuti). Aggiornato sim/spi_slave_tb.v: `tx_queue_idx` ora avanza su `rx_valid` invece che su `tx_byte_req`. +- 2026-09-02T05:28 — [FASE 13] — Rieseguito dopo il fix 1: STESSO fallimento identico (miso ancora shiftato). Approfondito ulteriormente con debug tracing esteso dall'inizio simulazione: scoperto che `tx_queue_idx` non veniva MAI azzerato dai reset intermedi tra un test e l'altro (`rst=1'b1; @(posedge clk); rst=1'b0; @(posedge clk);`), nonostante la logica `if(rst) tx_queue_idx<=0;` fosse corretta. +- 2026-09-02T05:32 — [FASE 13] — CAUSA REALE identificata: race classica a "ritardo zero" sul fronte di clock. L'assegnazione blocking `rst=1'b1;` nel testbench avveniva, per la cadenza temporale usata (nessun `#delay` tra istruzioni, solo `@(posedge clk)`), esattamente nello stesso istante di simulazione di un fronte di salita del clock — rendendo non deterministico se i vari blocchi `always @(posedge clk)` (nel testbench e nel DUT) vedessero il vecchio o il nuovo valore di `rst` per quel fronte. Risultato osservato: il reset "non prendeva mai" per l'indice della coda, che restava sporco da un test al successivo. +- 2026-09-02T05:35 — [FASE 13] — FIX 2 (eliminazione della race): sostituiti i 3 reset rapidi inter-test da `rst=1'b1; @(posedge clk); rst=1'b0; @(posedge clk);` a `@(negedge clk); rst=1'b1; @(negedge clk); rst=1'b0; @(posedge clk);` — assegnando rst sul FRONTE DI DISCESA del clock, garantendo per costruzione che sia già stabile e senza ambiguità al successivo fronte di salita. +- 2026-09-02T05:38 — [FASE 13] — Rieseguito dopo il fix 2: TUTTI E 4 I TEST PASSANO (TEST1 PASS, TEST2 miso=de ad be ef come atteso, TEST3 PASS, TEST4 rx=0x96/miso=0x5a come atteso). Rimossa tutta la strumentazione di debug temporanea (blocco always/$strobe, reg debug_on e relativi toggle) per lasciare il testbench pulito. +- 2026-09-02T05:40 — [FASE 13] — Ricompilato ed eseguito sim/spi_slave_tb.v pulito (senza debug): confermato TUTTI E 4 I TEST PASSANO, esito identico. +- 2026-09-02T05:42 — [FASE 13] — LEZIONE APPRESA (rilevante per ogni futuro testbench in questo repo che usa sequenziamento `@(posedge clk)` senza `#delay` espliciti): assegnare segnali di controllo come `rst` con blocking assignment immediatamente prima di un `@(posedge clk)` rischia una race a delta-zero se il tempo di simulazione corrente coincide esattamente con un fronte di clock. Pattern sicuro: assegnare su `@(negedge clk)` quando si vuole garantire che il valore sia stabile e non ambiguo al successivo fronte di salita. +- 2026-09-02T05:45 — [FASE 13] — VERIFICA CON TOOLCHAIN FPGA REALE (richiesta esplicita dell'utente: "hai verificato con il simulatore della FPGA specifica?"): fino a questo punto la verifica era stata fatta solo con Icarus Verilog (simulatore RTL generico, verifica solo correttezza logica/funzionale, non timing né sintetizzabilità specifica del vendor). Individuato il toolchain reale già presente in ambiente (stesso usato per i benchmark in docs/FPGA-Neural-Datapatch-Benchmark.md, Appendice A): Yosys 0.68+post (/opt/homebrew/bin/yosys), nextpnr-ecp5 0.11.1 (/tmp/nextpnr/build/nextpnr-ecp5), ecppack/Project Trellis (/opt/homebrew/bin/ecppack). +- 2026-09-02T05:48 — [FASE 13] — Eseguita sintesi reale: `yosys -p "synth_ecp5 -json spi_slave.json -top spi_slave" rtl/spi_slave.v`. Risultato: 0 problemi rilevati dal CHECK pass, nessun latch inferito, 41 TRELLIS_FF, 55 LUT4, 21 PFUMX, 10 L6MUX21 — footprint coerente con un semplice shift register SPI. +- 2026-09-02T05:50 — [FASE 13] — Eseguito place&route reale: `nextpnr-ecp5 --45k --package CABGA381 --speed 8 --json spi_slave.json --lpf-allow-unconstrained --freq 80 --textcfg spi_slave.config` (stessi parametri usati nei benchmark esistenti, target LFE5U-45F-8BG381C). Risultato: **Max frequency 403.23 MHz, PASS al target 80 MHz** (ampio margine, atteso per un modulo così piccolo). Nessun errore di routing, "Program finished normally". +- 2026-09-02T05:52 — [FASE 13] — Generato bitstream reale: `ecppack spi_slave.config spi_slave.bit` -> completato senza errori (file da ~1 MB, dimensione plausibile per ECP5-45F). Confermata l'intera catena di implementazione (Verilog -> sintesi -> place&route -> bitstream) funzionante per questo modulo, non solo la simulazione comportamentale. +- 2026-09-02T05:53 — [FASE 13] — CONCLUSIONE: rtl/spi_slave.v verificato sia funzionalmente (Icarus, 4/4 test) sia a livello di implementazione reale sul target FPGA dichiarato nel progetto (Yosys+nextpnr-ecp5+ecppack, PASS a 80MHz con margine ampio). Il bug trovato durante il debug era interamente nel testbench (due bug distinti: contratto tx_byte_req mal interpretato + race di reset a delta-zero), NON nel DUT stesso — rtl/spi_slave.v non ha richiesto modifiche funzionali, solo l'aggiunta del commento di contratto su tx_byte_req. Prossimo step: rtl/spi_engine.v (FSM opcode + register bank). diff --git a/rtl/spi_slave.v b/rtl/spi_slave.v new file mode 100644 index 0000000..1722d4a --- /dev/null +++ b/rtl/spi_slave.v @@ -0,0 +1,206 @@ +`timescale 1ns/1ps + +// ================================================================ +// SPI SLAVE - physical layer +// +// SPI Mode 0 (CPOL=0, CPHA=0), MSB-first, single SPI. +// Per docs/FPGA-NeuralNetwork-Engine.md §8.1: the FPGA is always +// SPI slave; one command per CS-low period. +// +// SCLK/MOSI/CS_N arrive from an external, clock-asynchronous SPI +// master, so they are double-flop synchronized into the `clk` +// domain before any edge detection. This module only implements +// the byte-level shift register and CS framing; opcode/protocol +// decoding lives in spi_engine.v. +// +// Mode 0 timing: MOSI is sampled on the RISING edge of SCLK; MISO +// is driven on the FALLING edge (so it is stable well before the +// master's next rising-edge sample). +// ================================================================ + +module spi_slave ( + input wire clk, + input wire rst, + + // ------------------------------------------------------------ + // External SPI pins + // ------------------------------------------------------------ + + input wire sclk, + input wire mosi, + output reg miso, + input wire cs_n, + + // ------------------------------------------------------------ + // Byte-level interface to spi_engine + // ------------------------------------------------------------ + + output reg [7:0] rx_byte, + output reg rx_valid, // one clk pulse: rx_byte is valid + + // IMPORTANT / load-bearing contract: + // tx_byte_req is a PREFETCH hint, not a "byte consumed" event. + // It fires once at cs_fell (to load byte 1) and once more after + // EVERY byte's last bit (to have the next byte ready in time + // for MISO, in case the master keeps clocking) -- including + // after the LAST byte of a transaction, since the slave cannot + // know in advance that no further byte will follow until CS + // actually deasserts. A consumer MUST NOT treat tx_byte_req as + // a destructive "advance/pop the next byte" trigger, or it will + // over-advance by exactly one byte on every transaction (e.g. + // over-incrementing a RAM read pointer). Use `rx_valid` instead + // to advance any stateful pointer: it pulses exactly once per + // REAL byte transferred, never an extra time, because it is + // driven purely by counted SCLK edges that actually happened. + input wire [7:0] tx_byte, // next byte to shift out on MISO + output reg tx_byte_req, // one clk pulse: refresh tx_byte now (prefetch hint, see above) + + output wire cs_active, // level: transaction in progress + output reg cs_start, // one clk pulse: CS just went low + output reg cs_end // one clk pulse: CS just went high +); + + // ============================================================ + // CDC SYNCHRONIZERS (double flip-flop) + // ============================================================ + + reg [2:0] sclk_sync; + reg [2:0] mosi_sync; + reg [2:0] cs_n_sync; + + always @(posedge clk) begin + if (rst) begin + sclk_sync <= 3'b000; + mosi_sync <= 3'b000; + cs_n_sync <= 3'b111; + end else begin + sclk_sync <= {sclk_sync[1:0], sclk}; + mosi_sync <= {mosi_sync[1:0], mosi}; + cs_n_sync <= {cs_n_sync[1:0], cs_n}; + end + end + + wire sclk_s = sclk_sync[2]; + wire mosi_s = mosi_sync[2]; + wire cs_n_s = cs_n_sync[2]; + + // Edge detects on the synchronized (2-deep) signal using one + // extra history bit, so "rising"/"falling" mean the edge that + // just became visible to `clk`. + reg sclk_prev; + reg cs_n_prev; + + always @(posedge clk) begin + if (rst) begin + sclk_prev <= 1'b0; + cs_n_prev <= 1'b1; + end else begin + sclk_prev <= sclk_s; + cs_n_prev <= cs_n_s; + end + end + + wire sclk_rise = sclk_s & ~sclk_prev; + wire sclk_fall = ~sclk_s & sclk_prev; + + wire cs_fell = ~cs_n_s & cs_n_prev; // CS just went active (low) + wire cs_rose = cs_n_s & ~cs_n_prev; // CS just went inactive (high) + + assign cs_active = ~cs_n_s; + + // ============================================================ + // BIT COUNTER / SHIFT REGISTERS + // ============================================================ + + reg [2:0] bit_count; // 0..7, counts bits received/sent within a byte + reg [7:0] rx_shift; + reg [7:0] tx_shift; + + always @(posedge clk) begin + + if (rst) begin + + bit_count <= 3'd0; + rx_shift <= 8'h00; + tx_shift <= 8'h00; + rx_byte <= 8'h00; + rx_valid <= 1'b0; + tx_byte_req <= 1'b0; + miso <= 1'b0; + cs_start <= 1'b0; + cs_end <= 1'b0; + + end else begin + + // ------------------------------------------------ + // Default pulses + // ------------------------------------------------ + rx_valid <= 1'b0; + tx_byte_req <= 1'b0; + cs_start <= 1'b0; + cs_end <= 1'b0; + + if (cs_fell) begin + + // New transaction: reset bit counter, arm the + // first tx byte load and pre-load MISO with its + // MSB so it is valid before the first SCLK rise. + bit_count <= 3'd0; + tx_shift <= tx_byte; + tx_byte_req <= 1'b1; + miso <= tx_byte[7]; + cs_start <= 1'b1; + + end else if (cs_rose) begin + + cs_end <= 1'b1; + + end else if (cs_active) begin + + if (sclk_rise) begin + + // Sample MOSI (mode 0: data valid on rising edge) + rx_shift <= {rx_shift[6:0], mosi_s}; + + if (bit_count == 3'd7) begin + + bit_count <= 3'd0; + rx_byte <= {rx_shift[6:0], mosi_s}; + rx_valid <= 1'b1; + + end else begin + + bit_count <= bit_count + 3'd1; + + end + + end else if (sclk_fall) begin + + // Drive next MISO bit (mode 0: output changes + // on the falling edge, ahead of the next + // master-side rising-edge sample). + if (bit_count == 3'd0) begin + + // A byte boundary just completed on the + // matching rising edge above; load the + // next tx byte now. + tx_shift <= tx_byte; + tx_byte_req <= 1'b1; + miso <= tx_byte[7]; + + end else begin + + tx_shift <= {tx_shift[6:0], 1'b0}; + miso <= tx_shift[6]; + + end + + end + + end + + end + + end + +endmodule diff --git a/sim/spi_slave.vcd b/sim/spi_slave.vcd new file mode 100644 index 0000000..b0e6c38 --- /dev/null +++ b/sim/spi_slave.vcd @@ -0,0 +1,13327 @@ +$date + Wed Sep 2 15:24:00 2026 +$end +$version + Icarus Verilog +$end +$timescale + 1ps +$end +$scope module tb $end +$var wire 1 ! tx_byte_req $end +$var wire 1 " rx_valid $end +$var wire 8 # rx_byte [7:0] $end +$var wire 1 $ miso $end +$var wire 1 % cs_start $end +$var wire 1 & cs_end $end +$var wire 1 ' cs_active $end +$var real 1 ( CLK_PERIOD $end +$var reg 1 ) clk $end +$var reg 1 * cs_n $end +$var reg 1 + mosi $end +$var reg 1 , rst $end +$var reg 8 - rx_tmp [7:0] $end +$var reg 1 . sclk $end +$var reg 8 / tx_byte [7:0] $end +$var integer 32 0 cs_end_count [31:0] $end +$var integer 32 1 cs_start_count [31:0] $end +$var integer 32 2 errors [31:0] $end +$var integer 32 3 errors_before [31:0] $end +$var integer 32 4 rx_log_len [31:0] $end +$var integer 32 5 tx_queue_idx [31:0] $end +$var integer 32 6 tx_queue_len [31:0] $end +$scope module dut $end +$var wire 1 ) clk $end +$var wire 1 ' cs_active $end +$var wire 1 7 cs_fell $end +$var wire 1 * cs_n $end +$var wire 1 8 cs_rose $end +$var wire 1 + mosi $end +$var wire 1 , rst $end +$var wire 1 . sclk $end +$var wire 1 9 sclk_fall $end +$var wire 1 : sclk_rise $end +$var wire 8 ; tx_byte [7:0] $end +$var wire 1 < sclk_s $end +$var wire 1 = mosi_s $end +$var wire 1 > cs_n_s $end +$var reg 3 ? bit_count [2:0] $end +$var reg 1 & cs_end $end +$var reg 1 @ cs_n_prev $end +$var reg 3 A cs_n_sync [2:0] $end +$var reg 1 % cs_start $end +$var reg 1 $ miso $end +$var reg 3 B mosi_sync [2:0] $end +$var reg 8 C rx_byte [7:0] $end +$var reg 8 D rx_shift [7:0] $end +$var reg 1 " rx_valid $end +$var reg 1 E sclk_prev $end +$var reg 3 F sclk_sync [2:0] $end +$var reg 1 ! tx_byte_req $end +$var reg 8 G tx_shift [7:0] $end +$upscope $end +$scope task clk_wait $end +$var integer 32 H k [31:0] $end +$var integer 32 I n [31:0] $end +$upscope $end +$scope task spi_begin $end +$var integer 32 J half_bit_cycles [31:0] $end +$upscope $end +$scope task spi_end $end +$var integer 32 K half_bit_cycles [31:0] $end +$upscope $end +$scope task spi_xfer_byte $end +$var reg 8 L rx [7:0] $end +$var reg 8 M rx_acc [7:0] $end +$var reg 8 N tx [7:0] $end +$var integer 32 O half_bit_cycles [31:0] $end +$var integer 32 P i [31:0] $end +$upscope $end +$upscope $end +$enddefinitions $end +$comment Show the parameter values. $end +$dumpall +r12.5 ( +$end +#0 +$dumpvars +bx P +bx O +bx N +bx M +bx L +bx K +bx J +bx I +bx H +bx G +bx F +xE +bx D +bx C +bx B +bx A +x@ +bx ? +x> +x= +x< +bx ; +x: +x9 +x8 +x7 +b0 6 +bx 5 +b0 4 +bx 3 +b0 2 +bx 1 +bx 0 +bx / +0. +bx - +1, +0+ +1* +0) +x' +x& +x% +x$ +bx # +x" +x! +$end +#6250 +07 +0' +08 +0: +1> +0= +0< +09 +b0 / +b0 ; +b111 A +b0 B +b0 F +1@ +0E +0& +0% +0$ +0! +0" +b0 # +b0 C +b0 G +b0 D +b0 ? +b0 5 +b0 0 +b0 1 +1) +#12500 +0) +#18750 +1) +#25000 +0) +#31250 +1) +#37500 +0) +#43750 +1) +#50000 +0) +#56250 +0, +1) +#62500 +0) +#68750 +1) +#75000 +0) +#81250 +1) +#87500 +0) +#93750 +1) +#100000 +0) +#106250 +1) +#112500 +0) +#118750 +b111100 / +b111100 ; +b0 H +b10000 I +b1000 J +b1 6 +b0 3 +1) +#125000 +0) +#131250 +b1 H +1) +#137500 +0) +#143750 +b10 H +1) +#150000 +0) +#156250 +b11 H +1) +#162500 +0) +#168750 +b100 H +1) +#175000 +0) +#181250 +b101 H +1) +#187500 +0) +#193750 +b110 H +1) +#200000 +0) +#206250 +b111 H +1) +#212500 +0) +#218750 +b1000 H +1) +#225000 +0) +#231250 +b1001 H +1) +#237500 +0) +#243750 +b1010 H +1) +#250000 +0) +#256250 +b1011 H +1) +#262500 +0) +#268750 +b1100 H +1) +#275000 +0) +#281250 +b1101 H +1) +#287500 +0) +#293750 +b1110 H +1) +#300000 +0) +#306250 +b1111 H +1) +#312500 +0) +#318750 +0* +b0 H +1) +#325000 +0) +#331250 +b110 A +b1 H +1) +#337500 +0) +#343750 +b100 A +b10 H +1) +#350000 +0) +#356250 +17 +1' +0> +b0 A +b11 H +1) +#362500 +0) +#368750 +07 +1% +1! +b111100 G +0@ +b100 H +1) +#375000 +0) +#381250 +0% +0! +b1 1 +b101 H +1) +#387500 +0) +#393750 +b110 H +1) +#400000 +0) +#406250 +b111 H +1) +#412500 +0) +#418750 +b1000 H +1) +#425000 +0) +#431250 +b1001 H +1) +#437500 +0) +#443750 +b1010 H +1) +#450000 +0) +#456250 +b1011 H +1) +#462500 +0) +#468750 +b1100 H +1) +#475000 +0) +#481250 +b1101 H +1) +#487500 +0) +#493750 +b1110 H +1) +#500000 +0) +#506250 +b1111 H +1) +#512500 +0) +#518750 +b1000 I +1+ +b111 P +b0 M +b1000 O +b10100101 N +b0 H +1) +#525000 +0) +#531250 +b1 B +b1 H +1) +#537500 +0) +#543750 +b11 B +b10 H +1) +#550000 +0) +#556250 +1= +b111 B +b11 H +1) +#562500 +0) +#568750 +b100 H +1) +#575000 +0) +#581250 +b101 H +1) +#587500 +0) +#593750 +b110 H +1) +#600000 +0) +#606250 +b111 H +1) +#612500 +0) +#618750 +1. +b0 H +1) +#625000 +0) +#631250 +b1 F +b1 H +1) +#637500 +0) +#643750 +b11 F +b10 H +1) +#650000 +0) +#656250 +1: +1< +b111 F +b11 H +1) +#662500 +0) +#668750 +0: +b1 ? +b1 D +1E +b100 H +1) +#675000 +0) +#681250 +b101 H +1) +#687500 +0) +#693750 +b110 H +1) +#700000 +0) +#706250 +b111 H +1) +#712500 +0) +#718750 +0. +b0 H +1) +#725000 +0) +#731250 +b110 F +b1 H +1) +#737500 +0) +#743750 +b100 F +b10 H +1) +#750000 +0) +#756250 +19 +0< +b0 F +b11 H +1) +#762500 +0) +#768750 +09 +b1111000 G +0E +b100 H +1) +#775000 +0) +#781250 +b101 H +1) +#787500 +0) +#793750 +b110 H +1) +#800000 +0) +#806250 +b111 H +1) +#812500 +0) +#818750 +0+ +b110 P +b0 H +1) +#825000 +0) +#831250 +b110 B +b1 H +1) +#837500 +0) +#843750 +b100 B +b10 H +1) +#850000 +0) +#856250 +0= +b0 B +b11 H +1) +#862500 +0) +#868750 +b100 H +1) +#875000 +0) +#881250 +b101 H +1) +#887500 +0) +#893750 +b110 H +1) +#900000 +0) +#906250 +b111 H +1) +#912500 +0) +#918750 +1. +b0 H +1) +#925000 +0) +#931250 +b1 F +b1 H +1) +#937500 +0) +#943750 +b11 F +b10 H +1) +#950000 +0) +#956250 +1: +1< +b111 F +b11 H +1) +#962500 +0) +#968750 +0: +b10 ? +b10 D +1E +b100 H +1) +#975000 +0) +#981250 +b101 H +1) +#987500 +0) +#993750 +b110 H +1) +#1000000 +0) +#1006250 +b111 H +1) +#1012500 +0) +#1018750 +0. +b0 H +1) +#1025000 +0) +#1031250 +b110 F +b1 H +1) +#1037500 +0) +#1043750 +b100 F +b10 H +1) +#1050000 +0) +#1056250 +19 +0< +b0 F +b11 H +1) +#1062500 +0) +#1068750 +09 +1$ +b11110000 G +0E +b100 H +1) +#1075000 +0) +#1081250 +b101 H +1) +#1087500 +0) +#1093750 +b110 H +1) +#1100000 +0) +#1106250 +b111 H +1) +#1112500 +0) +#1118750 +1+ +b101 P +b0 H +1) +#1125000 +0) +#1131250 +b1 B +b1 H +1) +#1137500 +0) +#1143750 +b11 B +b10 H +1) +#1150000 +0) +#1156250 +1= +b111 B +b11 H +1) +#1162500 +0) +#1168750 +b100 H +1) +#1175000 +0) +#1181250 +b101 H +1) +#1187500 +0) +#1193750 +b110 H +1) +#1200000 +0) +#1206250 +b111 H +1) +#1212500 +0) +#1218750 +b100000 M +1. +b0 H +1) +#1225000 +0) +#1231250 +b1 F +b1 H +1) +#1237500 +0) +#1243750 +b11 F +b10 H +1) +#1250000 +0) +#1256250 +1: +1< +b111 F +b11 H +1) +#1262500 +0) +#1268750 +0: +b11 ? +b101 D +1E +b100 H +1) +#1275000 +0) +#1281250 +b101 H +1) +#1287500 +0) +#1293750 +b110 H +1) +#1300000 +0) +#1306250 +b111 H +1) +#1312500 +0) +#1318750 +0. +b0 H +1) +#1325000 +0) +#1331250 +b110 F +b1 H +1) +#1337500 +0) +#1343750 +b100 F +b10 H +1) +#1350000 +0) +#1356250 +19 +0< +b0 F +b11 H +1) +#1362500 +0) +#1368750 +09 +b11100000 G +0E +b100 H +1) +#1375000 +0) +#1381250 +b101 H +1) +#1387500 +0) +#1393750 +b110 H +1) +#1400000 +0) +#1406250 +b111 H +1) +#1412500 +0) +#1418750 +0+ +b100 P +b0 H +1) +#1425000 +0) +#1431250 +b110 B +b1 H +1) +#1437500 +0) +#1443750 +b100 B +b10 H +1) +#1450000 +0) +#1456250 +0= +b0 B +b11 H +1) +#1462500 +0) +#1468750 +b100 H +1) +#1475000 +0) +#1481250 +b101 H +1) +#1487500 +0) +#1493750 +b110 H +1) +#1500000 +0) +#1506250 +b111 H +1) +#1512500 +0) +#1518750 +b110000 M +1. +b0 H +1) +#1525000 +0) +#1531250 +b1 F +b1 H +1) +#1537500 +0) +#1543750 +b11 F +b10 H +1) +#1550000 +0) +#1556250 +1: +1< +b111 F +b11 H +1) +#1562500 +0) +#1568750 +0: +b100 ? +b1010 D +1E +b100 H +1) +#1575000 +0) +#1581250 +b101 H +1) +#1587500 +0) +#1593750 +b110 H +1) +#1600000 +0) +#1606250 +b111 H +1) +#1612500 +0) +#1618750 +0. +b0 H +1) +#1625000 +0) +#1631250 +b110 F +b1 H +1) +#1637500 +0) +#1643750 +b100 F +b10 H +1) +#1650000 +0) +#1656250 +19 +0< +b0 F +b11 H +1) +#1662500 +0) +#1668750 +09 +b11000000 G +0E +b100 H +1) +#1675000 +0) +#1681250 +b101 H +1) +#1687500 +0) +#1693750 +b110 H +1) +#1700000 +0) +#1706250 +b111 H +1) +#1712500 +0) +#1718750 +b11 P +b0 H +1) +#1725000 +0) +#1731250 +b1 H +1) +#1737500 +0) +#1743750 +b10 H +1) +#1750000 +0) +#1756250 +b11 H +1) +#1762500 +0) +#1768750 +b100 H +1) +#1775000 +0) +#1781250 +b101 H +1) +#1787500 +0) +#1793750 +b110 H +1) +#1800000 +0) +#1806250 +b111 H +1) +#1812500 +0) +#1818750 +b111000 M +1. +b0 H +1) +#1825000 +0) +#1831250 +b1 F +b1 H +1) +#1837500 +0) +#1843750 +b11 F +b10 H +1) +#1850000 +0) +#1856250 +1: +1< +b111 F +b11 H +1) +#1862500 +0) +#1868750 +0: +b101 ? +b10100 D +1E +b100 H +1) +#1875000 +0) +#1881250 +b101 H +1) +#1887500 +0) +#1893750 +b110 H +1) +#1900000 +0) +#1906250 +b111 H +1) +#1912500 +0) +#1918750 +0. +b0 H +1) +#1925000 +0) +#1931250 +b110 F +b1 H +1) +#1937500 +0) +#1943750 +b100 F +b10 H +1) +#1950000 +0) +#1956250 +19 +0< +b0 F +b11 H +1) +#1962500 +0) +#1968750 +09 +b10000000 G +0E +b100 H +1) +#1975000 +0) +#1981250 +b101 H +1) +#1987500 +0) +#1993750 +b110 H +1) +#2000000 +0) +#2006250 +b111 H +1) +#2012500 +0) +#2018750 +1+ +b10 P +b0 H +1) +#2025000 +0) +#2031250 +b1 B +b1 H +1) +#2037500 +0) +#2043750 +b11 B +b10 H +1) +#2050000 +0) +#2056250 +1= +b111 B +b11 H +1) +#2062500 +0) +#2068750 +b100 H +1) +#2075000 +0) +#2081250 +b101 H +1) +#2087500 +0) +#2093750 +b110 H +1) +#2100000 +0) +#2106250 +b111 H +1) +#2112500 +0) +#2118750 +b111100 M +1. +b0 H +1) +#2125000 +0) +#2131250 +b1 F +b1 H +1) +#2137500 +0) +#2143750 +b11 F +b10 H +1) +#2150000 +0) +#2156250 +1: +1< +b111 F +b11 H +1) +#2162500 +0) +#2168750 +0: +b110 ? +b101001 D +1E +b100 H +1) +#2175000 +0) +#2181250 +b101 H +1) +#2187500 +0) +#2193750 +b110 H +1) +#2200000 +0) +#2206250 +b111 H +1) +#2212500 +0) +#2218750 +0. +b0 H +1) +#2225000 +0) +#2231250 +b110 F +b1 H +1) +#2237500 +0) +#2243750 +b100 F +b10 H +1) +#2250000 +0) +#2256250 +19 +0< +b0 F +b11 H +1) +#2262500 +0) +#2268750 +09 +0$ +b0 G +0E +b100 H +1) +#2275000 +0) +#2281250 +b101 H +1) +#2287500 +0) +#2293750 +b110 H +1) +#2300000 +0) +#2306250 +b111 H +1) +#2312500 +0) +#2318750 +0+ +b1 P +b0 H +1) +#2325000 +0) +#2331250 +b110 B +b1 H +1) +#2337500 +0) +#2343750 +b100 B +b10 H +1) +#2350000 +0) +#2356250 +0= +b0 B +b11 H +1) +#2362500 +0) +#2368750 +b100 H +1) +#2375000 +0) +#2381250 +b101 H +1) +#2387500 +0) +#2393750 +b110 H +1) +#2400000 +0) +#2406250 +b111 H +1) +#2412500 +0) +#2418750 +1. +b0 H +1) +#2425000 +0) +#2431250 +b1 F +b1 H +1) +#2437500 +0) +#2443750 +b11 F +b10 H +1) +#2450000 +0) +#2456250 +1: +1< +b111 F +b11 H +1) +#2462500 +0) +#2468750 +0: +b111 ? +b1010010 D +1E +b100 H +1) +#2475000 +0) +#2481250 +b101 H +1) +#2487500 +0) +#2493750 +b110 H +1) +#2500000 +0) +#2506250 +b111 H +1) +#2512500 +0) +#2518750 +0. +b0 H +1) +#2525000 +0) +#2531250 +b110 F +b1 H +1) +#2537500 +0) +#2543750 +b100 F +b10 H +1) +#2550000 +0) +#2556250 +19 +0< +b0 F +b11 H +1) +#2562500 +0) +#2568750 +09 +0E +b100 H +1) +#2575000 +0) +#2581250 +b101 H +1) +#2587500 +0) +#2593750 +b110 H +1) +#2600000 +0) +#2606250 +b111 H +1) +#2612500 +0) +#2618750 +1+ +b0 P +b0 H +1) +#2625000 +0) +#2631250 +b1 B +b1 H +1) +#2637500 +0) +#2643750 +b11 B +b10 H +1) +#2650000 +0) +#2656250 +1= +b111 B +b11 H +1) +#2662500 +0) +#2668750 +b100 H +1) +#2675000 +0) +#2681250 +b101 H +1) +#2687500 +0) +#2693750 +b110 H +1) +#2700000 +0) +#2706250 +b111 H +1) +#2712500 +0) +#2718750 +1. +b0 H +1) +#2725000 +0) +#2731250 +b1 F +b1 H +1) +#2737500 +0) +#2743750 +b11 F +b10 H +1) +#2750000 +0) +#2756250 +1: +1< +b111 F +b11 H +1) +#2762500 +0) +#2768750 +0: +1" +b10100101 # +b10100101 C +b0 ? +b10100101 D +1E +b100 H +1) +#2775000 +0) +#2781250 +b0 / +b0 ; +0" +b1 5 +b1 4 +b101 H +1) +#2787500 +0) +#2793750 +b110 H +1) +#2800000 +0) +#2806250 +b111 H +1) +#2812500 +0) +#2818750 +0. +b0 H +1) +#2825000 +0) +#2831250 +b110 F +b1 H +1) +#2837500 +0) +#2843750 +b100 F +b10 H +1) +#2850000 +0) +#2856250 +19 +0< +b0 F +b11 H +1) +#2862500 +0) +#2868750 +09 +1! +0E +b100 H +1) +#2875000 +0) +#2881250 +0! +b101 H +1) +#2887500 +0) +#2893750 +b110 H +1) +#2900000 +0) +#2906250 +b111 H +1) +#2912500 +0) +#2918750 +b10000 I +b1000 K +b111100 - +b111100 L +b11111111111111111111111111111111 P +b0 H +1) +#2925000 +0) +#2931250 +b1 H +1) +#2937500 +0) +#2943750 +b10 H +1) +#2950000 +0) +#2956250 +b11 H +1) +#2962500 +0) +#2968750 +b100 H +1) +#2975000 +0) +#2981250 +b101 H +1) +#2987500 +0) +#2993750 +b110 H +1) +#3000000 +0) +#3006250 +b111 H +1) +#3012500 +0) +#3018750 +b1000 H +1) +#3025000 +0) +#3031250 +b1001 H +1) +#3037500 +0) +#3043750 +b1010 H +1) +#3050000 +0) +#3056250 +b1011 H +1) +#3062500 +0) +#3068750 +b1100 H +1) +#3075000 +0) +#3081250 +b1101 H +1) +#3087500 +0) +#3093750 +b1110 H +1) +#3100000 +0) +#3106250 +b1111 H +1) +#3112500 +0) +#3118750 +1* +b0 H +1) +#3125000 +0) +#3131250 +b1 A +b1 H +1) +#3137500 +0) +#3143750 +b11 A +b10 H +1) +#3150000 +0) +#3156250 +0' +18 +1> +b111 A +b11 H +1) +#3162500 +0) +#3168750 +08 +1& +1@ +b100 H +1) +#3175000 +0) +#3181250 +0& +b1 0 +b101 H +1) +#3187500 +0) +#3193750 +b110 H +1) +#3200000 +0) +#3206250 +b111 H +1) +#3212500 +0) +#3218750 +b1000 H +1) +#3225000 +0) +#3231250 +b1001 H +1) +#3237500 +0) +#3243750 +b1010 H +1) +#3250000 +0) +#3256250 +b1011 H +1) +#3262500 +0) +#3268750 +b1100 H +1) +#3275000 +0) +#3281250 +b1101 H +1) +#3287500 +0) +#3293750 +b1110 H +1) +#3300000 +0) +#3306250 +b1111 H +1) +#3312500 +0) +#3318750 +b10000 H +1) +#3325000 +0) +#3331250 +1) +#3337500 +0) +#3343750 +1) +#3350000 +1, +0) +#3356250 +0= +b111100 / +b111100 ; +b0 B +b0 # +b0 C +b0 D +b0 5 +b0 4 +b0 0 +b0 1 +1) +#3362500 +0, +0) +#3368750 +b1 B +b11011110 / +b11011110 ; +b0 H +0+ +b100 6 +1) +#3375000 +0) +#3381250 +b10 B +b1 H +1) +#3387500 +0) +#3393750 +1= +b100 B +b10 H +1) +#3400000 +0) +#3406250 +0= +b0 B +b11 H +1) +#3412500 +0) +#3418750 +b100 H +1) +#3425000 +0) +#3431250 +b101 H +1) +#3437500 +0) +#3443750 +b110 H +1) +#3450000 +0) +#3456250 +b111 H +1) +#3462500 +0) +#3468750 +b1000 H +1) +#3475000 +0) +#3481250 +b1001 H +1) +#3487500 +0) +#3493750 +b1010 H +1) +#3500000 +0) +#3506250 +b1011 H +1) +#3512500 +0) +#3518750 +b1100 H +1) +#3525000 +0) +#3531250 +b1101 H +1) +#3537500 +0) +#3543750 +b1110 H +1) +#3550000 +0) +#3556250 +b1111 H +1) +#3562500 +0) +#3568750 +0* +b0 H +1) +#3575000 +0) +#3581250 +b110 A +b1 H +1) +#3587500 +0) +#3593750 +b100 A +b10 H +1) +#3600000 +0) +#3606250 +17 +1' +0> +b0 A +b11 H +1) +#3612500 +0) +#3618750 +07 +1% +1$ +1! +b11011110 G +0@ +b100 H +1) +#3625000 +0) +#3631250 +0% +0! +b1 1 +b101 H +1) +#3637500 +0) +#3643750 +b110 H +1) +#3650000 +0) +#3656250 +b111 H +1) +#3662500 +0) +#3668750 +b1000 H +1) +#3675000 +0) +#3681250 +b1001 H +1) +#3687500 +0) +#3693750 +b1010 H +1) +#3700000 +0) +#3706250 +b1011 H +1) +#3712500 +0) +#3718750 +b1100 H +1) +#3725000 +0) +#3731250 +b1101 H +1) +#3737500 +0) +#3743750 +b1110 H +1) +#3750000 +0) +#3756250 +b1111 H +1) +#3762500 +0) +#3768750 +b1000 I +b111 P +b0 M +b10001 N +b0 H +1) +#3775000 +0) +#3781250 +b1 H +1) +#3787500 +0) +#3793750 +b10 H +1) +#3800000 +0) +#3806250 +b11 H +1) +#3812500 +0) +#3818750 +b100 H +1) +#3825000 +0) +#3831250 +b101 H +1) +#3837500 +0) +#3843750 +b110 H +1) +#3850000 +0) +#3856250 +b111 H +1) +#3862500 +0) +#3868750 +b10000000 M +1. +b0 H +1) +#3875000 +0) +#3881250 +b1 F +b1 H +1) +#3887500 +0) +#3893750 +b11 F +b10 H +1) +#3900000 +0) +#3906250 +1: +1< +b111 F +b11 H +1) +#3912500 +0) +#3918750 +0: +b1 ? +1E +b100 H +1) +#3925000 +0) +#3931250 +b101 H +1) +#3937500 +0) +#3943750 +b110 H +1) +#3950000 +0) +#3956250 +b111 H +1) +#3962500 +0) +#3968750 +0. +b0 H +1) +#3975000 +0) +#3981250 +b110 F +b1 H +1) +#3987500 +0) +#3993750 +b100 F +b10 H +1) +#4000000 +0) +#4006250 +19 +0< +b0 F +b11 H +1) +#4012500 +0) +#4018750 +09 +b10111100 G +0E +b100 H +1) +#4025000 +0) +#4031250 +b101 H +1) +#4037500 +0) +#4043750 +b110 H +1) +#4050000 +0) +#4056250 +b111 H +1) +#4062500 +0) +#4068750 +b110 P +b0 H +1) +#4075000 +0) +#4081250 +b1 H +1) +#4087500 +0) +#4093750 +b10 H +1) +#4100000 +0) +#4106250 +b11 H +1) +#4112500 +0) +#4118750 +b100 H +1) +#4125000 +0) +#4131250 +b101 H +1) +#4137500 +0) +#4143750 +b110 H +1) +#4150000 +0) +#4156250 +b111 H +1) +#4162500 +0) +#4168750 +b11000000 M +1. +b0 H +1) +#4175000 +0) +#4181250 +b1 F +b1 H +1) +#4187500 +0) +#4193750 +b11 F +b10 H +1) +#4200000 +0) +#4206250 +1: +1< +b111 F +b11 H +1) +#4212500 +0) +#4218750 +0: +b10 ? +1E +b100 H +1) +#4225000 +0) +#4231250 +b101 H +1) +#4237500 +0) +#4243750 +b110 H +1) +#4250000 +0) +#4256250 +b111 H +1) +#4262500 +0) +#4268750 +0. +b0 H +1) +#4275000 +0) +#4281250 +b110 F +b1 H +1) +#4287500 +0) +#4293750 +b100 F +b10 H +1) +#4300000 +0) +#4306250 +19 +0< +b0 F +b11 H +1) +#4312500 +0) +#4318750 +09 +0$ +b1111000 G +0E +b100 H +1) +#4325000 +0) +#4331250 +b101 H +1) +#4337500 +0) +#4343750 +b110 H +1) +#4350000 +0) +#4356250 +b111 H +1) +#4362500 +0) +#4368750 +b101 P +b0 H +1) +#4375000 +0) +#4381250 +b1 H +1) +#4387500 +0) +#4393750 +b10 H +1) +#4400000 +0) +#4406250 +b11 H +1) +#4412500 +0) +#4418750 +b100 H +1) +#4425000 +0) +#4431250 +b101 H +1) +#4437500 +0) +#4443750 +b110 H +1) +#4450000 +0) +#4456250 +b111 H +1) +#4462500 +0) +#4468750 +1. +b0 H +1) +#4475000 +0) +#4481250 +b1 F +b1 H +1) +#4487500 +0) +#4493750 +b11 F +b10 H +1) +#4500000 +0) +#4506250 +1: +1< +b111 F +b11 H +1) +#4512500 +0) +#4518750 +0: +b11 ? +1E +b100 H +1) +#4525000 +0) +#4531250 +b101 H +1) +#4537500 +0) +#4543750 +b110 H +1) +#4550000 +0) +#4556250 +b111 H +1) +#4562500 +0) +#4568750 +0. +b0 H +1) +#4575000 +0) +#4581250 +b110 F +b1 H +1) +#4587500 +0) +#4593750 +b100 F +b10 H +1) +#4600000 +0) +#4606250 +19 +0< +b0 F +b11 H +1) +#4612500 +0) +#4618750 +09 +1$ +b11110000 G +0E +b100 H +1) +#4625000 +0) +#4631250 +b101 H +1) +#4637500 +0) +#4643750 +b110 H +1) +#4650000 +0) +#4656250 +b111 H +1) +#4662500 +0) +#4668750 +1+ +b100 P +b0 H +1) +#4675000 +0) +#4681250 +b1 B +b1 H +1) +#4687500 +0) +#4693750 +b11 B +b10 H +1) +#4700000 +0) +#4706250 +1= +b111 B +b11 H +1) +#4712500 +0) +#4718750 +b100 H +1) +#4725000 +0) +#4731250 +b101 H +1) +#4737500 +0) +#4743750 +b110 H +1) +#4750000 +0) +#4756250 +b111 H +1) +#4762500 +0) +#4768750 +b11010000 M +1. +b0 H +1) +#4775000 +0) +#4781250 +b1 F +b1 H +1) +#4787500 +0) +#4793750 +b11 F +b10 H +1) +#4800000 +0) +#4806250 +1: +1< +b111 F +b11 H +1) +#4812500 +0) +#4818750 +0: +b100 ? +b1 D +1E +b100 H +1) +#4825000 +0) +#4831250 +b101 H +1) +#4837500 +0) +#4843750 +b110 H +1) +#4850000 +0) +#4856250 +b111 H +1) +#4862500 +0) +#4868750 +0. +b0 H +1) +#4875000 +0) +#4881250 +b110 F +b1 H +1) +#4887500 +0) +#4893750 +b100 F +b10 H +1) +#4900000 +0) +#4906250 +19 +0< +b0 F +b11 H +1) +#4912500 +0) +#4918750 +09 +b11100000 G +0E +b100 H +1) +#4925000 +0) +#4931250 +b101 H +1) +#4937500 +0) +#4943750 +b110 H +1) +#4950000 +0) +#4956250 +b111 H +1) +#4962500 +0) +#4968750 +0+ +b11 P +b0 H +1) +#4975000 +0) +#4981250 +b110 B +b1 H +1) +#4987500 +0) +#4993750 +b100 B +b10 H +1) +#5000000 +0) +#5006250 +0= +b0 B +b11 H +1) +#5012500 +0) +#5018750 +b100 H +1) +#5025000 +0) +#5031250 +b101 H +1) +#5037500 +0) +#5043750 +b110 H +1) +#5050000 +0) +#5056250 +b111 H +1) +#5062500 +0) +#5068750 +b11011000 M +1. +b0 H +1) +#5075000 +0) +#5081250 +b1 F +b1 H +1) +#5087500 +0) +#5093750 +b11 F +b10 H +1) +#5100000 +0) +#5106250 +1: +1< +b111 F +b11 H +1) +#5112500 +0) +#5118750 +0: +b101 ? +b10 D +1E +b100 H +1) +#5125000 +0) +#5131250 +b101 H +1) +#5137500 +0) +#5143750 +b110 H +1) +#5150000 +0) +#5156250 +b111 H +1) +#5162500 +0) +#5168750 +0. +b0 H +1) +#5175000 +0) +#5181250 +b110 F +b1 H +1) +#5187500 +0) +#5193750 +b100 F +b10 H +1) +#5200000 +0) +#5206250 +19 +0< +b0 F +b11 H +1) +#5212500 +0) +#5218750 +09 +b11000000 G +0E +b100 H +1) +#5225000 +0) +#5231250 +b101 H +1) +#5237500 +0) +#5243750 +b110 H +1) +#5250000 +0) +#5256250 +b111 H +1) +#5262500 +0) +#5268750 +b10 P +b0 H +1) +#5275000 +0) +#5281250 +b1 H +1) +#5287500 +0) +#5293750 +b10 H +1) +#5300000 +0) +#5306250 +b11 H +1) +#5312500 +0) +#5318750 +b100 H +1) +#5325000 +0) +#5331250 +b101 H +1) +#5337500 +0) +#5343750 +b110 H +1) +#5350000 +0) +#5356250 +b111 H +1) +#5362500 +0) +#5368750 +b11011100 M +1. +b0 H +1) +#5375000 +0) +#5381250 +b1 F +b1 H +1) +#5387500 +0) +#5393750 +b11 F +b10 H +1) +#5400000 +0) +#5406250 +1: +1< +b111 F +b11 H +1) +#5412500 +0) +#5418750 +0: +b110 ? +b100 D +1E +b100 H +1) +#5425000 +0) +#5431250 +b101 H +1) +#5437500 +0) +#5443750 +b110 H +1) +#5450000 +0) +#5456250 +b111 H +1) +#5462500 +0) +#5468750 +0. +b0 H +1) +#5475000 +0) +#5481250 +b110 F +b1 H +1) +#5487500 +0) +#5493750 +b100 F +b10 H +1) +#5500000 +0) +#5506250 +19 +0< +b0 F +b11 H +1) +#5512500 +0) +#5518750 +09 +b10000000 G +0E +b100 H +1) +#5525000 +0) +#5531250 +b101 H +1) +#5537500 +0) +#5543750 +b110 H +1) +#5550000 +0) +#5556250 +b111 H +1) +#5562500 +0) +#5568750 +b1 P +b0 H +1) +#5575000 +0) +#5581250 +b1 H +1) +#5587500 +0) +#5593750 +b10 H +1) +#5600000 +0) +#5606250 +b11 H +1) +#5612500 +0) +#5618750 +b100 H +1) +#5625000 +0) +#5631250 +b101 H +1) +#5637500 +0) +#5643750 +b110 H +1) +#5650000 +0) +#5656250 +b111 H +1) +#5662500 +0) +#5668750 +b11011110 M +1. +b0 H +1) +#5675000 +0) +#5681250 +b1 F +b1 H +1) +#5687500 +0) +#5693750 +b11 F +b10 H +1) +#5700000 +0) +#5706250 +1: +1< +b111 F +b11 H +1) +#5712500 +0) +#5718750 +0: +b111 ? +b1000 D +1E +b100 H +1) +#5725000 +0) +#5731250 +b101 H +1) +#5737500 +0) +#5743750 +b110 H +1) +#5750000 +0) +#5756250 +b111 H +1) +#5762500 +0) +#5768750 +0. +b0 H +1) +#5775000 +0) +#5781250 +b110 F +b1 H +1) +#5787500 +0) +#5793750 +b100 F +b10 H +1) +#5800000 +0) +#5806250 +19 +0< +b0 F +b11 H +1) +#5812500 +0) +#5818750 +09 +0$ +b0 G +0E +b100 H +1) +#5825000 +0) +#5831250 +b101 H +1) +#5837500 +0) +#5843750 +b110 H +1) +#5850000 +0) +#5856250 +b111 H +1) +#5862500 +0) +#5868750 +1+ +b0 P +b0 H +1) +#5875000 +0) +#5881250 +b1 B +b1 H +1) +#5887500 +0) +#5893750 +b11 B +b10 H +1) +#5900000 +0) +#5906250 +1= +b111 B +b11 H +1) +#5912500 +0) +#5918750 +b100 H +1) +#5925000 +0) +#5931250 +b101 H +1) +#5937500 +0) +#5943750 +b110 H +1) +#5950000 +0) +#5956250 +b111 H +1) +#5962500 +0) +#5968750 +1. +b0 H +1) +#5975000 +0) +#5981250 +b1 F +b1 H +1) +#5987500 +0) +#5993750 +b11 F +b10 H +1) +#6000000 +0) +#6006250 +1: +1< +b111 F +b11 H +1) +#6012500 +0) +#6018750 +0: +1" +b10001 # +b10001 C +b0 ? +b10001 D +1E +b100 H +1) +#6025000 +0) +#6031250 +b10101101 / +b10101101 ; +0" +b1 5 +b1 4 +b101 H +1) +#6037500 +0) +#6043750 +b110 H +1) +#6050000 +0) +#6056250 +b111 H +1) +#6062500 +0) +#6068750 +0. +b0 H +1) +#6075000 +0) +#6081250 +b110 F +b1 H +1) +#6087500 +0) +#6093750 +b100 F +b10 H +1) +#6100000 +0) +#6106250 +19 +0< +b0 F +b11 H +1) +#6112500 +0) +#6118750 +09 +1$ +1! +b10101101 G +0E +b100 H +1) +#6125000 +0) +#6131250 +0! +b101 H +1) +#6137500 +0) +#6143750 +b110 H +1) +#6150000 +0) +#6156250 +b111 H +1) +#6162500 +0) +#6168750 +0+ +b0 M +b100010 N +b11011110 - +b11011110 L +b111 P +b0 H +1) +#6175000 +0) +#6181250 +b110 B +b1 H +1) +#6187500 +0) +#6193750 +b100 B +b10 H +1) +#6200000 +0) +#6206250 +0= +b0 B +b11 H +1) +#6212500 +0) +#6218750 +b100 H +1) +#6225000 +0) +#6231250 +b101 H +1) +#6237500 +0) +#6243750 +b110 H +1) +#6250000 +0) +#6256250 +b111 H +1) +#6262500 +0) +#6268750 +b10000000 M +1. +b0 H +1) +#6275000 +0) +#6281250 +b1 F +b1 H +1) +#6287500 +0) +#6293750 +b11 F +b10 H +1) +#6300000 +0) +#6306250 +1: +1< +b111 F +b11 H +1) +#6312500 +0) +#6318750 +0: +b1 ? +b100010 D +1E +b100 H +1) +#6325000 +0) +#6331250 +b101 H +1) +#6337500 +0) +#6343750 +b110 H +1) +#6350000 +0) +#6356250 +b111 H +1) +#6362500 +0) +#6368750 +0. +b0 H +1) +#6375000 +0) +#6381250 +b110 F +b1 H +1) +#6387500 +0) +#6393750 +b100 F +b10 H +1) +#6400000 +0) +#6406250 +19 +0< +b0 F +b11 H +1) +#6412500 +0) +#6418750 +09 +0$ +b1011010 G +0E +b100 H +1) +#6425000 +0) +#6431250 +b101 H +1) +#6437500 +0) +#6443750 +b110 H +1) +#6450000 +0) +#6456250 +b111 H +1) +#6462500 +0) +#6468750 +b110 P +b0 H +1) +#6475000 +0) +#6481250 +b1 H +1) +#6487500 +0) +#6493750 +b10 H +1) +#6500000 +0) +#6506250 +b11 H +1) +#6512500 +0) +#6518750 +b100 H +1) +#6525000 +0) +#6531250 +b101 H +1) +#6537500 +0) +#6543750 +b110 H +1) +#6550000 +0) +#6556250 +b111 H +1) +#6562500 +0) +#6568750 +1. +b0 H +1) +#6575000 +0) +#6581250 +b1 F +b1 H +1) +#6587500 +0) +#6593750 +b11 F +b10 H +1) +#6600000 +0) +#6606250 +1: +1< +b111 F +b11 H +1) +#6612500 +0) +#6618750 +0: +b10 ? +b1000100 D +1E +b100 H +1) +#6625000 +0) +#6631250 +b101 H +1) +#6637500 +0) +#6643750 +b110 H +1) +#6650000 +0) +#6656250 +b111 H +1) +#6662500 +0) +#6668750 +0. +b0 H +1) +#6675000 +0) +#6681250 +b110 F +b1 H +1) +#6687500 +0) +#6693750 +b100 F +b10 H +1) +#6700000 +0) +#6706250 +19 +0< +b0 F +b11 H +1) +#6712500 +0) +#6718750 +09 +1$ +b10110100 G +0E +b100 H +1) +#6725000 +0) +#6731250 +b101 H +1) +#6737500 +0) +#6743750 +b110 H +1) +#6750000 +0) +#6756250 +b111 H +1) +#6762500 +0) +#6768750 +1+ +b101 P +b0 H +1) +#6775000 +0) +#6781250 +b1 B +b1 H +1) +#6787500 +0) +#6793750 +b11 B +b10 H +1) +#6800000 +0) +#6806250 +1= +b111 B +b11 H +1) +#6812500 +0) +#6818750 +b100 H +1) +#6825000 +0) +#6831250 +b101 H +1) +#6837500 +0) +#6843750 +b110 H +1) +#6850000 +0) +#6856250 +b111 H +1) +#6862500 +0) +#6868750 +b10100000 M +1. +b0 H +1) +#6875000 +0) +#6881250 +b1 F +b1 H +1) +#6887500 +0) +#6893750 +b11 F +b10 H +1) +#6900000 +0) +#6906250 +1: +1< +b111 F +b11 H +1) +#6912500 +0) +#6918750 +0: +b11 ? +b10001001 D +1E +b100 H +1) +#6925000 +0) +#6931250 +b101 H +1) +#6937500 +0) +#6943750 +b110 H +1) +#6950000 +0) +#6956250 +b111 H +1) +#6962500 +0) +#6968750 +0. +b0 H +1) +#6975000 +0) +#6981250 +b110 F +b1 H +1) +#6987500 +0) +#6993750 +b100 F +b10 H +1) +#7000000 +0) +#7006250 +19 +0< +b0 F +b11 H +1) +#7012500 +0) +#7018750 +09 +0$ +b1101000 G +0E +b100 H +1) +#7025000 +0) +#7031250 +b101 H +1) +#7037500 +0) +#7043750 +b110 H +1) +#7050000 +0) +#7056250 +b111 H +1) +#7062500 +0) +#7068750 +0+ +b100 P +b0 H +1) +#7075000 +0) +#7081250 +b110 B +b1 H +1) +#7087500 +0) +#7093750 +b100 B +b10 H +1) +#7100000 +0) +#7106250 +0= +b0 B +b11 H +1) +#7112500 +0) +#7118750 +b100 H +1) +#7125000 +0) +#7131250 +b101 H +1) +#7137500 +0) +#7143750 +b110 H +1) +#7150000 +0) +#7156250 +b111 H +1) +#7162500 +0) +#7168750 +1. +b0 H +1) +#7175000 +0) +#7181250 +b1 F +b1 H +1) +#7187500 +0) +#7193750 +b11 F +b10 H +1) +#7200000 +0) +#7206250 +1: +1< +b111 F +b11 H +1) +#7212500 +0) +#7218750 +0: +b100 ? +b10010 D +1E +b100 H +1) +#7225000 +0) +#7231250 +b101 H +1) +#7237500 +0) +#7243750 +b110 H +1) +#7250000 +0) +#7256250 +b111 H +1) +#7262500 +0) +#7268750 +0. +b0 H +1) +#7275000 +0) +#7281250 +b110 F +b1 H +1) +#7287500 +0) +#7293750 +b100 F +b10 H +1) +#7300000 +0) +#7306250 +19 +0< +b0 F +b11 H +1) +#7312500 +0) +#7318750 +09 +1$ +b11010000 G +0E +b100 H +1) +#7325000 +0) +#7331250 +b101 H +1) +#7337500 +0) +#7343750 +b110 H +1) +#7350000 +0) +#7356250 +b111 H +1) +#7362500 +0) +#7368750 +b11 P +b0 H +1) +#7375000 +0) +#7381250 +b1 H +1) +#7387500 +0) +#7393750 +b10 H +1) +#7400000 +0) +#7406250 +b11 H +1) +#7412500 +0) +#7418750 +b100 H +1) +#7425000 +0) +#7431250 +b101 H +1) +#7437500 +0) +#7443750 +b110 H +1) +#7450000 +0) +#7456250 +b111 H +1) +#7462500 +0) +#7468750 +b10101000 M +1. +b0 H +1) +#7475000 +0) +#7481250 +b1 F +b1 H +1) +#7487500 +0) +#7493750 +b11 F +b10 H +1) +#7500000 +0) +#7506250 +1: +1< +b111 F +b11 H +1) +#7512500 +0) +#7518750 +0: +b101 ? +b100100 D +1E +b100 H +1) +#7525000 +0) +#7531250 +b101 H +1) +#7537500 +0) +#7543750 +b110 H +1) +#7550000 +0) +#7556250 +b111 H +1) +#7562500 +0) +#7568750 +0. +b0 H +1) +#7575000 +0) +#7581250 +b110 F +b1 H +1) +#7587500 +0) +#7593750 +b100 F +b10 H +1) +#7600000 +0) +#7606250 +19 +0< +b0 F +b11 H +1) +#7612500 +0) +#7618750 +09 +b10100000 G +0E +b100 H +1) +#7625000 +0) +#7631250 +b101 H +1) +#7637500 +0) +#7643750 +b110 H +1) +#7650000 +0) +#7656250 +b111 H +1) +#7662500 +0) +#7668750 +b10 P +b0 H +1) +#7675000 +0) +#7681250 +b1 H +1) +#7687500 +0) +#7693750 +b10 H +1) +#7700000 +0) +#7706250 +b11 H +1) +#7712500 +0) +#7718750 +b100 H +1) +#7725000 +0) +#7731250 +b101 H +1) +#7737500 +0) +#7743750 +b110 H +1) +#7750000 +0) +#7756250 +b111 H +1) +#7762500 +0) +#7768750 +b10101100 M +1. +b0 H +1) +#7775000 +0) +#7781250 +b1 F +b1 H +1) +#7787500 +0) +#7793750 +b11 F +b10 H +1) +#7800000 +0) +#7806250 +1: +1< +b111 F +b11 H +1) +#7812500 +0) +#7818750 +0: +b110 ? +b1001000 D +1E +b100 H +1) +#7825000 +0) +#7831250 +b101 H +1) +#7837500 +0) +#7843750 +b110 H +1) +#7850000 +0) +#7856250 +b111 H +1) +#7862500 +0) +#7868750 +0. +b0 H +1) +#7875000 +0) +#7881250 +b110 F +b1 H +1) +#7887500 +0) +#7893750 +b100 F +b10 H +1) +#7900000 +0) +#7906250 +19 +0< +b0 F +b11 H +1) +#7912500 +0) +#7918750 +09 +0$ +b1000000 G +0E +b100 H +1) +#7925000 +0) +#7931250 +b101 H +1) +#7937500 +0) +#7943750 +b110 H +1) +#7950000 +0) +#7956250 +b111 H +1) +#7962500 +0) +#7968750 +1+ +b1 P +b0 H +1) +#7975000 +0) +#7981250 +b1 B +b1 H +1) +#7987500 +0) +#7993750 +b11 B +b10 H +1) +#8000000 +0) +#8006250 +1= +b111 B +b11 H +1) +#8012500 +0) +#8018750 +b100 H +1) +#8025000 +0) +#8031250 +b101 H +1) +#8037500 +0) +#8043750 +b110 H +1) +#8050000 +0) +#8056250 +b111 H +1) +#8062500 +0) +#8068750 +1. +b0 H +1) +#8075000 +0) +#8081250 +b1 F +b1 H +1) +#8087500 +0) +#8093750 +b11 F +b10 H +1) +#8100000 +0) +#8106250 +1: +1< +b111 F +b11 H +1) +#8112500 +0) +#8118750 +0: +b111 ? +b10010001 D +1E +b100 H +1) +#8125000 +0) +#8131250 +b101 H +1) +#8137500 +0) +#8143750 +b110 H +1) +#8150000 +0) +#8156250 +b111 H +1) +#8162500 +0) +#8168750 +0. +b0 H +1) +#8175000 +0) +#8181250 +b110 F +b1 H +1) +#8187500 +0) +#8193750 +b100 F +b10 H +1) +#8200000 +0) +#8206250 +19 +0< +b0 F +b11 H +1) +#8212500 +0) +#8218750 +09 +1$ +b10000000 G +0E +b100 H +1) +#8225000 +0) +#8231250 +b101 H +1) +#8237500 +0) +#8243750 +b110 H +1) +#8250000 +0) +#8256250 +b111 H +1) +#8262500 +0) +#8268750 +0+ +b0 P +b0 H +1) +#8275000 +0) +#8281250 +b110 B +b1 H +1) +#8287500 +0) +#8293750 +b100 B +b10 H +1) +#8300000 +0) +#8306250 +0= +b0 B +b11 H +1) +#8312500 +0) +#8318750 +b100 H +1) +#8325000 +0) +#8331250 +b101 H +1) +#8337500 +0) +#8343750 +b110 H +1) +#8350000 +0) +#8356250 +b111 H +1) +#8362500 +0) +#8368750 +b10101101 M +1. +b0 H +1) +#8375000 +0) +#8381250 +b1 F +b1 H +1) +#8387500 +0) +#8393750 +b11 F +b10 H +1) +#8400000 +0) +#8406250 +1: +1< +b111 F +b11 H +1) +#8412500 +0) +#8418750 +0: +1" +b100010 # +b100010 C +b0 ? +b100010 D +1E +b100 H +1) +#8425000 +0) +#8431250 +b10111110 / +b10111110 ; +0" +b10 5 +b10 4 +b101 H +1) +#8437500 +0) +#8443750 +b110 H +1) +#8450000 +0) +#8456250 +b111 H +1) +#8462500 +0) +#8468750 +0. +b0 H +1) +#8475000 +0) +#8481250 +b110 F +b1 H +1) +#8487500 +0) +#8493750 +b100 F +b10 H +1) +#8500000 +0) +#8506250 +19 +0< +b0 F +b11 H +1) +#8512500 +0) +#8518750 +09 +1! +b10111110 G +0E +b100 H +1) +#8525000 +0) +#8531250 +0! +b101 H +1) +#8537500 +0) +#8543750 +b110 H +1) +#8550000 +0) +#8556250 +b111 H +1) +#8562500 +0) +#8568750 +b0 M +b110011 N +b10101101 - +b10101101 L +b111 P +b0 H +1) +#8575000 +0) +#8581250 +b1 H +1) +#8587500 +0) +#8593750 +b10 H +1) +#8600000 +0) +#8606250 +b11 H +1) +#8612500 +0) +#8618750 +b100 H +1) +#8625000 +0) +#8631250 +b101 H +1) +#8637500 +0) +#8643750 +b110 H +1) +#8650000 +0) +#8656250 +b111 H +1) +#8662500 +0) +#8668750 +b10000000 M +1. +b0 H +1) +#8675000 +0) +#8681250 +b1 F +b1 H +1) +#8687500 +0) +#8693750 +b11 F +b10 H +1) +#8700000 +0) +#8706250 +1: +1< +b111 F +b11 H +1) +#8712500 +0) +#8718750 +0: +b1 ? +b1000100 D +1E +b100 H +1) +#8725000 +0) +#8731250 +b101 H +1) +#8737500 +0) +#8743750 +b110 H +1) +#8750000 +0) +#8756250 +b111 H +1) +#8762500 +0) +#8768750 +0. +b0 H +1) +#8775000 +0) +#8781250 +b110 F +b1 H +1) +#8787500 +0) +#8793750 +b100 F +b10 H +1) +#8800000 +0) +#8806250 +19 +0< +b0 F +b11 H +1) +#8812500 +0) +#8818750 +09 +0$ +b1111100 G +0E +b100 H +1) +#8825000 +0) +#8831250 +b101 H +1) +#8837500 +0) +#8843750 +b110 H +1) +#8850000 +0) +#8856250 +b111 H +1) +#8862500 +0) +#8868750 +b110 P +b0 H +1) +#8875000 +0) +#8881250 +b1 H +1) +#8887500 +0) +#8893750 +b10 H +1) +#8900000 +0) +#8906250 +b11 H +1) +#8912500 +0) +#8918750 +b100 H +1) +#8925000 +0) +#8931250 +b101 H +1) +#8937500 +0) +#8943750 +b110 H +1) +#8950000 +0) +#8956250 +b111 H +1) +#8962500 +0) +#8968750 +1. +b0 H +1) +#8975000 +0) +#8981250 +b1 F +b1 H +1) +#8987500 +0) +#8993750 +b11 F +b10 H +1) +#9000000 +0) +#9006250 +1: +1< +b111 F +b11 H +1) +#9012500 +0) +#9018750 +0: +b10 ? +b10001000 D +1E +b100 H +1) +#9025000 +0) +#9031250 +b101 H +1) +#9037500 +0) +#9043750 +b110 H +1) +#9050000 +0) +#9056250 +b111 H +1) +#9062500 +0) +#9068750 +0. +b0 H +1) +#9075000 +0) +#9081250 +b110 F +b1 H +1) +#9087500 +0) +#9093750 +b100 F +b10 H +1) +#9100000 +0) +#9106250 +19 +0< +b0 F +b11 H +1) +#9112500 +0) +#9118750 +09 +1$ +b11111000 G +0E +b100 H +1) +#9125000 +0) +#9131250 +b101 H +1) +#9137500 +0) +#9143750 +b110 H +1) +#9150000 +0) +#9156250 +b111 H +1) +#9162500 +0) +#9168750 +1+ +b101 P +b0 H +1) +#9175000 +0) +#9181250 +b1 B +b1 H +1) +#9187500 +0) +#9193750 +b11 B +b10 H +1) +#9200000 +0) +#9206250 +1= +b111 B +b11 H +1) +#9212500 +0) +#9218750 +b100 H +1) +#9225000 +0) +#9231250 +b101 H +1) +#9237500 +0) +#9243750 +b110 H +1) +#9250000 +0) +#9256250 +b111 H +1) +#9262500 +0) +#9268750 +b10100000 M +1. +b0 H +1) +#9275000 +0) +#9281250 +b1 F +b1 H +1) +#9287500 +0) +#9293750 +b11 F +b10 H +1) +#9300000 +0) +#9306250 +1: +1< +b111 F +b11 H +1) +#9312500 +0) +#9318750 +0: +b11 ? +b10001 D +1E +b100 H +1) +#9325000 +0) +#9331250 +b101 H +1) +#9337500 +0) +#9343750 +b110 H +1) +#9350000 +0) +#9356250 +b111 H +1) +#9362500 +0) +#9368750 +0. +b0 H +1) +#9375000 +0) +#9381250 +b110 F +b1 H +1) +#9387500 +0) +#9393750 +b100 F +b10 H +1) +#9400000 +0) +#9406250 +19 +0< +b0 F +b11 H +1) +#9412500 +0) +#9418750 +09 +b11110000 G +0E +b100 H +1) +#9425000 +0) +#9431250 +b101 H +1) +#9437500 +0) +#9443750 +b110 H +1) +#9450000 +0) +#9456250 +b111 H +1) +#9462500 +0) +#9468750 +b100 P +b0 H +1) +#9475000 +0) +#9481250 +b1 H +1) +#9487500 +0) +#9493750 +b10 H +1) +#9500000 +0) +#9506250 +b11 H +1) +#9512500 +0) +#9518750 +b100 H +1) +#9525000 +0) +#9531250 +b101 H +1) +#9537500 +0) +#9543750 +b110 H +1) +#9550000 +0) +#9556250 +b111 H +1) +#9562500 +0) +#9568750 +b10110000 M +1. +b0 H +1) +#9575000 +0) +#9581250 +b1 F +b1 H +1) +#9587500 +0) +#9593750 +b11 F +b10 H +1) +#9600000 +0) +#9606250 +1: +1< +b111 F +b11 H +1) +#9612500 +0) +#9618750 +0: +b100 ? +b100011 D +1E +b100 H +1) +#9625000 +0) +#9631250 +b101 H +1) +#9637500 +0) +#9643750 +b110 H +1) +#9650000 +0) +#9656250 +b111 H +1) +#9662500 +0) +#9668750 +0. +b0 H +1) +#9675000 +0) +#9681250 +b110 F +b1 H +1) +#9687500 +0) +#9693750 +b100 F +b10 H +1) +#9700000 +0) +#9706250 +19 +0< +b0 F +b11 H +1) +#9712500 +0) +#9718750 +09 +b11100000 G +0E +b100 H +1) +#9725000 +0) +#9731250 +b101 H +1) +#9737500 +0) +#9743750 +b110 H +1) +#9750000 +0) +#9756250 +b111 H +1) +#9762500 +0) +#9768750 +0+ +b11 P +b0 H +1) +#9775000 +0) +#9781250 +b110 B +b1 H +1) +#9787500 +0) +#9793750 +b100 B +b10 H +1) +#9800000 +0) +#9806250 +0= +b0 B +b11 H +1) +#9812500 +0) +#9818750 +b100 H +1) +#9825000 +0) +#9831250 +b101 H +1) +#9837500 +0) +#9843750 +b110 H +1) +#9850000 +0) +#9856250 +b111 H +1) +#9862500 +0) +#9868750 +b10111000 M +1. +b0 H +1) +#9875000 +0) +#9881250 +b1 F +b1 H +1) +#9887500 +0) +#9893750 +b11 F +b10 H +1) +#9900000 +0) +#9906250 +1: +1< +b111 F +b11 H +1) +#9912500 +0) +#9918750 +0: +b101 ? +b1000110 D +1E +b100 H +1) +#9925000 +0) +#9931250 +b101 H +1) +#9937500 +0) +#9943750 +b110 H +1) +#9950000 +0) +#9956250 +b111 H +1) +#9962500 +0) +#9968750 +0. +b0 H +1) +#9975000 +0) +#9981250 +b110 F +b1 H +1) +#9987500 +0) +#9993750 +b100 F +b10 H +1) +#10000000 +0) +#10006250 +19 +0< +b0 F +b11 H +1) +#10012500 +0) +#10018750 +09 +b11000000 G +0E +b100 H +1) +#10025000 +0) +#10031250 +b101 H +1) +#10037500 +0) +#10043750 +b110 H +1) +#10050000 +0) +#10056250 +b111 H +1) +#10062500 +0) +#10068750 +b10 P +b0 H +1) +#10075000 +0) +#10081250 +b1 H +1) +#10087500 +0) +#10093750 +b10 H +1) +#10100000 +0) +#10106250 +b11 H +1) +#10112500 +0) +#10118750 +b100 H +1) +#10125000 +0) +#10131250 +b101 H +1) +#10137500 +0) +#10143750 +b110 H +1) +#10150000 +0) +#10156250 +b111 H +1) +#10162500 +0) +#10168750 +b10111100 M +1. +b0 H +1) +#10175000 +0) +#10181250 +b1 F +b1 H +1) +#10187500 +0) +#10193750 +b11 F +b10 H +1) +#10200000 +0) +#10206250 +1: +1< +b111 F +b11 H +1) +#10212500 +0) +#10218750 +0: +b110 ? +b10001100 D +1E +b100 H +1) +#10225000 +0) +#10231250 +b101 H +1) +#10237500 +0) +#10243750 +b110 H +1) +#10250000 +0) +#10256250 +b111 H +1) +#10262500 +0) +#10268750 +0. +b0 H +1) +#10275000 +0) +#10281250 +b110 F +b1 H +1) +#10287500 +0) +#10293750 +b100 F +b10 H +1) +#10300000 +0) +#10306250 +19 +0< +b0 F +b11 H +1) +#10312500 +0) +#10318750 +09 +b10000000 G +0E +b100 H +1) +#10325000 +0) +#10331250 +b101 H +1) +#10337500 +0) +#10343750 +b110 H +1) +#10350000 +0) +#10356250 +b111 H +1) +#10362500 +0) +#10368750 +1+ +b1 P +b0 H +1) +#10375000 +0) +#10381250 +b1 B +b1 H +1) +#10387500 +0) +#10393750 +b11 B +b10 H +1) +#10400000 +0) +#10406250 +1= +b111 B +b11 H +1) +#10412500 +0) +#10418750 +b100 H +1) +#10425000 +0) +#10431250 +b101 H +1) +#10437500 +0) +#10443750 +b110 H +1) +#10450000 +0) +#10456250 +b111 H +1) +#10462500 +0) +#10468750 +b10111110 M +1. +b0 H +1) +#10475000 +0) +#10481250 +b1 F +b1 H +1) +#10487500 +0) +#10493750 +b11 F +b10 H +1) +#10500000 +0) +#10506250 +1: +1< +b111 F +b11 H +1) +#10512500 +0) +#10518750 +0: +b111 ? +b11001 D +1E +b100 H +1) +#10525000 +0) +#10531250 +b101 H +1) +#10537500 +0) +#10543750 +b110 H +1) +#10550000 +0) +#10556250 +b111 H +1) +#10562500 +0) +#10568750 +0. +b0 H +1) +#10575000 +0) +#10581250 +b110 F +b1 H +1) +#10587500 +0) +#10593750 +b100 F +b10 H +1) +#10600000 +0) +#10606250 +19 +0< +b0 F +b11 H +1) +#10612500 +0) +#10618750 +09 +0$ +b0 G +0E +b100 H +1) +#10625000 +0) +#10631250 +b101 H +1) +#10637500 +0) +#10643750 +b110 H +1) +#10650000 +0) +#10656250 +b111 H +1) +#10662500 +0) +#10668750 +b0 P +b0 H +1) +#10675000 +0) +#10681250 +b1 H +1) +#10687500 +0) +#10693750 +b10 H +1) +#10700000 +0) +#10706250 +b11 H +1) +#10712500 +0) +#10718750 +b100 H +1) +#10725000 +0) +#10731250 +b101 H +1) +#10737500 +0) +#10743750 +b110 H +1) +#10750000 +0) +#10756250 +b111 H +1) +#10762500 +0) +#10768750 +1. +b0 H +1) +#10775000 +0) +#10781250 +b1 F +b1 H +1) +#10787500 +0) +#10793750 +b11 F +b10 H +1) +#10800000 +0) +#10806250 +1: +1< +b111 F +b11 H +1) +#10812500 +0) +#10818750 +0: +1" +b110011 # +b110011 C +b0 ? +b110011 D +1E +b100 H +1) +#10825000 +0) +#10831250 +b11101111 / +b11101111 ; +0" +b11 5 +b11 4 +b101 H +1) +#10837500 +0) +#10843750 +b110 H +1) +#10850000 +0) +#10856250 +b111 H +1) +#10862500 +0) +#10868750 +0. +b0 H +1) +#10875000 +0) +#10881250 +b110 F +b1 H +1) +#10887500 +0) +#10893750 +b100 F +b10 H +1) +#10900000 +0) +#10906250 +19 +0< +b0 F +b11 H +1) +#10912500 +0) +#10918750 +09 +1$ +1! +b11101111 G +0E +b100 H +1) +#10925000 +0) +#10931250 +0! +b101 H +1) +#10937500 +0) +#10943750 +b110 H +1) +#10950000 +0) +#10956250 +b111 H +1) +#10962500 +0) +#10968750 +0+ +b0 M +b1000100 N +b10111110 - +b10111110 L +b111 P +b0 H +1) +#10975000 +0) +#10981250 +b110 B +b1 H +1) +#10987500 +0) +#10993750 +b100 B +b10 H +1) +#11000000 +0) +#11006250 +0= +b0 B +b11 H +1) +#11012500 +0) +#11018750 +b100 H +1) +#11025000 +0) +#11031250 +b101 H +1) +#11037500 +0) +#11043750 +b110 H +1) +#11050000 +0) +#11056250 +b111 H +1) +#11062500 +0) +#11068750 +b10000000 M +1. +b0 H +1) +#11075000 +0) +#11081250 +b1 F +b1 H +1) +#11087500 +0) +#11093750 +b11 F +b10 H +1) +#11100000 +0) +#11106250 +1: +1< +b111 F +b11 H +1) +#11112500 +0) +#11118750 +0: +b1 ? +b1100110 D +1E +b100 H +1) +#11125000 +0) +#11131250 +b101 H +1) +#11137500 +0) +#11143750 +b110 H +1) +#11150000 +0) +#11156250 +b111 H +1) +#11162500 +0) +#11168750 +0. +b0 H +1) +#11175000 +0) +#11181250 +b110 F +b1 H +1) +#11187500 +0) +#11193750 +b100 F +b10 H +1) +#11200000 +0) +#11206250 +19 +0< +b0 F +b11 H +1) +#11212500 +0) +#11218750 +09 +b11011110 G +0E +b100 H +1) +#11225000 +0) +#11231250 +b101 H +1) +#11237500 +0) +#11243750 +b110 H +1) +#11250000 +0) +#11256250 +b111 H +1) +#11262500 +0) +#11268750 +1+ +b110 P +b0 H +1) +#11275000 +0) +#11281250 +b1 B +b1 H +1) +#11287500 +0) +#11293750 +b11 B +b10 H +1) +#11300000 +0) +#11306250 +1= +b111 B +b11 H +1) +#11312500 +0) +#11318750 +b100 H +1) +#11325000 +0) +#11331250 +b101 H +1) +#11337500 +0) +#11343750 +b110 H +1) +#11350000 +0) +#11356250 +b111 H +1) +#11362500 +0) +#11368750 +b11000000 M +1. +b0 H +1) +#11375000 +0) +#11381250 +b1 F +b1 H +1) +#11387500 +0) +#11393750 +b11 F +b10 H +1) +#11400000 +0) +#11406250 +1: +1< +b111 F +b11 H +1) +#11412500 +0) +#11418750 +0: +b10 ? +b11001101 D +1E +b100 H +1) +#11425000 +0) +#11431250 +b101 H +1) +#11437500 +0) +#11443750 +b110 H +1) +#11450000 +0) +#11456250 +b111 H +1) +#11462500 +0) +#11468750 +0. +b0 H +1) +#11475000 +0) +#11481250 +b110 F +b1 H +1) +#11487500 +0) +#11493750 +b100 F +b10 H +1) +#11500000 +0) +#11506250 +19 +0< +b0 F +b11 H +1) +#11512500 +0) +#11518750 +09 +b10111100 G +0E +b100 H +1) +#11525000 +0) +#11531250 +b101 H +1) +#11537500 +0) +#11543750 +b110 H +1) +#11550000 +0) +#11556250 +b111 H +1) +#11562500 +0) +#11568750 +0+ +b101 P +b0 H +1) +#11575000 +0) +#11581250 +b110 B +b1 H +1) +#11587500 +0) +#11593750 +b100 B +b10 H +1) +#11600000 +0) +#11606250 +0= +b0 B +b11 H +1) +#11612500 +0) +#11618750 +b100 H +1) +#11625000 +0) +#11631250 +b101 H +1) +#11637500 +0) +#11643750 +b110 H +1) +#11650000 +0) +#11656250 +b111 H +1) +#11662500 +0) +#11668750 +b11100000 M +1. +b0 H +1) +#11675000 +0) +#11681250 +b1 F +b1 H +1) +#11687500 +0) +#11693750 +b11 F +b10 H +1) +#11700000 +0) +#11706250 +1: +1< +b111 F +b11 H +1) +#11712500 +0) +#11718750 +0: +b11 ? +b10011010 D +1E +b100 H +1) +#11725000 +0) +#11731250 +b101 H +1) +#11737500 +0) +#11743750 +b110 H +1) +#11750000 +0) +#11756250 +b111 H +1) +#11762500 +0) +#11768750 +0. +b0 H +1) +#11775000 +0) +#11781250 +b110 F +b1 H +1) +#11787500 +0) +#11793750 +b100 F +b10 H +1) +#11800000 +0) +#11806250 +19 +0< +b0 F +b11 H +1) +#11812500 +0) +#11818750 +09 +0$ +b1111000 G +0E +b100 H +1) +#11825000 +0) +#11831250 +b101 H +1) +#11837500 +0) +#11843750 +b110 H +1) +#11850000 +0) +#11856250 +b111 H +1) +#11862500 +0) +#11868750 +b100 P +b0 H +1) +#11875000 +0) +#11881250 +b1 H +1) +#11887500 +0) +#11893750 +b10 H +1) +#11900000 +0) +#11906250 +b11 H +1) +#11912500 +0) +#11918750 +b100 H +1) +#11925000 +0) +#11931250 +b101 H +1) +#11937500 +0) +#11943750 +b110 H +1) +#11950000 +0) +#11956250 +b111 H +1) +#11962500 +0) +#11968750 +1. +b0 H +1) +#11975000 +0) +#11981250 +b1 F +b1 H +1) +#11987500 +0) +#11993750 +b11 F +b10 H +1) +#12000000 +0) +#12006250 +1: +1< +b111 F +b11 H +1) +#12012500 +0) +#12018750 +0: +b100 ? +b110100 D +1E +b100 H +1) +#12025000 +0) +#12031250 +b101 H +1) +#12037500 +0) +#12043750 +b110 H +1) +#12050000 +0) +#12056250 +b111 H +1) +#12062500 +0) +#12068750 +0. +b0 H +1) +#12075000 +0) +#12081250 +b110 F +b1 H +1) +#12087500 +0) +#12093750 +b100 F +b10 H +1) +#12100000 +0) +#12106250 +19 +0< +b0 F +b11 H +1) +#12112500 +0) +#12118750 +09 +1$ +b11110000 G +0E +b100 H +1) +#12125000 +0) +#12131250 +b101 H +1) +#12137500 +0) +#12143750 +b110 H +1) +#12150000 +0) +#12156250 +b111 H +1) +#12162500 +0) +#12168750 +b11 P +b0 H +1) +#12175000 +0) +#12181250 +b1 H +1) +#12187500 +0) +#12193750 +b10 H +1) +#12200000 +0) +#12206250 +b11 H +1) +#12212500 +0) +#12218750 +b100 H +1) +#12225000 +0) +#12231250 +b101 H +1) +#12237500 +0) +#12243750 +b110 H +1) +#12250000 +0) +#12256250 +b111 H +1) +#12262500 +0) +#12268750 +b11101000 M +1. +b0 H +1) +#12275000 +0) +#12281250 +b1 F +b1 H +1) +#12287500 +0) +#12293750 +b11 F +b10 H +1) +#12300000 +0) +#12306250 +1: +1< +b111 F +b11 H +1) +#12312500 +0) +#12318750 +0: +b101 ? +b1101000 D +1E +b100 H +1) +#12325000 +0) +#12331250 +b101 H +1) +#12337500 +0) +#12343750 +b110 H +1) +#12350000 +0) +#12356250 +b111 H +1) +#12362500 +0) +#12368750 +0. +b0 H +1) +#12375000 +0) +#12381250 +b110 F +b1 H +1) +#12387500 +0) +#12393750 +b100 F +b10 H +1) +#12400000 +0) +#12406250 +19 +0< +b0 F +b11 H +1) +#12412500 +0) +#12418750 +09 +b11100000 G +0E +b100 H +1) +#12425000 +0) +#12431250 +b101 H +1) +#12437500 +0) +#12443750 +b110 H +1) +#12450000 +0) +#12456250 +b111 H +1) +#12462500 +0) +#12468750 +1+ +b10 P +b0 H +1) +#12475000 +0) +#12481250 +b1 B +b1 H +1) +#12487500 +0) +#12493750 +b11 B +b10 H +1) +#12500000 +0) +#12506250 +1= +b111 B +b11 H +1) +#12512500 +0) +#12518750 +b100 H +1) +#12525000 +0) +#12531250 +b101 H +1) +#12537500 +0) +#12543750 +b110 H +1) +#12550000 +0) +#12556250 +b111 H +1) +#12562500 +0) +#12568750 +b11101100 M +1. +b0 H +1) +#12575000 +0) +#12581250 +b1 F +b1 H +1) +#12587500 +0) +#12593750 +b11 F +b10 H +1) +#12600000 +0) +#12606250 +1: +1< +b111 F +b11 H +1) +#12612500 +0) +#12618750 +0: +b110 ? +b11010001 D +1E +b100 H +1) +#12625000 +0) +#12631250 +b101 H +1) +#12637500 +0) +#12643750 +b110 H +1) +#12650000 +0) +#12656250 +b111 H +1) +#12662500 +0) +#12668750 +0. +b0 H +1) +#12675000 +0) +#12681250 +b110 F +b1 H +1) +#12687500 +0) +#12693750 +b100 F +b10 H +1) +#12700000 +0) +#12706250 +19 +0< +b0 F +b11 H +1) +#12712500 +0) +#12718750 +09 +b11000000 G +0E +b100 H +1) +#12725000 +0) +#12731250 +b101 H +1) +#12737500 +0) +#12743750 +b110 H +1) +#12750000 +0) +#12756250 +b111 H +1) +#12762500 +0) +#12768750 +0+ +b1 P +b0 H +1) +#12775000 +0) +#12781250 +b110 B +b1 H +1) +#12787500 +0) +#12793750 +b100 B +b10 H +1) +#12800000 +0) +#12806250 +0= +b0 B +b11 H +1) +#12812500 +0) +#12818750 +b100 H +1) +#12825000 +0) +#12831250 +b101 H +1) +#12837500 +0) +#12843750 +b110 H +1) +#12850000 +0) +#12856250 +b111 H +1) +#12862500 +0) +#12868750 +b11101110 M +1. +b0 H +1) +#12875000 +0) +#12881250 +b1 F +b1 H +1) +#12887500 +0) +#12893750 +b11 F +b10 H +1) +#12900000 +0) +#12906250 +1: +1< +b111 F +b11 H +1) +#12912500 +0) +#12918750 +0: +b111 ? +b10100010 D +1E +b100 H +1) +#12925000 +0) +#12931250 +b101 H +1) +#12937500 +0) +#12943750 +b110 H +1) +#12950000 +0) +#12956250 +b111 H +1) +#12962500 +0) +#12968750 +0. +b0 H +1) +#12975000 +0) +#12981250 +b110 F +b1 H +1) +#12987500 +0) +#12993750 +b100 F +b10 H +1) +#13000000 +0) +#13006250 +19 +0< +b0 F +b11 H +1) +#13012500 +0) +#13018750 +09 +b10000000 G +0E +b100 H +1) +#13025000 +0) +#13031250 +b101 H +1) +#13037500 +0) +#13043750 +b110 H +1) +#13050000 +0) +#13056250 +b111 H +1) +#13062500 +0) +#13068750 +b0 P +b0 H +1) +#13075000 +0) +#13081250 +b1 H +1) +#13087500 +0) +#13093750 +b10 H +1) +#13100000 +0) +#13106250 +b11 H +1) +#13112500 +0) +#13118750 +b100 H +1) +#13125000 +0) +#13131250 +b101 H +1) +#13137500 +0) +#13143750 +b110 H +1) +#13150000 +0) +#13156250 +b111 H +1) +#13162500 +0) +#13168750 +b11101111 M +1. +b0 H +1) +#13175000 +0) +#13181250 +b1 F +b1 H +1) +#13187500 +0) +#13193750 +b11 F +b10 H +1) +#13200000 +0) +#13206250 +1: +1< +b111 F +b11 H +1) +#13212500 +0) +#13218750 +0: +1" +b1000100 # +b1000100 C +b0 ? +b1000100 D +1E +b100 H +1) +#13225000 +0) +#13231250 +b0 / +b0 ; +0" +b100 5 +b100 4 +b101 H +1) +#13237500 +0) +#13243750 +b110 H +1) +#13250000 +0) +#13256250 +b111 H +1) +#13262500 +0) +#13268750 +0. +b0 H +1) +#13275000 +0) +#13281250 +b110 F +b1 H +1) +#13287500 +0) +#13293750 +b100 F +b10 H +1) +#13300000 +0) +#13306250 +19 +0< +b0 F +b11 H +1) +#13312500 +0) +#13318750 +09 +0$ +1! +b0 G +0E +b100 H +1) +#13325000 +0) +#13331250 +0! +b101 H +1) +#13337500 +0) +#13343750 +b110 H +1) +#13350000 +0) +#13356250 +b111 H +1) +#13362500 +0) +#13368750 +b10000 I +b11101111 - +b11101111 L +b11111111111111111111111111111111 P +b0 H +1) +#13375000 +0) +#13381250 +b1 H +1) +#13387500 +0) +#13393750 +b10 H +1) +#13400000 +0) +#13406250 +b11 H +1) +#13412500 +0) +#13418750 +b100 H +1) +#13425000 +0) +#13431250 +b101 H +1) +#13437500 +0) +#13443750 +b110 H +1) +#13450000 +0) +#13456250 +b111 H +1) +#13462500 +0) +#13468750 +b1000 H +1) +#13475000 +0) +#13481250 +b1001 H +1) +#13487500 +0) +#13493750 +b1010 H +1) +#13500000 +0) +#13506250 +b1011 H +1) +#13512500 +0) +#13518750 +b1100 H +1) +#13525000 +0) +#13531250 +b1101 H +1) +#13537500 +0) +#13543750 +b1110 H +1) +#13550000 +0) +#13556250 +b1111 H +1) +#13562500 +0) +#13568750 +1* +b0 H +1) +#13575000 +0) +#13581250 +b1 A +b1 H +1) +#13587500 +0) +#13593750 +b11 A +b10 H +1) +#13600000 +0) +#13606250 +0' +18 +1> +b111 A +b11 H +1) +#13612500 +0) +#13618750 +08 +1& +1@ +b100 H +1) +#13625000 +0) +#13631250 +0& +b1 0 +b101 H +1) +#13637500 +0) +#13643750 +b110 H +1) +#13650000 +0) +#13656250 +b111 H +1) +#13662500 +0) +#13668750 +b1000 H +1) +#13675000 +0) +#13681250 +b1001 H +1) +#13687500 +0) +#13693750 +b1010 H +1) +#13700000 +0) +#13706250 +b1011 H +1) +#13712500 +0) +#13718750 +b1100 H +1) +#13725000 +0) +#13731250 +b1101 H +1) +#13737500 +0) +#13743750 +b1110 H +1) +#13750000 +0) +#13756250 +b1111 H +1) +#13762500 +0) +#13768750 +b10000 H +1) +#13775000 +0) +#13781250 +1) +#13787500 +0) +#13793750 +1) +#13800000 +1, +0) +#13806250 +b11011110 / +b11011110 ; +b0 # +b0 C +b0 D +b0 5 +b0 4 +b0 0 +b0 1 +1) +#13812500 +0, +0) +#13818750 +b1 / +b1 ; +b0 H +b1 6 +1) +#13825000 +0) +#13831250 +b1 H +1) +#13837500 +0) +#13843750 +b10 H +1) +#13850000 +0) +#13856250 +b11 H +1) +#13862500 +0) +#13868750 +b100 H +1) +#13875000 +0) +#13881250 +b101 H +1) +#13887500 +0) +#13893750 +b110 H +1) +#13900000 +0) +#13906250 +b111 H +1) +#13912500 +0) +#13918750 +b1000 H +1) +#13925000 +0) +#13931250 +b1001 H +1) +#13937500 +0) +#13943750 +b1010 H +1) +#13950000 +0) +#13956250 +b1011 H +1) +#13962500 +0) +#13968750 +b1100 H +1) +#13975000 +0) +#13981250 +b1101 H +1) +#13987500 +0) +#13993750 +b1110 H +1) +#14000000 +0) +#14006250 +b1111 H +1) +#14012500 +0) +#14018750 +0* +b0 H +1) +#14025000 +0) +#14031250 +b110 A +b1 H +1) +#14037500 +0) +#14043750 +b100 A +b10 H +1) +#14050000 +0) +#14056250 +17 +1' +0> +b0 A +b11 H +1) +#14062500 +0) +#14068750 +07 +1% +1! +b1 G +0@ +b100 H +1) +#14075000 +0) +#14081250 +0% +0! +b1 1 +b101 H +1) +#14087500 +0) +#14093750 +b110 H +1) +#14100000 +0) +#14106250 +b111 H +1) +#14112500 +0) +#14118750 +b1000 H +1) +#14125000 +0) +#14131250 +b1001 H +1) +#14137500 +0) +#14143750 +b1010 H +1) +#14150000 +0) +#14156250 +b1011 H +1) +#14162500 +0) +#14168750 +b1100 H +1) +#14175000 +0) +#14181250 +b1101 H +1) +#14187500 +0) +#14193750 +b1110 H +1) +#14200000 +0) +#14206250 +b1111 H +1) +#14212500 +0) +#14218750 +b1000 I +b111 P +b0 M +b1111110 N +b0 H +1) +#14225000 +0) +#14231250 +b1 H +1) +#14237500 +0) +#14243750 +b10 H +1) +#14250000 +0) +#14256250 +b11 H +1) +#14262500 +0) +#14268750 +b100 H +1) +#14275000 +0) +#14281250 +b101 H +1) +#14287500 +0) +#14293750 +b110 H +1) +#14300000 +0) +#14306250 +b111 H +1) +#14312500 +0) +#14318750 +1. +b0 H +1) +#14325000 +0) +#14331250 +b1 F +b1 H +1) +#14337500 +0) +#14343750 +b11 F +b10 H +1) +#14350000 +0) +#14356250 +1: +1< +b111 F +b11 H +1) +#14362500 +0) +#14368750 +0: +b1 ? +1E +b100 H +1) +#14375000 +0) +#14381250 +b101 H +1) +#14387500 +0) +#14393750 +b110 H +1) +#14400000 +0) +#14406250 +b111 H +1) +#14412500 +0) +#14418750 +0. +b0 H +1) +#14425000 +0) +#14431250 +b110 F +b1 H +1) +#14437500 +0) +#14443750 +b100 F +b10 H +1) +#14450000 +0) +#14456250 +19 +0< +b0 F +b11 H +1) +#14462500 +0) +#14468750 +09 +b10 G +0E +b100 H +1) +#14475000 +0) +#14481250 +b101 H +1) +#14487500 +0) +#14493750 +b110 H +1) +#14500000 +0) +#14506250 +b111 H +1) +#14512500 +0) +#14518750 +1+ +b110 P +b0 H +1) +#14525000 +0) +#14531250 +b1 B +b1 H +1) +#14537500 +0) +#14543750 +b11 B +b10 H +1) +#14550000 +0) +#14556250 +1= +b111 B +b11 H +1) +#14562500 +0) +#14568750 +b100 H +1) +#14575000 +0) +#14581250 +b101 H +1) +#14587500 +0) +#14593750 +b110 H +1) +#14600000 +0) +#14606250 +b111 H +1) +#14612500 +0) +#14618750 +1. +b0 H +1) +#14625000 +0) +#14631250 +b1 F +b1 H +1) +#14637500 +0) +#14643750 +b11 F +b10 H +1) +#14650000 +0) +#14656250 +1: +1< +b111 F +b11 H +1) +#14662500 +0) +#14668750 +0: +b10 ? +b1 D +1E +b100 H +1) +#14675000 +0) +#14681250 +b101 H +1) +#14687500 +0) +#14693750 +b110 H +1) +#14700000 +0) +#14706250 +b111 H +1) +#14712500 +0) +#14718750 +0. +b0 H +1) +#14725000 +0) +#14731250 +b110 F +b1 H +1) +#14737500 +0) +#14743750 +b100 F +b10 H +1) +#14750000 +0) +#14756250 +19 +0< +b0 F +b11 H +1) +#14762500 +0) +#14768750 +09 +b100 G +0E +b100 H +1) +#14775000 +0) +#14781250 +b101 H +1) +#14787500 +0) +#14793750 +b110 H +1) +#14800000 +0) +#14806250 +b111 H +1) +#14812500 +0) +#14818750 +b101 P +b0 H +1) +#14825000 +0) +#14831250 +b1 H +1) +#14837500 +0) +#14843750 +b10 H +1) +#14850000 +0) +#14856250 +b11 H +1) +#14862500 +0) +#14868750 +b100 H +1) +#14875000 +0) +#14881250 +b101 H +1) +#14887500 +0) +#14893750 +b110 H +1) +#14900000 +0) +#14906250 +b111 H +1) +#14912500 +0) +#14918750 +1. +b0 H +1) +#14925000 +0) +#14931250 +b1 F +b1 H +1) +#14937500 +0) +#14943750 +b11 F +b10 H +1) +#14950000 +0) +#14956250 +1: +1< +b111 F +b11 H +1) +#14962500 +0) +#14968750 +0: +b11 ? +b11 D +1E +b100 H +1) +#14975000 +0) +#14981250 +b101 H +1) +#14987500 +0) +#14993750 +b110 H +1) +#15000000 +0) +#15006250 +b111 H +1) +#15012500 +0) +#15018750 +0. +b0 H +1) +#15025000 +0) +#15031250 +b110 F +b1 H +1) +#15037500 +0) +#15043750 +b100 F +b10 H +1) +#15050000 +0) +#15056250 +19 +0< +b0 F +b11 H +1) +#15062500 +0) +#15068750 +09 +b1000 G +0E +b100 H +1) +#15075000 +0) +#15081250 +b101 H +1) +#15087500 +0) +#15093750 +b110 H +1) +#15100000 +0) +#15106250 +b111 H +1) +#15112500 +0) +#15118750 +b100 P +b0 H +1) +#15125000 +0) +#15131250 +b1 H +1) +#15137500 +0) +#15143750 +b10 H +1) +#15150000 +0) +#15156250 +b11 H +1) +#15162500 +0) +#15168750 +b100 H +1) +#15175000 +0) +#15181250 +b101 H +1) +#15187500 +0) +#15193750 +b110 H +1) +#15200000 +0) +#15206250 +b111 H +1) +#15212500 +0) +#15218750 +1. +b0 H +1) +#15225000 +0) +#15231250 +b1 F +b1 H +1) +#15237500 +0) +#15243750 +b11 F +b10 H +1) +#15250000 +0) +#15256250 +1: +1< +b111 F +b11 H +1) +#15262500 +0) +#15268750 +0: +b100 ? +b111 D +1E +b100 H +1) +#15275000 +0) +#15281250 +b101 H +1) +#15287500 +0) +#15293750 +b110 H +1) +#15300000 +0) +#15306250 +b111 H +1) +#15312500 +0) +#15318750 +0. +b0 H +1) +#15325000 +0) +#15331250 +b110 F +b1 H +1) +#15337500 +0) +#15343750 +b100 F +b10 H +1) +#15350000 +0) +#15356250 +19 +0< +b0 F +b11 H +1) +#15362500 +0) +#15368750 +09 +b10000 G +0E +b100 H +1) +#15375000 +0) +#15381250 +b101 H +1) +#15387500 +0) +#15393750 +b110 H +1) +#15400000 +0) +#15406250 +b111 H +1) +#15412500 +0) +#15418750 +b11 P +b0 H +1) +#15425000 +0) +#15431250 +b1 H +1) +#15437500 +0) +#15443750 +b10 H +1) +#15450000 +0) +#15456250 +b11 H +1) +#15462500 +0) +#15468750 +b100 H +1) +#15475000 +0) +#15481250 +b101 H +1) +#15487500 +0) +#15493750 +b110 H +1) +#15500000 +0) +#15506250 +b111 H +1) +#15512500 +0) +#15518750 +1. +b0 H +1) +#15525000 +0) +#15531250 +b1 F +b1 H +1) +#15537500 +0) +#15543750 +b11 F +b10 H +1) +#15550000 +0) +#15556250 +1: +1< +b111 F +b11 H +1) +#15562500 +0) +#15568750 +0: +b101 ? +b1111 D +1E +b100 H +1) +#15575000 +0) +#15581250 +b101 H +1) +#15587500 +0) +#15593750 +b110 H +1) +#15600000 +0) +#15606250 +b111 H +1) +#15612500 +0) +#15618750 +0. +b0 H +1) +#15625000 +0) +#15631250 +b110 F +b1 H +1) +#15637500 +0) +#15643750 +b100 F +b10 H +1) +#15650000 +0) +#15656250 +19 +0< +b0 F +b11 H +1) +#15662500 +0) +#15668750 +09 +b100000 G +0E +b100 H +1) +#15675000 +0) +#15681250 +b101 H +1) +#15687500 +0) +#15693750 +b110 H +1) +#15700000 +0) +#15706250 +b111 H +1) +#15712500 +0) +#15718750 +b10 P +b0 H +1) +#15725000 +0) +#15731250 +b1 H +1) +#15737500 +0) +#15743750 +b10 H +1) +#15750000 +0) +#15756250 +b11 H +1) +#15762500 +0) +#15768750 +b100 H +1) +#15775000 +0) +#15781250 +b101 H +1) +#15787500 +0) +#15793750 +b110 H +1) +#15800000 +0) +#15806250 +b111 H +1) +#15812500 +0) +#15818750 +1. +b0 H +1) +#15825000 +0) +#15831250 +b1 F +b1 H +1) +#15837500 +0) +#15843750 +b11 F +b10 H +1) +#15850000 +0) +#15856250 +1: +1< +b111 F +b11 H +1) +#15862500 +0) +#15868750 +0: +b110 ? +b11111 D +1E +b100 H +1) +#15875000 +0) +#15881250 +b101 H +1) +#15887500 +0) +#15893750 +b110 H +1) +#15900000 +0) +#15906250 +b111 H +1) +#15912500 +0) +#15918750 +0. +b0 H +1) +#15925000 +0) +#15931250 +b110 F +b1 H +1) +#15937500 +0) +#15943750 +b100 F +b10 H +1) +#15950000 +0) +#15956250 +19 +0< +b0 F +b11 H +1) +#15962500 +0) +#15968750 +09 +b1000000 G +0E +b100 H +1) +#15975000 +0) +#15981250 +b101 H +1) +#15987500 +0) +#15993750 +b110 H +1) +#16000000 +0) +#16006250 +b111 H +1) +#16012500 +0) +#16018750 +b1 P +b0 H +1) +#16025000 +0) +#16031250 +b1 H +1) +#16037500 +0) +#16043750 +b10 H +1) +#16050000 +0) +#16056250 +b11 H +1) +#16062500 +0) +#16068750 +b100 H +1) +#16075000 +0) +#16081250 +b101 H +1) +#16087500 +0) +#16093750 +b110 H +1) +#16100000 +0) +#16106250 +b111 H +1) +#16112500 +0) +#16118750 +1. +b0 H +1) +#16125000 +0) +#16131250 +b1 F +b1 H +1) +#16137500 +0) +#16143750 +b11 F +b10 H +1) +#16150000 +0) +#16156250 +1: +1< +b111 F +b11 H +1) +#16162500 +0) +#16168750 +0: +b111 ? +b111111 D +1E +b100 H +1) +#16175000 +0) +#16181250 +b101 H +1) +#16187500 +0) +#16193750 +b110 H +1) +#16200000 +0) +#16206250 +b111 H +1) +#16212500 +0) +#16218750 +0. +b0 H +1) +#16225000 +0) +#16231250 +b110 F +b1 H +1) +#16237500 +0) +#16243750 +b100 F +b10 H +1) +#16250000 +0) +#16256250 +19 +0< +b0 F +b11 H +1) +#16262500 +0) +#16268750 +09 +1$ +b10000000 G +0E +b100 H +1) +#16275000 +0) +#16281250 +b101 H +1) +#16287500 +0) +#16293750 +b110 H +1) +#16300000 +0) +#16306250 +b111 H +1) +#16312500 +0) +#16318750 +0+ +b0 P +b0 H +1) +#16325000 +0) +#16331250 +b110 B +b1 H +1) +#16337500 +0) +#16343750 +b100 B +b10 H +1) +#16350000 +0) +#16356250 +0= +b0 B +b11 H +1) +#16362500 +0) +#16368750 +b100 H +1) +#16375000 +0) +#16381250 +b101 H +1) +#16387500 +0) +#16393750 +b110 H +1) +#16400000 +0) +#16406250 +b111 H +1) +#16412500 +0) +#16418750 +b1 M +1. +b0 H +1) +#16425000 +0) +#16431250 +b1 F +b1 H +1) +#16437500 +0) +#16443750 +b11 F +b10 H +1) +#16450000 +0) +#16456250 +1: +1< +b111 F +b11 H +1) +#16462500 +0) +#16468750 +0: +1" +b1111110 # +b1111110 C +b0 ? +b1111110 D +1E +b100 H +1) +#16475000 +0) +#16481250 +b0 / +b0 ; +0" +b1 5 +b1 4 +b101 H +1) +#16487500 +0) +#16493750 +b110 H +1) +#16500000 +0) +#16506250 +b111 H +1) +#16512500 +0) +#16518750 +0. +b0 H +1) +#16525000 +0) +#16531250 +b110 F +b1 H +1) +#16537500 +0) +#16543750 +b100 F +b10 H +1) +#16550000 +0) +#16556250 +19 +0< +b0 F +b11 H +1) +#16562500 +0) +#16568750 +09 +0$ +1! +b0 G +0E +b100 H +1) +#16575000 +0) +#16581250 +0! +b101 H +1) +#16587500 +0) +#16593750 +b110 H +1) +#16600000 +0) +#16606250 +b111 H +1) +#16612500 +0) +#16618750 +b10000 I +b1 - +b1 L +b11111111111111111111111111111111 P +b0 H +1) +#16625000 +0) +#16631250 +b1 H +1) +#16637500 +0) +#16643750 +b10 H +1) +#16650000 +0) +#16656250 +b11 H +1) +#16662500 +0) +#16668750 +b100 H +1) +#16675000 +0) +#16681250 +b101 H +1) +#16687500 +0) +#16693750 +b110 H +1) +#16700000 +0) +#16706250 +b111 H +1) +#16712500 +0) +#16718750 +b1000 H +1) +#16725000 +0) +#16731250 +b1001 H +1) +#16737500 +0) +#16743750 +b1010 H +1) +#16750000 +0) +#16756250 +b1011 H +1) +#16762500 +0) +#16768750 +b1100 H +1) +#16775000 +0) +#16781250 +b1101 H +1) +#16787500 +0) +#16793750 +b1110 H +1) +#16800000 +0) +#16806250 +b1111 H +1) +#16812500 +0) +#16818750 +1* +b0 H +1) +#16825000 +0) +#16831250 +b1 A +b1 H +1) +#16837500 +0) +#16843750 +b11 A +b10 H +1) +#16850000 +0) +#16856250 +0' +18 +1> +b111 A +b11 H +1) +#16862500 +0) +#16868750 +08 +1& +1@ +b100 H +1) +#16875000 +0) +#16881250 +0& +b1 0 +b101 H +1) +#16887500 +0) +#16893750 +b110 H +1) +#16900000 +0) +#16906250 +b111 H +1) +#16912500 +0) +#16918750 +b1000 H +1) +#16925000 +0) +#16931250 +b1001 H +1) +#16937500 +0) +#16943750 +b1010 H +1) +#16950000 +0) +#16956250 +b1011 H +1) +#16962500 +0) +#16968750 +b1100 H +1) +#16975000 +0) +#16981250 +b1101 H +1) +#16987500 +0) +#16993750 +b1110 H +1) +#17000000 +0) +#17006250 +b1111 H +1) +#17012500 +0) +#17018750 +b10000 H +1) +#17025000 +0) +#17031250 +1) +#17037500 +0) +#17043750 +1) +#17050000 +0) +#17056250 +1) +#17062500 +0) +#17068750 +1) +#17075000 +0) +#17081250 +1) +#17087500 +0) +#17093750 +1) +#17100000 +0) +#17106250 +1) +#17112500 +0) +#17118750 +1) +#17125000 +0) +#17131250 +1) +#17137500 +0) +#17143750 +b0 H +1) +#17150000 +0) +#17156250 +b1 H +1) +#17162500 +0) +#17168750 +b10 H +1) +#17175000 +0) +#17181250 +b11 H +1) +#17187500 +0) +#17193750 +b100 H +1) +#17200000 +0) +#17206250 +b101 H +1) +#17212500 +0) +#17218750 +b110 H +1) +#17225000 +0) +#17231250 +b111 H +1) +#17237500 +0) +#17243750 +b1000 H +1) +#17250000 +0) +#17256250 +b1001 H +1) +#17262500 +0) +#17268750 +b1010 H +1) +#17275000 +0) +#17281250 +b1011 H +1) +#17287500 +0) +#17293750 +b1100 H +1) +#17300000 +0) +#17306250 +b1101 H +1) +#17312500 +0) +#17318750 +b1110 H +1) +#17325000 +0) +#17331250 +b1111 H +1) +#17337500 +0) +#17343750 +0* +b0 H +1) +#17350000 +0) +#17356250 +b110 A +b1 H +1) +#17362500 +0) +#17368750 +b100 A +b10 H +1) +#17375000 +0) +#17381250 +17 +1' +0> +b0 A +b11 H +1) +#17387500 +0) +#17393750 +07 +1% +1! +0@ +b100 H +1) +#17400000 +0) +#17406250 +0% +0! +b10 1 +b101 H +1) +#17412500 +0) +#17418750 +b110 H +1) +#17425000 +0) +#17431250 +b111 H +1) +#17437500 +0) +#17443750 +b1000 H +1) +#17450000 +0) +#17456250 +b1001 H +1) +#17462500 +0) +#17468750 +b1010 H +1) +#17475000 +0) +#17481250 +b1011 H +1) +#17487500 +0) +#17493750 +b1100 H +1) +#17500000 +0) +#17506250 +b1101 H +1) +#17512500 +0) +#17518750 +b1110 H +1) +#17525000 +0) +#17531250 +b1111 H +1) +#17537500 +0) +#17543750 +b1000 I +1+ +b111 P +b0 M +b10000001 N +b0 H +1) +#17550000 +0) +#17556250 +b1 B +b1 H +1) +#17562500 +0) +#17568750 +b11 B +b10 H +1) +#17575000 +0) +#17581250 +1= +b111 B +b11 H +1) +#17587500 +0) +#17593750 +b100 H +1) +#17600000 +0) +#17606250 +b101 H +1) +#17612500 +0) +#17618750 +b110 H +1) +#17625000 +0) +#17631250 +b111 H +1) +#17637500 +0) +#17643750 +1. +b0 H +1) +#17650000 +0) +#17656250 +b1 F +b1 H +1) +#17662500 +0) +#17668750 +b11 F +b10 H +1) +#17675000 +0) +#17681250 +1: +1< +b111 F +b11 H +1) +#17687500 +0) +#17693750 +0: +b1 ? +b11111101 D +1E +b100 H +1) +#17700000 +0) +#17706250 +b101 H +1) +#17712500 +0) +#17718750 +b110 H +1) +#17725000 +0) +#17731250 +b111 H +1) +#17737500 +0) +#17743750 +0. +b0 H +1) +#17750000 +0) +#17756250 +b110 F +b1 H +1) +#17762500 +0) +#17768750 +b100 F +b10 H +1) +#17775000 +0) +#17781250 +19 +0< +b0 F +b11 H +1) +#17787500 +0) +#17793750 +09 +0E +b100 H +1) +#17800000 +0) +#17806250 +b101 H +1) +#17812500 +0) +#17818750 +b110 H +1) +#17825000 +0) +#17831250 +b111 H +1) +#17837500 +0) +#17843750 +0+ +b110 P +b0 H +1) +#17850000 +0) +#17856250 +b110 B +b1 H +1) +#17862500 +0) +#17868750 +b100 B +b10 H +1) +#17875000 +0) +#17881250 +0= +b0 B +b11 H +1) +#17887500 +0) +#17893750 +b100 H +1) +#17900000 +0) +#17906250 +b101 H +1) +#17912500 +0) +#17918750 +b110 H +1) +#17925000 +0) +#17931250 +b111 H +1) +#17937500 +0) +#17943750 +1. +b0 H +1) +#17950000 +0) +#17956250 +b1 F +b1 H +1) +#17962500 +0) +#17968750 +b11 F +b10 H +1) +#17975000 +0) +#17981250 +1: +1< +b111 F +b11 H +1) +#17987500 +0) +#17993750 +0: +b10 ? +b11111010 D +1E +b100 H +1) +#18000000 +0) +#18006250 +b101 H +1) +#18012500 +0) +#18018750 +b110 H +1) +#18025000 +0) +#18031250 +b111 H +1) +#18037500 +0) +#18043750 +0. +b0 H +1) +#18050000 +0) +#18056250 +b110 F +b1 H +1) +#18062500 +0) +#18068750 +b100 F +b10 H +1) +#18075000 +0) +#18081250 +19 +0< +b0 F +b11 H +1) +#18087500 +0) +#18093750 +09 +0E +b100 H +1) +#18100000 +0) +#18106250 +b101 H +1) +#18112500 +0) +#18118750 +b110 H +1) +#18125000 +0) +#18131250 +b111 H +1) +#18137500 +0) +#18143750 +b101 P +b0 H +1) +#18150000 +0) +#18156250 +b1 H +1) +#18162500 +0) +#18168750 +b10 H +1) +#18175000 +0) +#18181250 +b11 H +1) +#18187500 +0) +#18193750 +b100 H +1) +#18200000 +0) +#18206250 +b101 H +1) +#18212500 +0) +#18218750 +b110 H +1) +#18225000 +0) +#18231250 +b111 H +1) +#18237500 +0) +#18243750 +1. +b0 H +1) +#18250000 +0) +#18256250 +b1 F +b1 H +1) +#18262500 +0) +#18268750 +b11 F +b10 H +1) +#18275000 +0) +#18281250 +1: +1< +b111 F +b11 H +1) +#18287500 +0) +#18293750 +0: +b11 ? +b11110100 D +1E +b100 H +1) +#18300000 +0) +#18306250 +b101 H +1) +#18312500 +0) +#18318750 +b110 H +1) +#18325000 +0) +#18331250 +b111 H +1) +#18337500 +0) +#18343750 +0. +b0 H +1) +#18350000 +0) +#18356250 +b110 F +b1 H +1) +#18362500 +0) +#18368750 +b100 F +b10 H +1) +#18375000 +0) +#18381250 +19 +0< +b0 F +b11 H +1) +#18387500 +0) +#18393750 +09 +0E +b100 H +1) +#18400000 +0) +#18406250 +b101 H +1) +#18412500 +0) +#18418750 +b110 H +1) +#18425000 +0) +#18431250 +b111 H +1) +#18437500 +0) +#18443750 +b100 P +b0 H +1) +#18450000 +0) +#18456250 +b1 H +1) +#18462500 +0) +#18468750 +b10 H +1) +#18475000 +0) +#18481250 +b11 H +1) +#18487500 +0) +#18493750 +b100 H +1) +#18500000 +0) +#18506250 +b101 H +1) +#18512500 +0) +#18518750 +b110 H +1) +#18525000 +0) +#18531250 +b111 H +1) +#18537500 +0) +#18543750 +1. +b0 H +1) +#18550000 +0) +#18556250 +b1 F +b1 H +1) +#18562500 +0) +#18568750 +b11 F +b10 H +1) +#18575000 +0) +#18581250 +1: +1< +b111 F +b11 H +1) +#18587500 +0) +#18593750 +0: +b100 ? +b11101000 D +1E +b100 H +1) +#18600000 +0) +#18606250 +b101 H +1) +#18612500 +0) +#18618750 +b110 H +1) +#18625000 +0) +#18631250 +b111 H +1) +#18637500 +0) +#18643750 +0. +b0 H +1) +#18650000 +0) +#18656250 +b110 F +b1 H +1) +#18662500 +0) +#18668750 +b100 F +b10 H +1) +#18675000 +0) +#18681250 +19 +0< +b0 F +b11 H +1) +#18687500 +0) +#18693750 +09 +0E +b100 H +1) +#18700000 +0) +#18706250 +b101 H +1) +#18712500 +0) +#18718750 +b110 H +1) +#18725000 +0) +#18731250 +b111 H +1) +#18737500 +0) +#18743750 +b11 P +b0 H +1) +#18750000 +0) +#18756250 +b1 H +1) +#18762500 +0) +#18768750 +b10 H +1) +#18775000 +0) +#18781250 +b11 H +1) +#18787500 +0) +#18793750 +b100 H +1) +#18800000 +0) +#18806250 +b101 H +1) +#18812500 +0) +#18818750 +b110 H +1) +#18825000 +0) +#18831250 +b111 H +1) +#18837500 +0) +#18843750 +1. +b0 H +1) +#18850000 +0) +#18856250 +b1 F +b1 H +1) +#18862500 +0) +#18868750 +b11 F +b10 H +1) +#18875000 +0) +#18881250 +1: +1< +b111 F +b11 H +1) +#18887500 +0) +#18893750 +0: +b101 ? +b11010000 D +1E +b100 H +1) +#18900000 +0) +#18906250 +b101 H +1) +#18912500 +0) +#18918750 +b110 H +1) +#18925000 +0) +#18931250 +b111 H +1) +#18937500 +0) +#18943750 +0. +b0 H +1) +#18950000 +0) +#18956250 +b110 F +b1 H +1) +#18962500 +0) +#18968750 +b100 F +b10 H +1) +#18975000 +0) +#18981250 +19 +0< +b0 F +b11 H +1) +#18987500 +0) +#18993750 +09 +0E +b100 H +1) +#19000000 +0) +#19006250 +b101 H +1) +#19012500 +0) +#19018750 +b110 H +1) +#19025000 +0) +#19031250 +b111 H +1) +#19037500 +0) +#19043750 +b10 P +b0 H +1) +#19050000 +0) +#19056250 +b1 H +1) +#19062500 +0) +#19068750 +b10 H +1) +#19075000 +0) +#19081250 +b11 H +1) +#19087500 +0) +#19093750 +b100 H +1) +#19100000 +0) +#19106250 +b101 H +1) +#19112500 +0) +#19118750 +b110 H +1) +#19125000 +0) +#19131250 +b111 H +1) +#19137500 +0) +#19143750 +1. +b0 H +1) +#19150000 +0) +#19156250 +b1 F +b1 H +1) +#19162500 +0) +#19168750 +b11 F +b10 H +1) +#19175000 +0) +#19181250 +1: +1< +b111 F +b11 H +1) +#19187500 +0) +#19193750 +0: +b110 ? +b10100000 D +1E +b100 H +1) +#19200000 +0) +#19206250 +b101 H +1) +#19212500 +0) +#19218750 +b110 H +1) +#19225000 +0) +#19231250 +b111 H +1) +#19237500 +0) +#19243750 +0. +b0 H +1) +#19250000 +0) +#19256250 +b110 F +b1 H +1) +#19262500 +0) +#19268750 +b100 F +b10 H +1) +#19275000 +0) +#19281250 +19 +0< +b0 F +b11 H +1) +#19287500 +0) +#19293750 +09 +0E +b100 H +1) +#19300000 +0) +#19306250 +b101 H +1) +#19312500 +0) +#19318750 +b110 H +1) +#19325000 +0) +#19331250 +b111 H +1) +#19337500 +0) +#19343750 +b1 P +b0 H +1) +#19350000 +0) +#19356250 +b1 H +1) +#19362500 +0) +#19368750 +b10 H +1) +#19375000 +0) +#19381250 +b11 H +1) +#19387500 +0) +#19393750 +b100 H +1) +#19400000 +0) +#19406250 +b101 H +1) +#19412500 +0) +#19418750 +b110 H +1) +#19425000 +0) +#19431250 +b111 H +1) +#19437500 +0) +#19443750 +1. +b0 H +1) +#19450000 +0) +#19456250 +b1 F +b1 H +1) +#19462500 +0) +#19468750 +b11 F +b10 H +1) +#19475000 +0) +#19481250 +1: +1< +b111 F +b11 H +1) +#19487500 +0) +#19493750 +0: +b111 ? +b1000000 D +1E +b100 H +1) +#19500000 +0) +#19506250 +b101 H +1) +#19512500 +0) +#19518750 +b110 H +1) +#19525000 +0) +#19531250 +b111 H +1) +#19537500 +0) +#19543750 +0. +b0 H +1) +#19550000 +0) +#19556250 +b110 F +b1 H +1) +#19562500 +0) +#19568750 +b100 F +b10 H +1) +#19575000 +0) +#19581250 +19 +0< +b0 F +b11 H +1) +#19587500 +0) +#19593750 +09 +0E +b100 H +1) +#19600000 +0) +#19606250 +b101 H +1) +#19612500 +0) +#19618750 +b110 H +1) +#19625000 +0) +#19631250 +b111 H +1) +#19637500 +0) +#19643750 +1+ +b0 P +b0 H +1) +#19650000 +0) +#19656250 +b1 B +b1 H +1) +#19662500 +0) +#19668750 +b11 B +b10 H +1) +#19675000 +0) +#19681250 +1= +b111 B +b11 H +1) +#19687500 +0) +#19693750 +b100 H +1) +#19700000 +0) +#19706250 +b101 H +1) +#19712500 +0) +#19718750 +b110 H +1) +#19725000 +0) +#19731250 +b111 H +1) +#19737500 +0) +#19743750 +1. +b0 H +1) +#19750000 +0) +#19756250 +b1 F +b1 H +1) +#19762500 +0) +#19768750 +b11 F +b10 H +1) +#19775000 +0) +#19781250 +1: +1< +b111 F +b11 H +1) +#19787500 +0) +#19793750 +0: +1" +b10000001 # +b10000001 C +b0 ? +b10000001 D +1E +b100 H +1) +#19800000 +0) +#19806250 +0" +b10 4 +b101 H +1) +#19812500 +0) +#19818750 +b110 H +1) +#19825000 +0) +#19831250 +b111 H +1) +#19837500 +0) +#19843750 +0. +b0 H +1) +#19850000 +0) +#19856250 +b110 F +b1 H +1) +#19862500 +0) +#19868750 +b100 F +b10 H +1) +#19875000 +0) +#19881250 +19 +0< +b0 F +b11 H +1) +#19887500 +0) +#19893750 +09 +1! +0E +b100 H +1) +#19900000 +0) +#19906250 +0! +b101 H +1) +#19912500 +0) +#19918750 +b110 H +1) +#19925000 +0) +#19931250 +b111 H +1) +#19937500 +0) +#19943750 +b10000 I +b0 - +b0 L +b11111111111111111111111111111111 P +b0 H +1) +#19950000 +0) +#19956250 +b1 H +1) +#19962500 +0) +#19968750 +b10 H +1) +#19975000 +0) +#19981250 +b11 H +1) +#19987500 +0) +#19993750 +b100 H +1) +#20000000 +0) +#20006250 +b101 H +1) +#20012500 +0) +#20018750 +b110 H +1) +#20025000 +0) +#20031250 +b111 H +1) +#20037500 +0) +#20043750 +b1000 H +1) +#20050000 +0) +#20056250 +b1001 H +1) +#20062500 +0) +#20068750 +b1010 H +1) +#20075000 +0) +#20081250 +b1011 H +1) +#20087500 +0) +#20093750 +b1100 H +1) +#20100000 +0) +#20106250 +b1101 H +1) +#20112500 +0) +#20118750 +b1110 H +1) +#20125000 +0) +#20131250 +b1111 H +1) +#20137500 +0) +#20143750 +1* +b0 H +1) +#20150000 +0) +#20156250 +b1 A +b1 H +1) +#20162500 +0) +#20168750 +b11 A +b10 H +1) +#20175000 +0) +#20181250 +0' +18 +1> +b111 A +b11 H +1) +#20187500 +0) +#20193750 +08 +1& +1@ +b100 H +1) +#20200000 +0) +#20206250 +0& +b10 0 +b101 H +1) +#20212500 +0) +#20218750 +b110 H +1) +#20225000 +0) +#20231250 +b111 H +1) +#20237500 +0) +#20243750 +b1000 H +1) +#20250000 +0) +#20256250 +b1001 H +1) +#20262500 +0) +#20268750 +b1010 H +1) +#20275000 +0) +#20281250 +b1011 H +1) +#20287500 +0) +#20293750 +b1100 H +1) +#20300000 +0) +#20306250 +b1101 H +1) +#20312500 +0) +#20318750 +b1110 H +1) +#20325000 +0) +#20331250 +b1111 H +1) +#20337500 +0) +#20343750 +b10000 H +1) +#20350000 +0) +#20356250 +1) +#20362500 +0) +#20368750 +1) +#20375000 +1, +0) +#20381250 +0= +b10 / +b10 ; +b0 B +b0 # +b0 C +b0 D +b0 5 +b0 4 +b0 0 +b0 1 +1) +#20387500 +0, +0) +#20393750 +b1 B +b1011010 / +b1011010 ; +b0 H +b101000 I +0+ +b10100 J +1) +#20400000 +0) +#20406250 +b10 B +b1 H +1) +#20412500 +0) +#20418750 +1= +b100 B +b10 H +1) +#20425000 +0) +#20431250 +0= +b0 B +b11 H +1) +#20437500 +0) +#20443750 +b100 H +1) +#20450000 +0) +#20456250 +b101 H +1) +#20462500 +0) +#20468750 +b110 H +1) +#20475000 +0) +#20481250 +b111 H +1) +#20487500 +0) +#20493750 +b1000 H +1) +#20500000 +0) +#20506250 +b1001 H +1) +#20512500 +0) +#20518750 +b1010 H +1) +#20525000 +0) +#20531250 +b1011 H +1) +#20537500 +0) +#20543750 +b1100 H +1) +#20550000 +0) +#20556250 +b1101 H +1) +#20562500 +0) +#20568750 +b1110 H +1) +#20575000 +0) +#20581250 +b1111 H +1) +#20587500 +0) +#20593750 +b10000 H +1) +#20600000 +0) +#20606250 +b10001 H +1) +#20612500 +0) +#20618750 +b10010 H +1) +#20625000 +0) +#20631250 +b10011 H +1) +#20637500 +0) +#20643750 +b10100 H +1) +#20650000 +0) +#20656250 +b10101 H +1) +#20662500 +0) +#20668750 +b10110 H +1) +#20675000 +0) +#20681250 +b10111 H +1) +#20687500 +0) +#20693750 +b11000 H +1) +#20700000 +0) +#20706250 +b11001 H +1) +#20712500 +0) +#20718750 +b11010 H +1) +#20725000 +0) +#20731250 +b11011 H +1) +#20737500 +0) +#20743750 +b11100 H +1) +#20750000 +0) +#20756250 +b11101 H +1) +#20762500 +0) +#20768750 +b11110 H +1) +#20775000 +0) +#20781250 +b11111 H +1) +#20787500 +0) +#20793750 +b100000 H +1) +#20800000 +0) +#20806250 +b100001 H +1) +#20812500 +0) +#20818750 +b100010 H +1) +#20825000 +0) +#20831250 +b100011 H +1) +#20837500 +0) +#20843750 +b100100 H +1) +#20850000 +0) +#20856250 +b100101 H +1) +#20862500 +0) +#20868750 +b100110 H +1) +#20875000 +0) +#20881250 +b100111 H +1) +#20887500 +0) +#20893750 +0* +b0 H +1) +#20900000 +0) +#20906250 +b110 A +b1 H +1) +#20912500 +0) +#20918750 +b100 A +b10 H +1) +#20925000 +0) +#20931250 +17 +1' +0> +b0 A +b11 H +1) +#20937500 +0) +#20943750 +07 +1% +1! +b1011010 G +0@ +b100 H +1) +#20950000 +0) +#20956250 +0% +0! +b1 1 +b101 H +1) +#20962500 +0) +#20968750 +b110 H +1) +#20975000 +0) +#20981250 +b111 H +1) +#20987500 +0) +#20993750 +b1000 H +1) +#21000000 +0) +#21006250 +b1001 H +1) +#21012500 +0) +#21018750 +b1010 H +1) +#21025000 +0) +#21031250 +b1011 H +1) +#21037500 +0) +#21043750 +b1100 H +1) +#21050000 +0) +#21056250 +b1101 H +1) +#21062500 +0) +#21068750 +b1110 H +1) +#21075000 +0) +#21081250 +b1111 H +1) +#21087500 +0) +#21093750 +b10000 H +1) +#21100000 +0) +#21106250 +b10001 H +1) +#21112500 +0) +#21118750 +b10010 H +1) +#21125000 +0) +#21131250 +b10011 H +1) +#21137500 +0) +#21143750 +b10100 H +1) +#21150000 +0) +#21156250 +b10101 H +1) +#21162500 +0) +#21168750 +b10110 H +1) +#21175000 +0) +#21181250 +b10111 H +1) +#21187500 +0) +#21193750 +b11000 H +1) +#21200000 +0) +#21206250 +b11001 H +1) +#21212500 +0) +#21218750 +b11010 H +1) +#21225000 +0) +#21231250 +b11011 H +1) +#21237500 +0) +#21243750 +b11100 H +1) +#21250000 +0) +#21256250 +b11101 H +1) +#21262500 +0) +#21268750 +b11110 H +1) +#21275000 +0) +#21281250 +b11111 H +1) +#21287500 +0) +#21293750 +b100000 H +1) +#21300000 +0) +#21306250 +b100001 H +1) +#21312500 +0) +#21318750 +b100010 H +1) +#21325000 +0) +#21331250 +b100011 H +1) +#21337500 +0) +#21343750 +b100100 H +1) +#21350000 +0) +#21356250 +b100101 H +1) +#21362500 +0) +#21368750 +b100110 H +1) +#21375000 +0) +#21381250 +b100111 H +1) +#21387500 +0) +#21393750 +b10100 I +1+ +b111 P +b10100 O +b10010110 N +b0 H +1) +#21400000 +0) +#21406250 +b1 B +b1 H +1) +#21412500 +0) +#21418750 +b11 B +b10 H +1) +#21425000 +0) +#21431250 +1= +b111 B +b11 H +1) +#21437500 +0) +#21443750 +b100 H +1) +#21450000 +0) +#21456250 +b101 H +1) +#21462500 +0) +#21468750 +b110 H +1) +#21475000 +0) +#21481250 +b111 H +1) +#21487500 +0) +#21493750 +b1000 H +1) +#21500000 +0) +#21506250 +b1001 H +1) +#21512500 +0) +#21518750 +b1010 H +1) +#21525000 +0) +#21531250 +b1011 H +1) +#21537500 +0) +#21543750 +b1100 H +1) +#21550000 +0) +#21556250 +b1101 H +1) +#21562500 +0) +#21568750 +b1110 H +1) +#21575000 +0) +#21581250 +b1111 H +1) +#21587500 +0) +#21593750 +b10000 H +1) +#21600000 +0) +#21606250 +b10001 H +1) +#21612500 +0) +#21618750 +b10010 H +1) +#21625000 +0) +#21631250 +b10011 H +1) +#21637500 +0) +#21643750 +1. +b0 H +1) +#21650000 +0) +#21656250 +b1 F +b1 H +1) +#21662500 +0) +#21668750 +b11 F +b10 H +1) +#21675000 +0) +#21681250 +1: +1< +b111 F +b11 H +1) +#21687500 +0) +#21693750 +0: +b1 ? +b1 D +1E +b100 H +1) +#21700000 +0) +#21706250 +b101 H +1) +#21712500 +0) +#21718750 +b110 H +1) +#21725000 +0) +#21731250 +b111 H +1) +#21737500 +0) +#21743750 +b1000 H +1) +#21750000 +0) +#21756250 +b1001 H +1) +#21762500 +0) +#21768750 +b1010 H +1) +#21775000 +0) +#21781250 +b1011 H +1) +#21787500 +0) +#21793750 +b1100 H +1) +#21800000 +0) +#21806250 +b1101 H +1) +#21812500 +0) +#21818750 +b1110 H +1) +#21825000 +0) +#21831250 +b1111 H +1) +#21837500 +0) +#21843750 +b10000 H +1) +#21850000 +0) +#21856250 +b10001 H +1) +#21862500 +0) +#21868750 +b10010 H +1) +#21875000 +0) +#21881250 +b10011 H +1) +#21887500 +0) +#21893750 +0. +b0 H +1) +#21900000 +0) +#21906250 +b110 F +b1 H +1) +#21912500 +0) +#21918750 +b100 F +b10 H +1) +#21925000 +0) +#21931250 +19 +0< +b0 F +b11 H +1) +#21937500 +0) +#21943750 +09 +1$ +b10110100 G +0E +b100 H +1) +#21950000 +0) +#21956250 +b101 H +1) +#21962500 +0) +#21968750 +b110 H +1) +#21975000 +0) +#21981250 +b111 H +1) +#21987500 +0) +#21993750 +b1000 H +1) +#22000000 +0) +#22006250 +b1001 H +1) +#22012500 +0) +#22018750 +b1010 H +1) +#22025000 +0) +#22031250 +b1011 H +1) +#22037500 +0) +#22043750 +b1100 H +1) +#22050000 +0) +#22056250 +b1101 H +1) +#22062500 +0) +#22068750 +b1110 H +1) +#22075000 +0) +#22081250 +b1111 H +1) +#22087500 +0) +#22093750 +b10000 H +1) +#22100000 +0) +#22106250 +b10001 H +1) +#22112500 +0) +#22118750 +b10010 H +1) +#22125000 +0) +#22131250 +b10011 H +1) +#22137500 +0) +#22143750 +0+ +b110 P +b0 H +1) +#22150000 +0) +#22156250 +b110 B +b1 H +1) +#22162500 +0) +#22168750 +b100 B +b10 H +1) +#22175000 +0) +#22181250 +0= +b0 B +b11 H +1) +#22187500 +0) +#22193750 +b100 H +1) +#22200000 +0) +#22206250 +b101 H +1) +#22212500 +0) +#22218750 +b110 H +1) +#22225000 +0) +#22231250 +b111 H +1) +#22237500 +0) +#22243750 +b1000 H +1) +#22250000 +0) +#22256250 +b1001 H +1) +#22262500 +0) +#22268750 +b1010 H +1) +#22275000 +0) +#22281250 +b1011 H +1) +#22287500 +0) +#22293750 +b1100 H +1) +#22300000 +0) +#22306250 +b1101 H +1) +#22312500 +0) +#22318750 +b1110 H +1) +#22325000 +0) +#22331250 +b1111 H +1) +#22337500 +0) +#22343750 +b10000 H +1) +#22350000 +0) +#22356250 +b10001 H +1) +#22362500 +0) +#22368750 +b10010 H +1) +#22375000 +0) +#22381250 +b10011 H +1) +#22387500 +0) +#22393750 +b1000000 M +1. +b0 H +1) +#22400000 +0) +#22406250 +b1 F +b1 H +1) +#22412500 +0) +#22418750 +b11 F +b10 H +1) +#22425000 +0) +#22431250 +1: +1< +b111 F +b11 H +1) +#22437500 +0) +#22443750 +0: +b10 ? +b10 D +1E +b100 H +1) +#22450000 +0) +#22456250 +b101 H +1) +#22462500 +0) +#22468750 +b110 H +1) +#22475000 +0) +#22481250 +b111 H +1) +#22487500 +0) +#22493750 +b1000 H +1) +#22500000 +0) +#22506250 +b1001 H +1) +#22512500 +0) +#22518750 +b1010 H +1) +#22525000 +0) +#22531250 +b1011 H +1) +#22537500 +0) +#22543750 +b1100 H +1) +#22550000 +0) +#22556250 +b1101 H +1) +#22562500 +0) +#22568750 +b1110 H +1) +#22575000 +0) +#22581250 +b1111 H +1) +#22587500 +0) +#22593750 +b10000 H +1) +#22600000 +0) +#22606250 +b10001 H +1) +#22612500 +0) +#22618750 +b10010 H +1) +#22625000 +0) +#22631250 +b10011 H +1) +#22637500 +0) +#22643750 +0. +b0 H +1) +#22650000 +0) +#22656250 +b110 F +b1 H +1) +#22662500 +0) +#22668750 +b100 F +b10 H +1) +#22675000 +0) +#22681250 +19 +0< +b0 F +b11 H +1) +#22687500 +0) +#22693750 +09 +0$ +b1101000 G +0E +b100 H +1) +#22700000 +0) +#22706250 +b101 H +1) +#22712500 +0) +#22718750 +b110 H +1) +#22725000 +0) +#22731250 +b111 H +1) +#22737500 +0) +#22743750 +b1000 H +1) +#22750000 +0) +#22756250 +b1001 H +1) +#22762500 +0) +#22768750 +b1010 H +1) +#22775000 +0) +#22781250 +b1011 H +1) +#22787500 +0) +#22793750 +b1100 H +1) +#22800000 +0) +#22806250 +b1101 H +1) +#22812500 +0) +#22818750 +b1110 H +1) +#22825000 +0) +#22831250 +b1111 H +1) +#22837500 +0) +#22843750 +b10000 H +1) +#22850000 +0) +#22856250 +b10001 H +1) +#22862500 +0) +#22868750 +b10010 H +1) +#22875000 +0) +#22881250 +b10011 H +1) +#22887500 +0) +#22893750 +b101 P +b0 H +1) +#22900000 +0) +#22906250 +b1 H +1) +#22912500 +0) +#22918750 +b10 H +1) +#22925000 +0) +#22931250 +b11 H +1) +#22937500 +0) +#22943750 +b100 H +1) +#22950000 +0) +#22956250 +b101 H +1) +#22962500 +0) +#22968750 +b110 H +1) +#22975000 +0) +#22981250 +b111 H +1) +#22987500 +0) +#22993750 +b1000 H +1) +#23000000 +0) +#23006250 +b1001 H +1) +#23012500 +0) +#23018750 +b1010 H +1) +#23025000 +0) +#23031250 +b1011 H +1) +#23037500 +0) +#23043750 +b1100 H +1) +#23050000 +0) +#23056250 +b1101 H +1) +#23062500 +0) +#23068750 +b1110 H +1) +#23075000 +0) +#23081250 +b1111 H +1) +#23087500 +0) +#23093750 +b10000 H +1) +#23100000 +0) +#23106250 +b10001 H +1) +#23112500 +0) +#23118750 +b10010 H +1) +#23125000 +0) +#23131250 +b10011 H +1) +#23137500 +0) +#23143750 +1. +b0 H +1) +#23150000 +0) +#23156250 +b1 F +b1 H +1) +#23162500 +0) +#23168750 +b11 F +b10 H +1) +#23175000 +0) +#23181250 +1: +1< +b111 F +b11 H +1) +#23187500 +0) +#23193750 +0: +b11 ? +b100 D +1E +b100 H +1) +#23200000 +0) +#23206250 +b101 H +1) +#23212500 +0) +#23218750 +b110 H +1) +#23225000 +0) +#23231250 +b111 H +1) +#23237500 +0) +#23243750 +b1000 H +1) +#23250000 +0) +#23256250 +b1001 H +1) +#23262500 +0) +#23268750 +b1010 H +1) +#23275000 +0) +#23281250 +b1011 H +1) +#23287500 +0) +#23293750 +b1100 H +1) +#23300000 +0) +#23306250 +b1101 H +1) +#23312500 +0) +#23318750 +b1110 H +1) +#23325000 +0) +#23331250 +b1111 H +1) +#23337500 +0) +#23343750 +b10000 H +1) +#23350000 +0) +#23356250 +b10001 H +1) +#23362500 +0) +#23368750 +b10010 H +1) +#23375000 +0) +#23381250 +b10011 H +1) +#23387500 +0) +#23393750 +0. +b0 H +1) +#23400000 +0) +#23406250 +b110 F +b1 H +1) +#23412500 +0) +#23418750 +b100 F +b10 H +1) +#23425000 +0) +#23431250 +19 +0< +b0 F +b11 H +1) +#23437500 +0) +#23443750 +09 +1$ +b11010000 G +0E +b100 H +1) +#23450000 +0) +#23456250 +b101 H +1) +#23462500 +0) +#23468750 +b110 H +1) +#23475000 +0) +#23481250 +b111 H +1) +#23487500 +0) +#23493750 +b1000 H +1) +#23500000 +0) +#23506250 +b1001 H +1) +#23512500 +0) +#23518750 +b1010 H +1) +#23525000 +0) +#23531250 +b1011 H +1) +#23537500 +0) +#23543750 +b1100 H +1) +#23550000 +0) +#23556250 +b1101 H +1) +#23562500 +0) +#23568750 +b1110 H +1) +#23575000 +0) +#23581250 +b1111 H +1) +#23587500 +0) +#23593750 +b10000 H +1) +#23600000 +0) +#23606250 +b10001 H +1) +#23612500 +0) +#23618750 +b10010 H +1) +#23625000 +0) +#23631250 +b10011 H +1) +#23637500 +0) +#23643750 +1+ +b100 P +b0 H +1) +#23650000 +0) +#23656250 +b1 B +b1 H +1) +#23662500 +0) +#23668750 +b11 B +b10 H +1) +#23675000 +0) +#23681250 +1= +b111 B +b11 H +1) +#23687500 +0) +#23693750 +b100 H +1) +#23700000 +0) +#23706250 +b101 H +1) +#23712500 +0) +#23718750 +b110 H +1) +#23725000 +0) +#23731250 +b111 H +1) +#23737500 +0) +#23743750 +b1000 H +1) +#23750000 +0) +#23756250 +b1001 H +1) +#23762500 +0) +#23768750 +b1010 H +1) +#23775000 +0) +#23781250 +b1011 H +1) +#23787500 +0) +#23793750 +b1100 H +1) +#23800000 +0) +#23806250 +b1101 H +1) +#23812500 +0) +#23818750 +b1110 H +1) +#23825000 +0) +#23831250 +b1111 H +1) +#23837500 +0) +#23843750 +b10000 H +1) +#23850000 +0) +#23856250 +b10001 H +1) +#23862500 +0) +#23868750 +b10010 H +1) +#23875000 +0) +#23881250 +b10011 H +1) +#23887500 +0) +#23893750 +b1010000 M +1. +b0 H +1) +#23900000 +0) +#23906250 +b1 F +b1 H +1) +#23912500 +0) +#23918750 +b11 F +b10 H +1) +#23925000 +0) +#23931250 +1: +1< +b111 F +b11 H +1) +#23937500 +0) +#23943750 +0: +b100 ? +b1001 D +1E +b100 H +1) +#23950000 +0) +#23956250 +b101 H +1) +#23962500 +0) +#23968750 +b110 H +1) +#23975000 +0) +#23981250 +b111 H +1) +#23987500 +0) +#23993750 +b1000 H +1) +#24000000 +0) +#24006250 +b1001 H +1) +#24012500 +0) +#24018750 +b1010 H +1) +#24025000 +0) +#24031250 +b1011 H +1) +#24037500 +0) +#24043750 +b1100 H +1) +#24050000 +0) +#24056250 +b1101 H +1) +#24062500 +0) +#24068750 +b1110 H +1) +#24075000 +0) +#24081250 +b1111 H +1) +#24087500 +0) +#24093750 +b10000 H +1) +#24100000 +0) +#24106250 +b10001 H +1) +#24112500 +0) +#24118750 +b10010 H +1) +#24125000 +0) +#24131250 +b10011 H +1) +#24137500 +0) +#24143750 +0. +b0 H +1) +#24150000 +0) +#24156250 +b110 F +b1 H +1) +#24162500 +0) +#24168750 +b100 F +b10 H +1) +#24175000 +0) +#24181250 +19 +0< +b0 F +b11 H +1) +#24187500 +0) +#24193750 +09 +b10100000 G +0E +b100 H +1) +#24200000 +0) +#24206250 +b101 H +1) +#24212500 +0) +#24218750 +b110 H +1) +#24225000 +0) +#24231250 +b111 H +1) +#24237500 +0) +#24243750 +b1000 H +1) +#24250000 +0) +#24256250 +b1001 H +1) +#24262500 +0) +#24268750 +b1010 H +1) +#24275000 +0) +#24281250 +b1011 H +1) +#24287500 +0) +#24293750 +b1100 H +1) +#24300000 +0) +#24306250 +b1101 H +1) +#24312500 +0) +#24318750 +b1110 H +1) +#24325000 +0) +#24331250 +b1111 H +1) +#24337500 +0) +#24343750 +b10000 H +1) +#24350000 +0) +#24356250 +b10001 H +1) +#24362500 +0) +#24368750 +b10010 H +1) +#24375000 +0) +#24381250 +b10011 H +1) +#24387500 +0) +#24393750 +0+ +b11 P +b0 H +1) +#24400000 +0) +#24406250 +b110 B +b1 H +1) +#24412500 +0) +#24418750 +b100 B +b10 H +1) +#24425000 +0) +#24431250 +0= +b0 B +b11 H +1) +#24437500 +0) +#24443750 +b100 H +1) +#24450000 +0) +#24456250 +b101 H +1) +#24462500 +0) +#24468750 +b110 H +1) +#24475000 +0) +#24481250 +b111 H +1) +#24487500 +0) +#24493750 +b1000 H +1) +#24500000 +0) +#24506250 +b1001 H +1) +#24512500 +0) +#24518750 +b1010 H +1) +#24525000 +0) +#24531250 +b1011 H +1) +#24537500 +0) +#24543750 +b1100 H +1) +#24550000 +0) +#24556250 +b1101 H +1) +#24562500 +0) +#24568750 +b1110 H +1) +#24575000 +0) +#24581250 +b1111 H +1) +#24587500 +0) +#24593750 +b10000 H +1) +#24600000 +0) +#24606250 +b10001 H +1) +#24612500 +0) +#24618750 +b10010 H +1) +#24625000 +0) +#24631250 +b10011 H +1) +#24637500 +0) +#24643750 +b1011000 M +1. +b0 H +1) +#24650000 +0) +#24656250 +b1 F +b1 H +1) +#24662500 +0) +#24668750 +b11 F +b10 H +1) +#24675000 +0) +#24681250 +1: +1< +b111 F +b11 H +1) +#24687500 +0) +#24693750 +0: +b101 ? +b10010 D +1E +b100 H +1) +#24700000 +0) +#24706250 +b101 H +1) +#24712500 +0) +#24718750 +b110 H +1) +#24725000 +0) +#24731250 +b111 H +1) +#24737500 +0) +#24743750 +b1000 H +1) +#24750000 +0) +#24756250 +b1001 H +1) +#24762500 +0) +#24768750 +b1010 H +1) +#24775000 +0) +#24781250 +b1011 H +1) +#24787500 +0) +#24793750 +b1100 H +1) +#24800000 +0) +#24806250 +b1101 H +1) +#24812500 +0) +#24818750 +b1110 H +1) +#24825000 +0) +#24831250 +b1111 H +1) +#24837500 +0) +#24843750 +b10000 H +1) +#24850000 +0) +#24856250 +b10001 H +1) +#24862500 +0) +#24868750 +b10010 H +1) +#24875000 +0) +#24881250 +b10011 H +1) +#24887500 +0) +#24893750 +0. +b0 H +1) +#24900000 +0) +#24906250 +b110 F +b1 H +1) +#24912500 +0) +#24918750 +b100 F +b10 H +1) +#24925000 +0) +#24931250 +19 +0< +b0 F +b11 H +1) +#24937500 +0) +#24943750 +09 +0$ +b1000000 G +0E +b100 H +1) +#24950000 +0) +#24956250 +b101 H +1) +#24962500 +0) +#24968750 +b110 H +1) +#24975000 +0) +#24981250 +b111 H +1) +#24987500 +0) +#24993750 +b1000 H +1) +#25000000 +0) +#25006250 +b1001 H +1) +#25012500 +0) +#25018750 +b1010 H +1) +#25025000 +0) +#25031250 +b1011 H +1) +#25037500 +0) +#25043750 +b1100 H +1) +#25050000 +0) +#25056250 +b1101 H +1) +#25062500 +0) +#25068750 +b1110 H +1) +#25075000 +0) +#25081250 +b1111 H +1) +#25087500 +0) +#25093750 +b10000 H +1) +#25100000 +0) +#25106250 +b10001 H +1) +#25112500 +0) +#25118750 +b10010 H +1) +#25125000 +0) +#25131250 +b10011 H +1) +#25137500 +0) +#25143750 +1+ +b10 P +b0 H +1) +#25150000 +0) +#25156250 +b1 B +b1 H +1) +#25162500 +0) +#25168750 +b11 B +b10 H +1) +#25175000 +0) +#25181250 +1= +b111 B +b11 H +1) +#25187500 +0) +#25193750 +b100 H +1) +#25200000 +0) +#25206250 +b101 H +1) +#25212500 +0) +#25218750 +b110 H +1) +#25225000 +0) +#25231250 +b111 H +1) +#25237500 +0) +#25243750 +b1000 H +1) +#25250000 +0) +#25256250 +b1001 H +1) +#25262500 +0) +#25268750 +b1010 H +1) +#25275000 +0) +#25281250 +b1011 H +1) +#25287500 +0) +#25293750 +b1100 H +1) +#25300000 +0) +#25306250 +b1101 H +1) +#25312500 +0) +#25318750 +b1110 H +1) +#25325000 +0) +#25331250 +b1111 H +1) +#25337500 +0) +#25343750 +b10000 H +1) +#25350000 +0) +#25356250 +b10001 H +1) +#25362500 +0) +#25368750 +b10010 H +1) +#25375000 +0) +#25381250 +b10011 H +1) +#25387500 +0) +#25393750 +1. +b0 H +1) +#25400000 +0) +#25406250 +b1 F +b1 H +1) +#25412500 +0) +#25418750 +b11 F +b10 H +1) +#25425000 +0) +#25431250 +1: +1< +b111 F +b11 H +1) +#25437500 +0) +#25443750 +0: +b110 ? +b100101 D +1E +b100 H +1) +#25450000 +0) +#25456250 +b101 H +1) +#25462500 +0) +#25468750 +b110 H +1) +#25475000 +0) +#25481250 +b111 H +1) +#25487500 +0) +#25493750 +b1000 H +1) +#25500000 +0) +#25506250 +b1001 H +1) +#25512500 +0) +#25518750 +b1010 H +1) +#25525000 +0) +#25531250 +b1011 H +1) +#25537500 +0) +#25543750 +b1100 H +1) +#25550000 +0) +#25556250 +b1101 H +1) +#25562500 +0) +#25568750 +b1110 H +1) +#25575000 +0) +#25581250 +b1111 H +1) +#25587500 +0) +#25593750 +b10000 H +1) +#25600000 +0) +#25606250 +b10001 H +1) +#25612500 +0) +#25618750 +b10010 H +1) +#25625000 +0) +#25631250 +b10011 H +1) +#25637500 +0) +#25643750 +0. +b0 H +1) +#25650000 +0) +#25656250 +b110 F +b1 H +1) +#25662500 +0) +#25668750 +b100 F +b10 H +1) +#25675000 +0) +#25681250 +19 +0< +b0 F +b11 H +1) +#25687500 +0) +#25693750 +09 +1$ +b10000000 G +0E +b100 H +1) +#25700000 +0) +#25706250 +b101 H +1) +#25712500 +0) +#25718750 +b110 H +1) +#25725000 +0) +#25731250 +b111 H +1) +#25737500 +0) +#25743750 +b1000 H +1) +#25750000 +0) +#25756250 +b1001 H +1) +#25762500 +0) +#25768750 +b1010 H +1) +#25775000 +0) +#25781250 +b1011 H +1) +#25787500 +0) +#25793750 +b1100 H +1) +#25800000 +0) +#25806250 +b1101 H +1) +#25812500 +0) +#25818750 +b1110 H +1) +#25825000 +0) +#25831250 +b1111 H +1) +#25837500 +0) +#25843750 +b10000 H +1) +#25850000 +0) +#25856250 +b10001 H +1) +#25862500 +0) +#25868750 +b10010 H +1) +#25875000 +0) +#25881250 +b10011 H +1) +#25887500 +0) +#25893750 +b1 P +b0 H +1) +#25900000 +0) +#25906250 +b1 H +1) +#25912500 +0) +#25918750 +b10 H +1) +#25925000 +0) +#25931250 +b11 H +1) +#25937500 +0) +#25943750 +b100 H +1) +#25950000 +0) +#25956250 +b101 H +1) +#25962500 +0) +#25968750 +b110 H +1) +#25975000 +0) +#25981250 +b111 H +1) +#25987500 +0) +#25993750 +b1000 H +1) +#26000000 +0) +#26006250 +b1001 H +1) +#26012500 +0) +#26018750 +b1010 H +1) +#26025000 +0) +#26031250 +b1011 H +1) +#26037500 +0) +#26043750 +b1100 H +1) +#26050000 +0) +#26056250 +b1101 H +1) +#26062500 +0) +#26068750 +b1110 H +1) +#26075000 +0) +#26081250 +b1111 H +1) +#26087500 +0) +#26093750 +b10000 H +1) +#26100000 +0) +#26106250 +b10001 H +1) +#26112500 +0) +#26118750 +b10010 H +1) +#26125000 +0) +#26131250 +b10011 H +1) +#26137500 +0) +#26143750 +b1011010 M +1. +b0 H +1) +#26150000 +0) +#26156250 +b1 F +b1 H +1) +#26162500 +0) +#26168750 +b11 F +b10 H +1) +#26175000 +0) +#26181250 +1: +1< +b111 F +b11 H +1) +#26187500 +0) +#26193750 +0: +b111 ? +b1001011 D +1E +b100 H +1) +#26200000 +0) +#26206250 +b101 H +1) +#26212500 +0) +#26218750 +b110 H +1) +#26225000 +0) +#26231250 +b111 H +1) +#26237500 +0) +#26243750 +b1000 H +1) +#26250000 +0) +#26256250 +b1001 H +1) +#26262500 +0) +#26268750 +b1010 H +1) +#26275000 +0) +#26281250 +b1011 H +1) +#26287500 +0) +#26293750 +b1100 H +1) +#26300000 +0) +#26306250 +b1101 H +1) +#26312500 +0) +#26318750 +b1110 H +1) +#26325000 +0) +#26331250 +b1111 H +1) +#26337500 +0) +#26343750 +b10000 H +1) +#26350000 +0) +#26356250 +b10001 H +1) +#26362500 +0) +#26368750 +b10010 H +1) +#26375000 +0) +#26381250 +b10011 H +1) +#26387500 +0) +#26393750 +0. +b0 H +1) +#26400000 +0) +#26406250 +b110 F +b1 H +1) +#26412500 +0) +#26418750 +b100 F +b10 H +1) +#26425000 +0) +#26431250 +19 +0< +b0 F +b11 H +1) +#26437500 +0) +#26443750 +09 +0$ +b0 G +0E +b100 H +1) +#26450000 +0) +#26456250 +b101 H +1) +#26462500 +0) +#26468750 +b110 H +1) +#26475000 +0) +#26481250 +b111 H +1) +#26487500 +0) +#26493750 +b1000 H +1) +#26500000 +0) +#26506250 +b1001 H +1) +#26512500 +0) +#26518750 +b1010 H +1) +#26525000 +0) +#26531250 +b1011 H +1) +#26537500 +0) +#26543750 +b1100 H +1) +#26550000 +0) +#26556250 +b1101 H +1) +#26562500 +0) +#26568750 +b1110 H +1) +#26575000 +0) +#26581250 +b1111 H +1) +#26587500 +0) +#26593750 +b10000 H +1) +#26600000 +0) +#26606250 +b10001 H +1) +#26612500 +0) +#26618750 +b10010 H +1) +#26625000 +0) +#26631250 +b10011 H +1) +#26637500 +0) +#26643750 +0+ +b0 P +b0 H +1) +#26650000 +0) +#26656250 +b110 B +b1 H +1) +#26662500 +0) +#26668750 +b100 B +b10 H +1) +#26675000 +0) +#26681250 +0= +b0 B +b11 H +1) +#26687500 +0) +#26693750 +b100 H +1) +#26700000 +0) +#26706250 +b101 H +1) +#26712500 +0) +#26718750 +b110 H +1) +#26725000 +0) +#26731250 +b111 H +1) +#26737500 +0) +#26743750 +b1000 H +1) +#26750000 +0) +#26756250 +b1001 H +1) +#26762500 +0) +#26768750 +b1010 H +1) +#26775000 +0) +#26781250 +b1011 H +1) +#26787500 +0) +#26793750 +b1100 H +1) +#26800000 +0) +#26806250 +b1101 H +1) +#26812500 +0) +#26818750 +b1110 H +1) +#26825000 +0) +#26831250 +b1111 H +1) +#26837500 +0) +#26843750 +b10000 H +1) +#26850000 +0) +#26856250 +b10001 H +1) +#26862500 +0) +#26868750 +b10010 H +1) +#26875000 +0) +#26881250 +b10011 H +1) +#26887500 +0) +#26893750 +1. +b0 H +1) +#26900000 +0) +#26906250 +b1 F +b1 H +1) +#26912500 +0) +#26918750 +b11 F +b10 H +1) +#26925000 +0) +#26931250 +1: +1< +b111 F +b11 H +1) +#26937500 +0) +#26943750 +0: +1" +b10010110 # +b10010110 C +b0 ? +b10010110 D +1E +b100 H +1) +#26950000 +0) +#26956250 +b0 / +b0 ; +0" +b1 5 +b1 4 +b101 H +1) +#26962500 +0) +#26968750 +b110 H +1) +#26975000 +0) +#26981250 +b111 H +1) +#26987500 +0) +#26993750 +b1000 H +1) +#27000000 +0) +#27006250 +b1001 H +1) +#27012500 +0) +#27018750 +b1010 H +1) +#27025000 +0) +#27031250 +b1011 H +1) +#27037500 +0) +#27043750 +b1100 H +1) +#27050000 +0) +#27056250 +b1101 H +1) +#27062500 +0) +#27068750 +b1110 H +1) +#27075000 +0) +#27081250 +b1111 H +1) +#27087500 +0) +#27093750 +b10000 H +1) +#27100000 +0) +#27106250 +b10001 H +1) +#27112500 +0) +#27118750 +b10010 H +1) +#27125000 +0) +#27131250 +b10011 H +1) +#27137500 +0) +#27143750 +0. +b0 H +1) +#27150000 +0) +#27156250 +b110 F +b1 H +1) +#27162500 +0) +#27168750 +b100 F +b10 H +1) +#27175000 +0) +#27181250 +19 +0< +b0 F +b11 H +1) +#27187500 +0) +#27193750 +09 +1! +0E +b100 H +1) +#27200000 +0) +#27206250 +0! +b101 H +1) +#27212500 +0) +#27218750 +b110 H +1) +#27225000 +0) +#27231250 +b111 H +1) +#27237500 +0) +#27243750 +b1000 H +1) +#27250000 +0) +#27256250 +b1001 H +1) +#27262500 +0) +#27268750 +b1010 H +1) +#27275000 +0) +#27281250 +b1011 H +1) +#27287500 +0) +#27293750 +b1100 H +1) +#27300000 +0) +#27306250 +b1101 H +1) +#27312500 +0) +#27318750 +b1110 H +1) +#27325000 +0) +#27331250 +b1111 H +1) +#27337500 +0) +#27343750 +b10000 H +1) +#27350000 +0) +#27356250 +b10001 H +1) +#27362500 +0) +#27368750 +b10010 H +1) +#27375000 +0) +#27381250 +b10011 H +1) +#27387500 +0) +#27393750 +b101000 I +b10100 K +b1011010 - +b1011010 L +b11111111111111111111111111111111 P +b0 H +1) +#27400000 +0) +#27406250 +b1 H +1) +#27412500 +0) +#27418750 +b10 H +1) +#27425000 +0) +#27431250 +b11 H +1) +#27437500 +0) +#27443750 +b100 H +1) +#27450000 +0) +#27456250 +b101 H +1) +#27462500 +0) +#27468750 +b110 H +1) +#27475000 +0) +#27481250 +b111 H +1) +#27487500 +0) +#27493750 +b1000 H +1) +#27500000 +0) +#27506250 +b1001 H +1) +#27512500 +0) +#27518750 +b1010 H +1) +#27525000 +0) +#27531250 +b1011 H +1) +#27537500 +0) +#27543750 +b1100 H +1) +#27550000 +0) +#27556250 +b1101 H +1) +#27562500 +0) +#27568750 +b1110 H +1) +#27575000 +0) +#27581250 +b1111 H +1) +#27587500 +0) +#27593750 +b10000 H +1) +#27600000 +0) +#27606250 +b10001 H +1) +#27612500 +0) +#27618750 +b10010 H +1) +#27625000 +0) +#27631250 +b10011 H +1) +#27637500 +0) +#27643750 +b10100 H +1) +#27650000 +0) +#27656250 +b10101 H +1) +#27662500 +0) +#27668750 +b10110 H +1) +#27675000 +0) +#27681250 +b10111 H +1) +#27687500 +0) +#27693750 +b11000 H +1) +#27700000 +0) +#27706250 +b11001 H +1) +#27712500 +0) +#27718750 +b11010 H +1) +#27725000 +0) +#27731250 +b11011 H +1) +#27737500 +0) +#27743750 +b11100 H +1) +#27750000 +0) +#27756250 +b11101 H +1) +#27762500 +0) +#27768750 +b11110 H +1) +#27775000 +0) +#27781250 +b11111 H +1) +#27787500 +0) +#27793750 +b100000 H +1) +#27800000 +0) +#27806250 +b100001 H +1) +#27812500 +0) +#27818750 +b100010 H +1) +#27825000 +0) +#27831250 +b100011 H +1) +#27837500 +0) +#27843750 +b100100 H +1) +#27850000 +0) +#27856250 +b100101 H +1) +#27862500 +0) +#27868750 +b100110 H +1) +#27875000 +0) +#27881250 +b100111 H +1) +#27887500 +0) +#27893750 +1* +b0 H +1) +#27900000 +0) +#27906250 +b1 A +b1 H +1) +#27912500 +0) +#27918750 +b11 A +b10 H +1) +#27925000 +0) +#27931250 +0' +18 +1> +b111 A +b11 H +1) +#27937500 +0) +#27943750 +08 +1& +1@ +b100 H +1) +#27950000 +0) +#27956250 +0& +b1 0 +b101 H +1) +#27962500 +0) +#27968750 +b110 H +1) +#27975000 +0) +#27981250 +b111 H +1) +#27987500 +0) +#27993750 +b1000 H +1) +#28000000 +0) +#28006250 +b1001 H +1) +#28012500 +0) +#28018750 +b1010 H +1) +#28025000 +0) +#28031250 +b1011 H +1) +#28037500 +0) +#28043750 +b1100 H +1) +#28050000 +0) +#28056250 +b1101 H +1) +#28062500 +0) +#28068750 +b1110 H +1) +#28075000 +0) +#28081250 +b1111 H +1) +#28087500 +0) +#28093750 +b10000 H +1) +#28100000 +0) +#28106250 +b10001 H +1) +#28112500 +0) +#28118750 +b10010 H +1) +#28125000 +0) +#28131250 +b10011 H +1) +#28137500 +0) +#28143750 +b10100 H +1) +#28150000 +0) +#28156250 +b10101 H +1) +#28162500 +0) +#28168750 +b10110 H +1) +#28175000 +0) +#28181250 +b10111 H +1) +#28187500 +0) +#28193750 +b11000 H +1) +#28200000 +0) +#28206250 +b11001 H +1) +#28212500 +0) +#28218750 +b11010 H +1) +#28225000 +0) +#28231250 +b11011 H +1) +#28237500 +0) +#28243750 +b11100 H +1) +#28250000 +0) +#28256250 +b11101 H +1) +#28262500 +0) +#28268750 +b11110 H +1) +#28275000 +0) +#28281250 +b11111 H +1) +#28287500 +0) +#28293750 +b100000 H +1) +#28300000 +0) +#28306250 +b100001 H +1) +#28312500 +0) +#28318750 +b100010 H +1) +#28325000 +0) +#28331250 +b100011 H +1) +#28337500 +0) +#28343750 +b100100 H +1) +#28350000 +0) +#28356250 +b100101 H +1) +#28362500 +0) +#28368750 +b100110 H +1) +#28375000 +0) +#28381250 +b100111 H +1) +#28387500 +0) +#28393750 +b101000 H +1) +#28400000 +0) +#28406250 +1) +#28412500 +0) +#28418750 +1) diff --git a/sim/spi_slave_sim b/sim/spi_slave_sim new file mode 100755 index 0000000..75a4e37 --- /dev/null +++ b/sim/spi_slave_sim @@ -0,0 +1,1006 @@ +#! /opt/homebrew/Cellar/icarus-verilog/13.0/bin/vvp +:ivl_version "13.0 (stable)" "(v13_0)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision - 12; +:vpi_module "/opt/homebrew/Cellar/icarus-verilog/13.0/lib/ivl/system.vpi"; +:vpi_module "/opt/homebrew/Cellar/icarus-verilog/13.0/lib/ivl/vhdl_sys.vpi"; +:vpi_module "/opt/homebrew/Cellar/icarus-verilog/13.0/lib/ivl/vhdl_textio.vpi"; +:vpi_module "/opt/homebrew/Cellar/icarus-verilog/13.0/lib/ivl/v2005_math.vpi"; +:vpi_module "/opt/homebrew/Cellar/icarus-verilog/13.0/lib/ivl/va_math.vpi"; +:vpi_module "/opt/homebrew/Cellar/icarus-verilog/13.0/lib/ivl/v2009.vpi"; +S_0x104e57530 .scope package, "$unit" "$unit" 2 1; + .timescale 0 0; +S_0x104e576b0 .scope module, "tb" "tb" 3 15; + .timescale -9 -12; +P_0x88ec50e80 .param/real "CLK_PERIOD" 1 3 17, Cr; value=12.5000 +v0x88f0899a0_0 .var "clk", 0 0; +v0x88f089a40_0 .net "cs_active", 0 0, L_0x104e5fa50; 1 drivers +v0x88f089ae0_0 .net "cs_end", 0 0, v0x88f0885a0_0; 1 drivers +v0x88f089b80_0 .var/i "cs_end_count", 31 0; +v0x88f089c20_0 .var "cs_n", 0 0; +v0x88f089cc0_0 .net "cs_start", 0 0, v0x88f088a00_0; 1 drivers +v0x88f089d60_0 .var/i "cs_start_count", 31 0; +v0x88f089e00_0 .var/i "errors", 31 0; +v0x88f089ea0_0 .var/i "errors_before", 31 0; +v0x88f089f40_0 .net "miso", 0 0, v0x88f088aa0_0; 1 drivers +v0x88f089fe0 .array "miso_capture", 7 0, 7 0; +v0x88f08a080_0 .var "mosi", 0 0; +v0x88f08a120_0 .var "rst", 0 0; +v0x88f08a1c0_0 .net "rx_byte", 7 0, v0x88f088dc0_0; 1 drivers +v0x88f08a260 .array "rx_log", 7 0, 7 0; +v0x88f08a300_0 .var/i "rx_log_len", 31 0; +v0x88f08a3a0_0 .var "rx_tmp", 7 0; +v0x88f08a440_0 .net "rx_valid", 0 0, v0x88f088f00_0; 1 drivers +v0x88f08a4e0_0 .var "sclk", 0 0; +v0x88f08a580_0 .var "tx_byte", 7 0; +v0x88f08a620_0 .net "tx_byte_req", 0 0, v0x88f089400_0; 1 drivers +v0x88f08a6c0 .array "tx_queue", 7 0, 7 0; +v0x88f08a760_0 .var/i "tx_queue_idx", 31 0; +v0x88f08a800_0 .var/i "tx_queue_len", 31 0; +E_0x88ec46000 .event negedge, v0x88f088460_0; +v0x88f08a6c0_0 .array/port v0x88f08a6c0, 0; +v0x88f08a6c0_1 .array/port v0x88f08a6c0, 1; +E_0x88ec46040/0 .event anyedge, v0x88f08a760_0, v0x88f08a800_0, v0x88f08a6c0_0, v0x88f08a6c0_1; +v0x88f08a6c0_2 .array/port v0x88f08a6c0, 2; +v0x88f08a6c0_3 .array/port v0x88f08a6c0, 3; +v0x88f08a6c0_4 .array/port v0x88f08a6c0, 4; +v0x88f08a6c0_5 .array/port v0x88f08a6c0, 5; +E_0x88ec46040/1 .event anyedge, v0x88f08a6c0_2, v0x88f08a6c0_3, v0x88f08a6c0_4, v0x88f08a6c0_5; +v0x88f08a6c0_6 .array/port v0x88f08a6c0, 6; +v0x88f08a6c0_7 .array/port v0x88f08a6c0, 7; +E_0x88ec46040/2 .event anyedge, v0x88f08a6c0_6, v0x88f08a6c0_7; +E_0x88ec46040 .event/or E_0x88ec46040/0, E_0x88ec46040/1, E_0x88ec46040/2; +S_0x104e4e9b0 .scope task, "clk_wait" "clk_wait" 3 141, 3 141 0, S_0x104e576b0; + .timescale -9 -12; +v0x88f088000_0 .var/i "k", 31 0; +v0x88f0880a0_0 .var/i "n", 31 0; +E_0x88ec46080 .event posedge, v0x88f088460_0; +TD_tb.clk_wait ; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f088000_0, 0, 32; +T_0.0 ; Top of for-loop + %load/vec4 v0x88f088000_0; + %load/vec4 v0x88f0880a0_0; + %cmp/s; + %jmp/0xz T_0.1, 5; + %wait E_0x88ec46080; +T_0.2 ; for-loop step statement + %load/vec4 v0x88f088000_0; + %addi 1, 0, 32; + %store/vec4 v0x88f088000_0, 0, 32; + %jmp T_0.0; +T_0.1 ; for-loop exit label + %end; +S_0x104e4eb30 .scope module, "dut" "spi_slave" 3 40, 4 21 0, S_0x104e576b0; + .timescale -9 -12; + .port_info 0 /INPUT 1 "clk"; + .port_info 1 /INPUT 1 "rst"; + .port_info 2 /INPUT 1 "sclk"; + .port_info 3 /INPUT 1 "mosi"; + .port_info 4 /OUTPUT 1 "miso"; + .port_info 5 /INPUT 1 "cs_n"; + .port_info 6 /OUTPUT 8 "rx_byte"; + .port_info 7 /OUTPUT 1 "rx_valid"; + .port_info 8 /INPUT 8 "tx_byte"; + .port_info 9 /OUTPUT 1 "tx_byte_req"; + .port_info 10 /OUTPUT 1 "cs_active"; + .port_info 11 /OUTPUT 1 "cs_start"; + .port_info 12 /OUTPUT 1 "cs_end"; +L_0x104e64420 .functor NOT 1, v0x88f0890e0_0, C4<0>, C4<0>, C4<0>; +L_0x104e63a20 .functor AND 1, L_0x88f068000, L_0x104e64420, C4<1>, C4<1>; +L_0x104e4ecb0 .functor NOT 1, L_0x88f068000, C4<0>, C4<0>, C4<0>; +L_0x104e5ee20 .functor AND 1, L_0x104e4ecb0, v0x88f0890e0_0, C4<1>, C4<1>; +L_0x104e51730 .functor NOT 1, L_0x88f068140, C4<0>, C4<0>, C4<0>; +L_0x104e661a0 .functor AND 1, L_0x104e51730, v0x88f088780_0, C4<1>, C4<1>; +L_0x104e65920 .functor NOT 1, v0x88f088780_0, C4<0>, C4<0>, C4<0>; +L_0x104e5f9e0 .functor AND 1, L_0x88f068140, L_0x104e65920, C4<1>, C4<1>; +L_0x104e5fa50 .functor NOT 1, L_0x88f068140, C4<0>, C4<0>, C4<0>; +v0x88f088140_0 .net *"_ivl_10", 0 0, L_0x104e4ecb0; 1 drivers +v0x88f0881e0_0 .net *"_ivl_14", 0 0, L_0x104e51730; 1 drivers +v0x88f088280_0 .net *"_ivl_18", 0 0, L_0x104e65920; 1 drivers +v0x88f088320_0 .net *"_ivl_6", 0 0, L_0x104e64420; 1 drivers +v0x88f0883c0_0 .var "bit_count", 2 0; +v0x88f088460_0 .net "clk", 0 0, v0x88f0899a0_0; 1 drivers +v0x88f088500_0 .net "cs_active", 0 0, L_0x104e5fa50; alias, 1 drivers +v0x88f0885a0_0 .var "cs_end", 0 0; +v0x88f088640_0 .net "cs_fell", 0 0, L_0x104e661a0; 1 drivers +v0x88f0886e0_0 .net "cs_n", 0 0, v0x88f089c20_0; 1 drivers +v0x88f088780_0 .var "cs_n_prev", 0 0; +v0x88f088820_0 .net "cs_n_s", 0 0, L_0x88f068140; 1 drivers +v0x88f0888c0_0 .var "cs_n_sync", 2 0; +v0x88f088960_0 .net "cs_rose", 0 0, L_0x104e5f9e0; 1 drivers +v0x88f088a00_0 .var "cs_start", 0 0; +v0x88f088aa0_0 .var "miso", 0 0; +v0x88f088b40_0 .net "mosi", 0 0, v0x88f08a080_0; 1 drivers +v0x88f088be0_0 .net "mosi_s", 0 0, L_0x88f0680a0; 1 drivers +v0x88f088c80_0 .var "mosi_sync", 2 0; +v0x88f088d20_0 .net "rst", 0 0, v0x88f08a120_0; 1 drivers +v0x88f088dc0_0 .var "rx_byte", 7 0; +v0x88f088e60_0 .var "rx_shift", 7 0; +v0x88f088f00_0 .var "rx_valid", 0 0; +v0x88f088fa0_0 .net "sclk", 0 0, v0x88f08a4e0_0; 1 drivers +v0x88f089040_0 .net "sclk_fall", 0 0, L_0x104e5ee20; 1 drivers +v0x88f0890e0_0 .var "sclk_prev", 0 0; +v0x88f089180_0 .net "sclk_rise", 0 0, L_0x104e63a20; 1 drivers +v0x88f089220_0 .net "sclk_s", 0 0, L_0x88f068000; 1 drivers +v0x88f0892c0_0 .var "sclk_sync", 2 0; +v0x88f089360_0 .net "tx_byte", 7 0, v0x88f08a580_0; 1 drivers +v0x88f089400_0 .var "tx_byte_req", 0 0; +v0x88f0894a0_0 .var "tx_shift", 7 0; +L_0x88f068000 .part v0x88f0892c0_0, 2, 1; +L_0x88f0680a0 .part v0x88f088c80_0, 2, 1; +L_0x88f068140 .part v0x88f0888c0_0, 2, 1; +S_0x104e641a0 .scope task, "spi_begin" "spi_begin" 3 150, 3 150 0, S_0x104e576b0; + .timescale -9 -12; +v0x88f089540_0 .var/i "half_bit_cycles", 31 0; +TD_tb.spi_begin ; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f089c20_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a4e0_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a080_0, 0, 1; + %load/vec4 v0x88f089540_0; + %muli 2, 0, 32; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f089c20_0, 0, 1; + %load/vec4 v0x88f089540_0; + %muli 2, 0, 32; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; + %end; +S_0x104e63720 .scope task, "spi_end" "spi_end" 3 162, 3 162 0, S_0x104e576b0; + .timescale -9 -12; +v0x88f0895e0_0 .var/i "half_bit_cycles", 31 0; +TD_tb.spi_end ; + %load/vec4 v0x88f0895e0_0; + %muli 2, 0, 32; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f089c20_0, 0, 1; + %load/vec4 v0x88f0895e0_0; + %muli 2, 0, 32; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; + %end; +S_0x104e638a0 .scope task, "spi_xfer_byte" "spi_xfer_byte" 3 171, 3 171 0, S_0x104e576b0; + .timescale -9 -12; +v0x88f089680_0 .var/i "half_bit_cycles", 31 0; +v0x88f089720_0 .var/i "i", 31 0; +v0x88f0897c0_0 .var "rx", 7 0; +v0x88f089860_0 .var "rx_acc", 7 0; +v0x88f089900_0 .var "tx", 7 0; +TD_tb.spi_xfer_byte ; + %pushi/vec4 0, 0, 8; + %store/vec4 v0x88f089860_0, 0, 8; + %pushi/vec4 7, 0, 32; + %store/vec4 v0x88f089720_0, 0, 32; +T_3.3 ; Top of for-loop + %load/vec4 v0x88f089720_0; + %cmpi/s 0, 0, 32; + %flag_inv 5; GE is !LT + %jmp/0xz T_3.4, 5; + %load/vec4 v0x88f089900_0; + %load/vec4 v0x88f089720_0; + %part/s 1; + %store/vec4 v0x88f08a080_0, 0, 1; + %load/vec4 v0x88f089680_0; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f08a4e0_0, 0, 1; + %load/vec4 v0x88f089f40_0; + %ix/getv/s 4, v0x88f089720_0; + %store/vec4 v0x88f089860_0, 4, 1; + %load/vec4 v0x88f089680_0; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a4e0_0, 0, 1; + %load/vec4 v0x88f089680_0; + %store/vec4 v0x88f0880a0_0, 0, 32; + %fork TD_tb.clk_wait, S_0x104e4e9b0; + %join; +T_3.5 ; for-loop step statement + %load/vec4 v0x88f089720_0; + %subi 1, 0, 32; + %store/vec4 v0x88f089720_0, 0, 32; + %jmp T_3.3; +T_3.4 ; for-loop exit label + %load/vec4 v0x88f089860_0; + %store/vec4 v0x88f0897c0_0, 0, 8; + %end; + .scope S_0x104e4eb30; +T_4 ; + %wait E_0x88ec46080; + %load/vec4 v0x88f088d20_0; + %flag_set/vec4 8; + %jmp/0xz T_4.0, 8; + %pushi/vec4 0, 0, 3; + %assign/vec4 v0x88f0892c0_0, 0; + %pushi/vec4 0, 0, 3; + %assign/vec4 v0x88f088c80_0, 0; + %pushi/vec4 7, 0, 3; + %assign/vec4 v0x88f0888c0_0, 0; + %jmp T_4.1; +T_4.0 ; + %load/vec4 v0x88f0892c0_0; + %parti/s 2, 0, 2; + %load/vec4 v0x88f088fa0_0; + %concat/vec4; draw_concat_vec4 + %assign/vec4 v0x88f0892c0_0, 0; + %load/vec4 v0x88f088c80_0; + %parti/s 2, 0, 2; + %load/vec4 v0x88f088b40_0; + %concat/vec4; draw_concat_vec4 + %assign/vec4 v0x88f088c80_0, 0; + %load/vec4 v0x88f0888c0_0; + %parti/s 2, 0, 2; + %load/vec4 v0x88f0886e0_0; + %concat/vec4; draw_concat_vec4 + %assign/vec4 v0x88f0888c0_0, 0; +T_4.1 ; + %jmp T_4; + .thread T_4; + .scope S_0x104e4eb30; +T_5 ; + %wait E_0x88ec46080; + %load/vec4 v0x88f088d20_0; + %flag_set/vec4 8; + %jmp/0xz T_5.0, 8; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f0890e0_0, 0; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x88f088780_0, 0; + %jmp T_5.1; +T_5.0 ; + %load/vec4 v0x88f089220_0; + %assign/vec4 v0x88f0890e0_0, 0; + %load/vec4 v0x88f088820_0; + %assign/vec4 v0x88f088780_0, 0; +T_5.1 ; + %jmp T_5; + .thread T_5; + .scope S_0x104e4eb30; +T_6 ; + %wait E_0x88ec46080; + %load/vec4 v0x88f088d20_0; + %flag_set/vec4 8; + %jmp/0xz T_6.0, 8; + %pushi/vec4 0, 0, 3; + %assign/vec4 v0x88f0883c0_0, 0; + %pushi/vec4 0, 0, 8; + %assign/vec4 v0x88f088e60_0, 0; + %pushi/vec4 0, 0, 8; + %assign/vec4 v0x88f0894a0_0, 0; + %pushi/vec4 0, 0, 8; + %assign/vec4 v0x88f088dc0_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f088f00_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f089400_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f088aa0_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f088a00_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f0885a0_0, 0; + %jmp T_6.1; +T_6.0 ; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f088f00_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f089400_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f088a00_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x88f0885a0_0, 0; + %load/vec4 v0x88f088640_0; + %flag_set/vec4 8; + %jmp/0xz T_6.2, 8; + %pushi/vec4 0, 0, 3; + %assign/vec4 v0x88f0883c0_0, 0; + %load/vec4 v0x88f089360_0; + %assign/vec4 v0x88f0894a0_0, 0; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x88f089400_0, 0; + %load/vec4 v0x88f089360_0; + %parti/s 1, 7, 4; + %assign/vec4 v0x88f088aa0_0, 0; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x88f088a00_0, 0; + %jmp T_6.3; +T_6.2 ; + %load/vec4 v0x88f088960_0; + %flag_set/vec4 8; + %jmp/0xz T_6.4, 8; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x88f0885a0_0, 0; + %jmp T_6.5; +T_6.4 ; + %load/vec4 v0x88f088500_0; + %flag_set/vec4 8; + %jmp/0xz T_6.6, 8; + %load/vec4 v0x88f089180_0; + %flag_set/vec4 8; + %jmp/0xz T_6.8, 8; + %load/vec4 v0x88f088e60_0; + %parti/s 7, 0, 2; + %load/vec4 v0x88f088be0_0; + %concat/vec4; draw_concat_vec4 + %assign/vec4 v0x88f088e60_0, 0; + %load/vec4 v0x88f0883c0_0; + %cmpi/e 7, 0, 3; + %jmp/0xz T_6.10, 4; + %pushi/vec4 0, 0, 3; + %assign/vec4 v0x88f0883c0_0, 0; + %load/vec4 v0x88f088e60_0; + %parti/s 7, 0, 2; + %load/vec4 v0x88f088be0_0; + %concat/vec4; draw_concat_vec4 + %assign/vec4 v0x88f088dc0_0, 0; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x88f088f00_0, 0; + %jmp T_6.11; +T_6.10 ; + %load/vec4 v0x88f0883c0_0; + %addi 1, 0, 3; + %assign/vec4 v0x88f0883c0_0, 0; +T_6.11 ; + %jmp T_6.9; +T_6.8 ; + %load/vec4 v0x88f089040_0; + %flag_set/vec4 8; + %jmp/0xz T_6.12, 8; + %load/vec4 v0x88f0883c0_0; + %cmpi/e 0, 0, 3; + %jmp/0xz T_6.14, 4; + %load/vec4 v0x88f089360_0; + %assign/vec4 v0x88f0894a0_0, 0; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x88f089400_0, 0; + %load/vec4 v0x88f089360_0; + %parti/s 1, 7, 4; + %assign/vec4 v0x88f088aa0_0, 0; + %jmp T_6.15; +T_6.14 ; + %load/vec4 v0x88f0894a0_0; + %parti/s 7, 0, 2; + %concati/vec4 0, 0, 1; + %assign/vec4 v0x88f0894a0_0, 0; + %load/vec4 v0x88f0894a0_0; + %parti/s 1, 6, 4; + %assign/vec4 v0x88f088aa0_0, 0; +T_6.15 ; +T_6.12 ; +T_6.9 ; +T_6.6 ; +T_6.5 ; +T_6.3 ; +T_6.1 ; + %jmp T_6; + .thread T_6; + .scope S_0x104e576b0; +T_7 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f0899a0_0, 0, 1; +T_7.0 ; + %delay 6250, 0; + %load/vec4 v0x88f0899a0_0; + %inv; + %store/vec4 v0x88f0899a0_0, 0, 1; + %jmp T_7.0; +T_7.1 ; + %end; + .thread T_7; + .scope S_0x104e576b0; +T_8 ; + %wait E_0x88ec46080; + %load/vec4 v0x88f08a120_0; + %flag_set/vec4 8; + %jmp/0xz T_8.0, 8; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x88f08a760_0, 0; + %jmp T_8.1; +T_8.0 ; + %load/vec4 v0x88f08a440_0; + %flag_set/vec4 8; + %jmp/0xz T_8.2, 8; + %load/vec4 v0x88f08a760_0; + %load/vec4 v0x88f08a800_0; + %cmp/s; + %jmp/0xz T_8.4, 5; + %load/vec4 v0x88f08a760_0; + %addi 1, 0, 32; + %assign/vec4 v0x88f08a760_0, 0; +T_8.4 ; +T_8.2 ; +T_8.1 ; + %jmp T_8; + .thread T_8; + .scope S_0x104e576b0; +T_9 ; + %wait E_0x88ec46040; + %load/vec4 v0x88f08a760_0; + %load/vec4 v0x88f08a800_0; + %cmp/s; + %flag_mov 8, 5; + %jmp/0 T_9.0, 8; + %ix/getv/s 4, v0x88f08a760_0; + %load/vec4a v0x88f08a6c0, 4; + %jmp/1 T_9.1, 8; +T_9.0 ; End of true expr. + %pushi/vec4 0, 0, 8; + %jmp/0 T_9.1, 8; + ; End of false expr. + %blend; +T_9.1; + %store/vec4 v0x88f08a580_0, 0, 8; + %jmp T_9; + .thread T_9, $push; + .scope S_0x104e576b0; +T_10 ; + %wait E_0x88ec46080; + %load/vec4 v0x88f08a120_0; + %flag_set/vec4 8; + %jmp/0xz T_10.0, 8; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x88f08a300_0, 0; + %jmp T_10.1; +T_10.0 ; + %load/vec4 v0x88f08a440_0; + %flag_set/vec4 8; + %jmp/0xz T_10.2, 8; + %load/vec4 v0x88f08a1c0_0; + %ix/getv/s 3, v0x88f08a300_0; + %ix/load 4, 0, 0; Constant delay + %assign/vec4/a/d v0x88f08a260, 0, 4; + %load/vec4 v0x88f08a300_0; + %addi 1, 0, 32; + %assign/vec4 v0x88f08a300_0, 0; +T_10.2 ; +T_10.1 ; + %jmp T_10; + .thread T_10; + .scope S_0x104e576b0; +T_11 ; + %wait E_0x88ec46080; + %load/vec4 v0x88f08a120_0; + %flag_set/vec4 8; + %jmp/0xz T_11.0, 8; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x88f089d60_0, 0; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x88f089b80_0, 0; + %jmp T_11.1; +T_11.0 ; + %load/vec4 v0x88f089cc0_0; + %flag_set/vec4 8; + %jmp/0xz T_11.2, 8; + %load/vec4 v0x88f089d60_0; + %addi 1, 0, 32; + %assign/vec4 v0x88f089d60_0, 0; +T_11.2 ; + %load/vec4 v0x88f089ae0_0; + %flag_set/vec4 8; + %jmp/0xz T_11.4, 8; + %load/vec4 v0x88f089b80_0; + %addi 1, 0, 32; + %assign/vec4 v0x88f089b80_0, 0; +T_11.4 ; +T_11.1 ; + %jmp T_11; + .thread T_11; + .scope S_0x104e576b0; +T_12 ; + %vpi_call/w 3 202 "$dumpfile", "sim/spi_slave.vcd" {0 0 0}; + %vpi_call/w 3 203 "$dumpvars", 32'sb00000000000000000000000000000000, S_0x104e576b0 {0 0 0}; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f089c20_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a4e0_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a080_0, 0, 1; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f08a800_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f08a300_0, 0, 32; + %pushi/vec4 5, 0, 32; +T_12.0 %dup/vec4; + %cmpi/s 0, 0, 32; + %jmp/1xz T_12.1, 5; + %jmp/1 T_12.1, 4; + %subi 1, 0, 32; + %wait E_0x88ec46080; + %jmp T_12.0; +T_12.1 ; + %pop/vec4 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %pushi/vec4 5, 0, 32; +T_12.2 %dup/vec4; + %cmpi/s 0, 0, 32; + %jmp/1xz T_12.3, 5; + %jmp/1 T_12.3, 4; + %subi 1, 0, 32; + %wait E_0x88ec46080; + %jmp T_12.2; +T_12.3 ; + %pop/vec4 1; + %vpi_call/w 3 217 "$display", "\000" {0 0 0}; + %vpi_call/w 3 218 "$display", "========================================" {0 0 0}; + %vpi_call/w 3 219 "$display", "SPI_SLAVE PHYSICAL LAYER TEST" {0 0 0}; + %vpi_call/w 3 220 "$display", "========================================" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %store/vec4 v0x88f089ea0_0, 0, 32; + %pushi/vec4 60, 0, 8; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 1, 0, 32; + %store/vec4 v0x88f08a800_0, 0, 32; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089540_0, 0, 32; + %fork TD_tb.spi_begin, S_0x104e641a0; + %join; + %pushi/vec4 165, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f0895e0_0, 0, 32; + %fork TD_tb.spi_end, S_0x104e63720; + %join; + %wait E_0x88ec46080; + %wait E_0x88ec46080; + %vpi_call/w 3 238 "$display", "\000" {0 0 0}; + %vpi_call/w 3 239 "$display", "TEST 1: single byte" {0 0 0}; + %vpi_call/w 3 240 "$display", " MOSI sent = 0xA5, slave rx_byte = 0x%02x (expect 0xA5)", &A {0 0 0}; + %vpi_call/w 3 241 "$display", " MISO sent = 0x3C, master received = 0x%02x (expect 0x3C)", v0x88f08a3a0_0 {0 0 0}; + %vpi_call/w 3 242 "$display", " cs_start pulses = %0d (expect 1), cs_end pulses = %0d (expect 1)", v0x88f089d60_0, v0x88f089b80_0 {0 0 0}; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 165, 0, 8; + %jmp/0xz T_12.4, 6; + %vpi_call/w 3 245 "$display", " FAIL: rx_byte mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.4 ; + %load/vec4 v0x88f08a3a0_0; + %cmpi/ne 60, 0, 8; + %jmp/0xz T_12.6, 6; + %vpi_call/w 3 246 "$display", " FAIL: MISO readback mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.6 ; + %load/vec4 v0x88f089d60_0; + %cmpi/ne 1, 0, 32; + %jmp/0xz T_12.8, 6; + %vpi_call/w 3 247 "$display", " FAIL: cs_start count" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.8 ; + %load/vec4 v0x88f089b80_0; + %cmpi/ne 1, 0, 32; + %jmp/0xz T_12.10, 6; + %vpi_call/w 3 248 "$display", " FAIL: cs_end count" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.10 ; + %load/vec4 v0x88f089e00_0; + %load/vec4 v0x88f089ea0_0; + %cmp/e; + %jmp/0xz T_12.12, 4; + %vpi_call/w 3 249 "$display", " PASS" {0 0 0}; +T_12.12 ; + %wait E_0x88ec46000; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %wait E_0x88ec46000; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %wait E_0x88ec46080; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f08a300_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089d60_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089b80_0, 0, 32; + %load/vec4 v0x88f089e00_0; + %store/vec4 v0x88f089ea0_0, 0, 32; + %pushi/vec4 222, 0, 8; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 173, 0, 8; + %ix/load 4, 1, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 190, 0, 8; + %ix/load 4, 2, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 239, 0, 8; + %ix/load 4, 3, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 4, 0, 32; + %store/vec4 v0x88f08a800_0, 0, 32; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089540_0, 0, 32; + %fork TD_tb.spi_begin, S_0x104e641a0; + %join; + %pushi/vec4 17, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %load/vec4 v0x88f08a3a0_0; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f089fe0, 4, 0; + %pushi/vec4 34, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %load/vec4 v0x88f08a3a0_0; + %ix/load 4, 1, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f089fe0, 4, 0; + %pushi/vec4 51, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %load/vec4 v0x88f08a3a0_0; + %ix/load 4, 2, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f089fe0, 4, 0; + %pushi/vec4 68, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %load/vec4 v0x88f08a3a0_0; + %ix/load 4, 3, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f089fe0, 4, 0; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f0895e0_0, 0, 32; + %fork TD_tb.spi_end, S_0x104e63720; + %join; + %wait E_0x88ec46080; + %wait E_0x88ec46080; + %vpi_call/w 3 276 "$display", "\000" {0 0 0}; + %vpi_call/w 3 277 "$display", "TEST 2: multi-byte, one CS period" {0 0 0}; + %vpi_call/w 3 278 "$display", " rx_log = %02x %02x %02x %02x (expect 11 22 33 44)", &A, &A, &A, &A {0 0 0}; + %vpi_call/w 3 280 "$display", " miso = %02x %02x %02x %02x (expect de ad be ef)", &A, &A, &A, &A {0 0 0}; + %vpi_call/w 3 282 "$display", " cs_start pulses = %0d (expect 1), cs_end pulses = %0d (expect 1)", v0x88f089d60_0, v0x88f089b80_0 {0 0 0}; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 17, 0, 8; + %jmp/1 T_12.18, 6; + %flag_mov 8, 6; + %ix/load 4, 1, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 34, 0, 8; + %flag_or 6, 8; +T_12.18; + %jmp/1 T_12.17, 6; + %flag_mov 8, 6; + %ix/load 4, 2, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 51, 0, 8; + %flag_or 6, 8; +T_12.17; + %jmp/1 T_12.16, 6; + %flag_mov 8, 6; + %ix/load 4, 3, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 68, 0, 8; + %flag_or 6, 8; +T_12.16; + %jmp/0xz T_12.14, 6; + %vpi_call/w 3 287 "$display", " FAIL: rx sequence mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.14 ; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f089fe0, 4; + %cmpi/ne 222, 0, 8; + %jmp/1 T_12.23, 6; + %flag_mov 8, 6; + %ix/load 4, 1, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f089fe0, 4; + %cmpi/ne 173, 0, 8; + %flag_or 6, 8; +T_12.23; + %jmp/1 T_12.22, 6; + %flag_mov 8, 6; + %ix/load 4, 2, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f089fe0, 4; + %cmpi/ne 190, 0, 8; + %flag_or 6, 8; +T_12.22; + %jmp/1 T_12.21, 6; + %flag_mov 8, 6; + %ix/load 4, 3, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f089fe0, 4; + %cmpi/ne 239, 0, 8; + %flag_or 6, 8; +T_12.21; + %jmp/0xz T_12.19, 6; + %vpi_call/w 3 292 "$display", " FAIL: MISO sequence mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.19 ; + %load/vec4 v0x88f089d60_0; + %cmpi/ne 1, 0, 32; + %jmp/0xz T_12.24, 6; + %vpi_call/w 3 295 "$display", " FAIL: cs_start count" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.24 ; + %load/vec4 v0x88f089b80_0; + %cmpi/ne 1, 0, 32; + %jmp/0xz T_12.26, 6; + %vpi_call/w 3 296 "$display", " FAIL: cs_end count" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.26 ; + %load/vec4 v0x88f089e00_0; + %load/vec4 v0x88f089ea0_0; + %cmp/e; + %jmp/0xz T_12.28, 4; + %vpi_call/w 3 297 "$display", " PASS" {0 0 0}; +T_12.28 ; + %wait E_0x88ec46000; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %wait E_0x88ec46000; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %wait E_0x88ec46080; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f08a300_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089d60_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089b80_0, 0, 32; + %load/vec4 v0x88f089e00_0; + %store/vec4 v0x88f089ea0_0, 0, 32; + %pushi/vec4 1, 0, 8; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 1, 0, 32; + %store/vec4 v0x88f08a800_0, 0, 32; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089540_0, 0, 32; + %fork TD_tb.spi_begin, S_0x104e641a0; + %join; + %pushi/vec4 126, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f0895e0_0, 0, 32; + %fork TD_tb.spi_end, S_0x104e63720; + %join; + %pushi/vec4 10, 0, 32; +T_12.30 %dup/vec4; + %cmpi/s 0, 0, 32; + %jmp/1xz T_12.31, 5; + %jmp/1 T_12.31, 4; + %subi 1, 0, 32; + %wait E_0x88ec46080; + %jmp T_12.30; +T_12.31 ; + %pop/vec4 1; + %pushi/vec4 2, 0, 8; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 1, 0, 32; + %store/vec4 v0x88f08a800_0, 0, 32; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089540_0, 0, 32; + %fork TD_tb.spi_begin, S_0x104e641a0; + %join; + %pushi/vec4 129, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %pushi/vec4 8, 0, 32; + %store/vec4 v0x88f0895e0_0, 0, 32; + %fork TD_tb.spi_end, S_0x104e63720; + %join; + %wait E_0x88ec46080; + %wait E_0x88ec46080; + %vpi_call/w 3 325 "$display", "\000" {0 0 0}; + %vpi_call/w 3 326 "$display", "TEST 3: back-to-back transactions" {0 0 0}; + %vpi_call/w 3 327 "$display", " rx_log = %02x %02x (expect 7e 81)", &A, &A {0 0 0}; + %vpi_call/w 3 328 "$display", " cs_start pulses = %0d (expect 2), cs_end pulses = %0d (expect 2)", v0x88f089d60_0, v0x88f089b80_0 {0 0 0}; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 126, 0, 8; + %jmp/1 T_12.34, 6; + %flag_mov 8, 6; + %ix/load 4, 1, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 129, 0, 8; + %flag_or 6, 8; +T_12.34; + %jmp/0xz T_12.32, 6; + %vpi_call/w 3 332 "$display", " FAIL: rx sequence mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.32 ; + %load/vec4 v0x88f089d60_0; + %cmpi/ne 2, 0, 32; + %jmp/0xz T_12.35, 6; + %vpi_call/w 3 335 "$display", " FAIL: cs_start count" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.35 ; + %load/vec4 v0x88f089b80_0; + %cmpi/ne 2, 0, 32; + %jmp/0xz T_12.37, 6; + %vpi_call/w 3 336 "$display", " FAIL: cs_end count" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.37 ; + %load/vec4 v0x88f089e00_0; + %load/vec4 v0x88f089ea0_0; + %cmp/e; + %jmp/0xz T_12.39, 4; + %vpi_call/w 3 337 "$display", " PASS" {0 0 0}; +T_12.39 ; + %wait E_0x88ec46000; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %wait E_0x88ec46000; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x88f08a120_0, 0, 1; + %wait E_0x88ec46080; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f08a300_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089d60_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x88f089b80_0, 0, 32; + %load/vec4 v0x88f089e00_0; + %store/vec4 v0x88f089ea0_0, 0, 32; + %pushi/vec4 90, 0, 8; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %store/vec4a v0x88f08a6c0, 4, 0; + %pushi/vec4 1, 0, 32; + %store/vec4 v0x88f08a800_0, 0, 32; + %pushi/vec4 20, 0, 32; + %store/vec4 v0x88f089540_0, 0, 32; + %fork TD_tb.spi_begin, S_0x104e641a0; + %join; + %pushi/vec4 150, 0, 8; + %store/vec4 v0x88f089900_0, 0, 8; + %pushi/vec4 20, 0, 32; + %store/vec4 v0x88f089680_0, 0, 32; + %fork TD_tb.spi_xfer_byte, S_0x104e638a0; + %join; + %load/vec4 v0x88f0897c0_0; + %store/vec4 v0x88f08a3a0_0, 0, 8; + %pushi/vec4 20, 0, 32; + %store/vec4 v0x88f0895e0_0, 0, 32; + %fork TD_tb.spi_end, S_0x104e63720; + %join; + %wait E_0x88ec46080; + %wait E_0x88ec46080; + %vpi_call/w 3 358 "$display", "\000" {0 0 0}; + %vpi_call/w 3 359 "$display", "TEST 4: slower SCLK (200ns half-period)" {0 0 0}; + %vpi_call/w 3 360 "$display", " rx_byte = 0x%02x (expect 0x96), MISO = 0x%02x (expect 0x5a)", &A, v0x88f08a3a0_0 {0 0 0}; + %ix/load 4, 0, 0; + %flag_set/imm 4, 0; + %load/vec4a v0x88f08a260, 4; + %cmpi/ne 150, 0, 8; + %jmp/0xz T_12.41, 6; + %vpi_call/w 3 363 "$display", " FAIL: rx_byte mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.41 ; + %load/vec4 v0x88f08a3a0_0; + %cmpi/ne 90, 0, 8; + %jmp/0xz T_12.43, 6; + %vpi_call/w 3 364 "$display", " FAIL: MISO readback mismatch" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %addi 1, 0, 32; + %store/vec4 v0x88f089e00_0, 0, 32; +T_12.43 ; + %load/vec4 v0x88f089e00_0; + %load/vec4 v0x88f089ea0_0; + %cmp/e; + %jmp/0xz T_12.45, 4; + %vpi_call/w 3 365 "$display", " PASS" {0 0 0}; +T_12.45 ; + %vpi_call/w 3 367 "$display", "\000" {0 0 0}; + %vpi_call/w 3 368 "$display", "========================================" {0 0 0}; + %load/vec4 v0x88f089e00_0; + %cmpi/e 0, 0, 32; + %jmp/0xz T_12.47, 4; + %vpi_call/w 3 370 "$display", "SPI_SLAVE TEST PASSED" {0 0 0}; + %jmp T_12.48; +T_12.47 ; + %vpi_call/w 3 372 "$display", "SPI_SLAVE TEST FAILED: %0d errors", v0x88f089e00_0 {0 0 0}; +T_12.48 ; + %vpi_call/w 3 373 "$display", "========================================" {0 0 0}; + %vpi_call/w 3 374 "$display", "\000" {0 0 0}; + %vpi_call/w 3 376 "$finish" {0 0 0}; + %end; + .thread T_12; +# The file index is used to find the file name in the following table. +:file_names 5; + "N/A"; + ""; + "-"; + "sim/spi_slave_tb.v"; + "rtl/spi_slave.v"; diff --git a/sim/spi_slave_tb.v b/sim/spi_slave_tb.v new file mode 100644 index 0000000..e861fa8 --- /dev/null +++ b/sim/spi_slave_tb.v @@ -0,0 +1,380 @@ +`timescale 1ns/1ps + +// ================================================================ +// SPI_SLAVE PHYSICAL LAYER TESTBENCH +// +// Bit-bangs a simulated SPI master (Mode 0, MSB-first) against +// rtl/spi_slave.v and checks: +// TEST 1: single-byte transaction (rx_byte/rx_valid, MISO readback) +// TEST 2: multi-byte transaction within one CS-low period +// TEST 3: back-to-back separate transactions (state resets cleanly) +// TEST 4: a slower SPI clock (stresses nothing new, but confirms +// the module isn't implicitly tied to one SCLK/clk ratio) +// ================================================================ + +module tb; + + localparam CLK_PERIOD = 12.5; // 80 MHz system clock + + reg clk; + reg rst; + + initial begin + clk = 1'b0; + forever #(CLK_PERIOD / 2.0) clk = ~clk; + end + + reg sclk; + reg mosi; + wire miso; + reg cs_n; + + wire [7:0] rx_byte; + wire rx_valid; + reg [7:0] tx_byte; + wire tx_byte_req; + wire cs_active; + wire cs_start; + wire cs_end; + + spi_slave dut ( + .clk(clk), + .rst(rst), + + .sclk(sclk), + .mosi(mosi), + .miso(miso), + .cs_n(cs_n), + + .rx_byte(rx_byte), + .rx_valid(rx_valid), + + .tx_byte(tx_byte), + .tx_byte_req(tx_byte_req), + + .cs_active(cs_active), + .cs_start(cs_start), + .cs_end(cs_end) + ); + + // ============================================================ + // tx_byte queue: serves tx_queue[tx_queue_idx] combinationally + // at all times (spi_slave.v prefetches it via tx_byte_req). + // + // The index advances on `rx_valid`, NOT on `tx_byte_req`: + // tx_byte_req fires one extra ("phantom") time after the last + // byte of every transaction (see the contract note in + // rtl/spi_slave.v), while rx_valid fires exactly once per REAL + // byte transferred, in both directions (SPI is full-duplex) -- + // the correct signal to retire one queue entry. + // ============================================================ + + reg [7:0] tx_queue [0:7]; + integer tx_queue_len; + integer tx_queue_idx; + + always @(posedge clk) begin + if (rst) begin + tx_queue_idx <= 0; + end else if (rx_valid) begin + if (tx_queue_idx < tx_queue_len) + tx_queue_idx <= tx_queue_idx + 1; + end + end + + always @(*) begin + tx_byte = (tx_queue_idx < tx_queue_len) ? tx_queue[tx_queue_idx] : 8'h00; + end + + // ============================================================ + // rx capture: record every received byte in order + // ============================================================ + + reg [7:0] rx_log [0:7]; + integer rx_log_len; + + always @(posedge clk) begin + if (rst) begin + rx_log_len <= 0; + end else if (rx_valid) begin + rx_log[rx_log_len] <= rx_byte; + rx_log_len <= rx_log_len + 1; + end + end + + // ============================================================ + // cs_start / cs_end pulse counters + // ============================================================ + + integer cs_start_count; + integer cs_end_count; + + always @(posedge clk) begin + if (rst) begin + cs_start_count <= 0; + cs_end_count <= 0; + end else begin + if (cs_start) cs_start_count <= cs_start_count + 1; + if (cs_end) cs_end_count <= cs_end_count + 1; + end + end + + // ============================================================ + // SPI MASTER BFM (Mode 0, MSB-first, bit-banged) + // + // half_period is in ns; must stay large enough relative to + // CLK_PERIOD for the 2-flop CDC synchronizer in spi_slave.v to + // reliably catch every edge (>= ~3 system clocks per SCLK + // half-period is a safe margin). + // ============================================================ + + reg [7:0] miso_capture [0:7]; + integer miso_capture_len; + + // clk-cycle-counted wait: every SPI edge in this BFM is placed a + // fixed number of `clk` cycles apart, instead of a raw `#ns` + // delay. This keeps the master deterministically phase-aligned + // to the system clock, so the fixed CDC latency of spi_slave.v + // (3-stage synchronizer + 1 cycle for edge detect, ~4 clk + // cycles) always falls comfortably inside the margin instead of + // drifting against it run to run. + task clk_wait; + input integer n; + integer k; + begin + for (k = 0; k < n; k = k + 1) + @(posedge clk); + end + endtask + + task spi_begin; + input integer half_bit_cycles; + begin + cs_n = 1'b1; + sclk = 1'b0; + mosi = 1'b0; + clk_wait(half_bit_cycles * 2); + cs_n = 1'b0; + clk_wait(half_bit_cycles * 2); + end + endtask + + task spi_end; + input integer half_bit_cycles; + begin + clk_wait(half_bit_cycles * 2); + cs_n = 1'b1; + clk_wait(half_bit_cycles * 2); + end + endtask + + task spi_xfer_byte; + input [7:0] tx; + input integer half_bit_cycles; + output [7:0] rx; + integer i; + reg [7:0] rx_acc; + begin + rx_acc = 8'h00; + for (i = 7; i >= 0; i = i - 1) begin + mosi = tx[i]; + clk_wait(half_bit_cycles); + sclk = 1'b1; // rising edge: slave samples MOSI + rx_acc[i] = miso; // master samples MISO (stable since the prior falling edge) + clk_wait(half_bit_cycles); + sclk = 1'b0; // falling edge: slave updates MISO + clk_wait(half_bit_cycles); + end + rx = rx_acc; + end + endtask + + reg [7:0] rx_tmp; + integer errors; + integer errors_before; + + // ============================================================ + // MAIN + // ============================================================ + + initial begin + + $dumpfile("sim/spi_slave.vcd"); + $dumpvars(0, tb); + + rst = 1'b1; + cs_n = 1'b1; + sclk = 1'b0; + mosi = 1'b0; + errors = 0; + tx_queue_len = 0; + rx_log_len = 0; + + repeat (5) @(posedge clk); + rst = 1'b0; + repeat (5) @(posedge clk); + + $display(""); + $display("========================================"); + $display("SPI_SLAVE PHYSICAL LAYER TEST"); + $display("========================================"); + + // -------------------------------------------------------- + // TEST 1: single-byte transaction + // Master sends 0xA5, slave echoes back queued 0x3C. + // -------------------------------------------------------- + + errors_before = errors; + + tx_queue[0] = 8'h3C; + tx_queue_len = 1; + + spi_begin(8); + spi_xfer_byte(8'hA5, 8, rx_tmp); + spi_end(8); + + @(posedge clk); @(posedge clk); + + $display(""); + $display("TEST 1: single byte"); + $display(" MOSI sent = 0xA5, slave rx_byte = 0x%02x (expect 0xA5)", rx_log[0]); + $display(" MISO sent = 0x3C, master received = 0x%02x (expect 0x3C)", rx_tmp); + $display(" cs_start pulses = %0d (expect 1), cs_end pulses = %0d (expect 1)", + cs_start_count, cs_end_count); + + if (rx_log[0] !== 8'hA5) begin $display(" FAIL: rx_byte mismatch"); errors = errors + 1; end + if (rx_tmp !== 8'h3C) begin $display(" FAIL: MISO readback mismatch"); errors = errors + 1; end + if (cs_start_count !== 1) begin $display(" FAIL: cs_start count"); errors = errors + 1; end + if (cs_end_count !== 1) begin $display(" FAIL: cs_end count"); errors = errors + 1; end + if (errors == errors_before) $display(" PASS"); + + // -------------------------------------------------------- + // TEST 2: multi-byte transaction, single CS-low period + // Master sends 0x11, 0x22, 0x33, 0x44. + // Slave echoes back 0xDE, 0xAD, 0xBE, 0xEF. + // -------------------------------------------------------- + + @(negedge clk); rst = 1'b1; @(negedge clk); rst = 1'b0; @(posedge clk); + rx_log_len = 0; cs_start_count = 0; cs_end_count = 0; + errors_before = errors; + + tx_queue[0] = 8'hDE; + tx_queue[1] = 8'hAD; + tx_queue[2] = 8'hBE; + tx_queue[3] = 8'hEF; + tx_queue_len = 4; + + spi_begin(8); + spi_xfer_byte(8'h11, 8, rx_tmp); miso_capture[0] = rx_tmp; + spi_xfer_byte(8'h22, 8, rx_tmp); miso_capture[1] = rx_tmp; + spi_xfer_byte(8'h33, 8, rx_tmp); miso_capture[2] = rx_tmp; + spi_xfer_byte(8'h44, 8, rx_tmp); miso_capture[3] = rx_tmp; + spi_end(8); + + @(posedge clk); @(posedge clk); + + $display(""); + $display("TEST 2: multi-byte, one CS period"); + $display(" rx_log = %02x %02x %02x %02x (expect 11 22 33 44)", + rx_log[0], rx_log[1], rx_log[2], rx_log[3]); + $display(" miso = %02x %02x %02x %02x (expect de ad be ef)", + miso_capture[0], miso_capture[1], miso_capture[2], miso_capture[3]); + $display(" cs_start pulses = %0d (expect 1), cs_end pulses = %0d (expect 1)", + cs_start_count, cs_end_count); + + if (rx_log[0] !== 8'h11 || rx_log[1] !== 8'h22 || + rx_log[2] !== 8'h33 || rx_log[3] !== 8'h44) begin + $display(" FAIL: rx sequence mismatch"); + errors = errors + 1; + end + if (miso_capture[0] !== 8'hDE || miso_capture[1] !== 8'hAD || + miso_capture[2] !== 8'hBE || miso_capture[3] !== 8'hEF) begin + $display(" FAIL: MISO sequence mismatch"); + errors = errors + 1; + end + if (cs_start_count !== 1) begin $display(" FAIL: cs_start count"); errors = errors + 1; end + if (cs_end_count !== 1) begin $display(" FAIL: cs_end count"); errors = errors + 1; end + if (errors == errors_before) $display(" PASS"); + + // -------------------------------------------------------- + // TEST 3: back-to-back separate transactions + // Two independent single-byte transactions; state must + // reset cleanly between them (no leftover bit_count/shift). + // -------------------------------------------------------- + + @(negedge clk); rst = 1'b1; @(negedge clk); rst = 1'b0; @(posedge clk); + rx_log_len = 0; cs_start_count = 0; cs_end_count = 0; + errors_before = errors; + + tx_queue[0] = 8'h01; + tx_queue_len = 1; + spi_begin(8); + spi_xfer_byte(8'h7E, 8, rx_tmp); + spi_end(8); + + repeat (10) @(posedge clk); + + tx_queue[0] = 8'h02; + tx_queue_len = 1; + spi_begin(8); + spi_xfer_byte(8'h81, 8, rx_tmp); + spi_end(8); + + @(posedge clk); @(posedge clk); + + $display(""); + $display("TEST 3: back-to-back transactions"); + $display(" rx_log = %02x %02x (expect 7e 81)", rx_log[0], rx_log[1]); + $display(" cs_start pulses = %0d (expect 2), cs_end pulses = %0d (expect 2)", + cs_start_count, cs_end_count); + + if (rx_log[0] !== 8'h7E || rx_log[1] !== 8'h81) begin + $display(" FAIL: rx sequence mismatch"); + errors = errors + 1; + end + if (cs_start_count !== 2) begin $display(" FAIL: cs_start count"); errors = errors + 1; end + if (cs_end_count !== 2) begin $display(" FAIL: cs_end count"); errors = errors + 1; end + if (errors == errors_before) $display(" PASS"); + + // -------------------------------------------------------- + // TEST 4: slower SPI clock (larger half_period), same + // single-byte check, confirms no hidden dependency on a + // specific SCLK/clk ratio (as long as the CDC margin holds). + // -------------------------------------------------------- + + @(negedge clk); rst = 1'b1; @(negedge clk); rst = 1'b0; @(posedge clk); + rx_log_len = 0; cs_start_count = 0; cs_end_count = 0; + errors_before = errors; + + tx_queue[0] = 8'h5A; + tx_queue_len = 1; + + spi_begin(20); + spi_xfer_byte(8'h96, 20, rx_tmp); + spi_end(20); + + @(posedge clk); @(posedge clk); + + $display(""); + $display("TEST 4: slower SCLK (200ns half-period)"); + $display(" rx_byte = 0x%02x (expect 0x96), MISO = 0x%02x (expect 0x5a)", + rx_log[0], rx_tmp); + + if (rx_log[0] !== 8'h96) begin $display(" FAIL: rx_byte mismatch"); errors = errors + 1; end + if (rx_tmp !== 8'h5A) begin $display(" FAIL: MISO readback mismatch"); errors = errors + 1; end + if (errors == errors_before) $display(" PASS"); + + $display(""); + $display("========================================"); + if (errors == 0) + $display("SPI_SLAVE TEST PASSED"); + else + $display("SPI_SLAVE TEST FAILED: %0d errors", errors); + $display("========================================"); + $display(""); + + $finish; + + end + +endmodule