diff options
148 files changed, 2267 insertions, 18050 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..a12cca79c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +xlnx_auto_* +*.log diff --git a/control_lib/buffer_int.v b/control_lib/buffer_int.v deleted file mode 100644 index c33f2779d..000000000 --- a/control_lib/buffer_int.v +++ /dev/null @@ -1,251 +0,0 @@ - -// FIFO Interface to the 2K buffer RAMs -// Read port is read-acknowledge -// FIXME do we want to be able to interleave reads and writes? - -module buffer_int - #(parameter BUFF_NUM = 0) - (// Control Interface - input clk, - input rst, - input [31:0] ctrl_word, - input go, - output done, - output error, - output idle, - - // Buffer Interface - output en_o, - output we_o, - output reg [8:0] addr_o, - output [31:0] dat_to_buf, - input [31:0] dat_from_buf, - - // Write FIFO Interface - input [31:0] wr_dat_i, - input wr_write_i, - input wr_done_i, - input wr_error_i, - output reg wr_ready_o, - output reg wr_full_o, - - // Read FIFO Interface - output [31:0] rd_dat_o, - input rd_read_i, - input rd_done_i, - input rd_error_i, - output reg rd_sop_o, - output reg rd_eop_o - ); - - reg [31:0] ctrl_reg; - reg go_reg; - - always @(posedge clk) - go_reg <= go; - - always @(posedge clk) - if(rst) - ctrl_reg <= 0; - else - if(go & (ctrl_word[31:28] == BUFF_NUM)) - ctrl_reg <= ctrl_word; - - wire [8:0] firstline = ctrl_reg[8:0]; - wire [8:0] lastline = ctrl_reg[17:9]; - wire [3:0] step = ctrl_reg[21:18]; - wire read = ctrl_reg[22]; - wire write = ctrl_reg[23]; - wire clear = ctrl_reg[24]; - //wire [2:0] port = ctrl_reg[27:25]; // Ignored in this block - //wire [3:0] buff_num = ctrl_reg[31:28]; // Ignored here ? - - assign dat_to_buf = wr_dat_i; - assign rd_dat_o = dat_from_buf; - - localparam IDLE = 3'd0; - localparam PRE_READ = 3'd1; - localparam READING = 3'd2; - localparam WRITING = 3'd3; - localparam ERROR = 3'd4; - localparam DONE = 3'd5; - - reg [2:0] state; - - always @(posedge clk) - if(rst) - begin - state <= IDLE; - rd_sop_o <= 0; - rd_eop_o <= 0; - wr_ready_o <= 0; - wr_full_o <= 0; - end - else - if(clear) - begin - state <= IDLE; - rd_sop_o <= 0; - rd_eop_o <= 0; - wr_ready_o <= 0; - wr_full_o <= 0; - end - else - case(state) - IDLE : - if(go_reg & read) - begin - addr_o <= firstline; - state <= PRE_READ; - end - else if(go_reg & write) - begin - addr_o <= firstline; - state <= WRITING; - wr_ready_o <= 1; - end - - PRE_READ : - begin - state <= READING; - addr_o <= addr_o + 1; - rd_sop_o <= 1; - end - - READING : - if(rd_error_i) - state <= ERROR; - else if(rd_done_i) - state <= DONE; - else if(rd_read_i) - begin - rd_sop_o <= 0; - addr_o <= addr_o + 1; - if(addr_o == lastline) - rd_eop_o <= 1; - else - rd_eop_o <= 0; - if(rd_eop_o) - state <= DONE; - end - - WRITING : - begin - if(wr_write_i) - addr_o <= addr_o + 1; // This was the timing problem, so now it doesn't depend on wr_error_i - if(wr_error_i) - begin - state <= ERROR; - wr_ready_o <= 0; - end - else - begin - if(wr_write_i) - begin - wr_ready_o <= 0; - if(addr_o == (lastline-1)) - wr_full_o <= 1; - if(addr_o == lastline) - state <= DONE; - end - if(wr_done_i) - begin - state <= DONE; - wr_ready_o <= 0; - end - end // else: !if(wr_error_i) - end // case: WRITING - - DONE : - begin - rd_eop_o <= 0; - rd_sop_o <= 0; - wr_ready_o <= 0; - wr_full_o <= 0; - end - - endcase // case(state) - - // FIXME ignores step for now - - assign we_o = (state == WRITING) && wr_write_i; // FIXME potential critical path - // IF this is a timing problem, we could always write when in this state - assign en_o = ~((state==READING)& ~rd_read_i); // FIXME potential critical path - - assign done = (state == DONE); - assign error = (state == ERROR); - assign idle = (state == IDLE); -endmodule // buffer_int - - - -// These are 2 other ways for doing the WRITING state, both work. First one is faster, but confusing -/* - begin - // Gen 4 values -- state, wr_ready_o, addr_o, wr_full_o - if(~wr_error_i & wr_write_i & (addr_o == (lastline-1))) - wr_full_o <= 1; - if(wr_error_i | wr_write_i | wr_done_i) - wr_ready_o <= 0; - if(wr_error_i) - state <= ERROR; - else if(wr_done_i | (wr_write_i & (addr_o == lastline))) - state <= DONE; - // This one was the timing problem... now we increment addr_o even if there is an error - if(wr_write_i) - addr_o <= addr_o + 1; - end // case: WRITING -*/ - -/* begin - if(wr_error_i) - begin - state <= ERROR; - wr_ready_o <= 0; - end - else - begin - if(wr_write_i) - begin - wr_ready_o <= 0; - addr_o <= addr_o + 1; - if(addr_o == (lastline-1)) - wr_full_o <= 1; - if(addr_o == lastline) - state <= DONE; - end - if(wr_done_i) - begin - state <= DONE; - wr_ready_o <= 0; - end - end // else: !if(wr_error_i) - end // case: WRITING -*/ - - - - - - - - - - - - - - -// Unused old code - //assign rd_empty_o = (state != READING); // && (state != PRE_READ); - //assign rd_empty_o = rd_empty_reg; // timing fix? - //assign rd_ready_o = (state == READING); - //assign rd_ready_o = ~rd_empty_reg; // timing fix? - - //wire rd_en = (state == PRE_READ) || ((state == READING) && rd_read_i); - //wire wr_en = (state == WRITING) && wr_write_i; // IF this is a timing problem, we could always enable when in this state - //assign en_o = rd_en | wr_en; - - // assign wr_full_o = (state != WRITING); - // assign wr_ready_o = (state == WRITING); - diff --git a/control_lib/buffer_int_tb.v b/control_lib/buffer_int_tb.v deleted file mode 100644 index 4fb5c6710..000000000 --- a/control_lib/buffer_int_tb.v +++ /dev/null @@ -1,447 +0,0 @@ - -module buffer_int_tb (); - - reg clk = 0; - reg rst = 1; - - initial #100 rst = 0; - always #5 clk = ~clk; - - wire en, we; - wire [8:0] addr; - wire [31:0] fifo2buf, buf2fifo; - - wire [31:0] rd_dat_o; - wire rd_sop_o, rd_eop_o; - reg rd_done_i = 0, rd_error_i = 0, rd_read_i = 0; - - reg [31:0] wr_dat_i = 0; - reg wr_write_i=0, wr_done_i = 0, wr_error_i = 0; - wire wr_ready_o, wr_full_o; - - reg clear = 0, write = 0, read = 0; - reg [8:0] firstline = 0, lastline = 0; - wire [3:0] step = 1; - wire [31:0] ctrl_word = {4'b0,3'b0,clear,write,read,step,lastline,firstline}; - reg go = 0; - wire done, error; - - buffer_int buffer_int - (.clk(clk),.rst(rst), - .ctrl_word(ctrl_word),.go(go), - .done(done),.error(error), - - // Buffer Interface - .en_o(en),.we_o(we),.addr_o(addr), - .dat_to_buf(fifo2buf),.dat_from_buf(buf2fifo), - - // Write FIFO Interface - .wr_dat_i(wr_dat_i), .wr_write_i(wr_write_i), .wr_done_i(wr_done_i), .wr_error_i(wr_error_i), - .wr_ready_o(wr_ready_o), .wr_full_o(wr_full_o), - - // Read FIFO Interface - .rd_dat_o(rd_dat_o), .rd_read_i(rd_read_i), .rd_done_i(rd_done_i), .rd_error_i(rd_error_i), - .rd_sop_o(rd_sop_o), .rd_eop_o(rd_eop_o) - ); - - reg ram_en = 0, ram_we = 0; - reg [8:0] ram_addr = 0; - reg [31:0] ram_data = 0; - - ram_2port #(.DWIDTH(32),.AWIDTH(9)) ram_2port - (.clka(clk), .ena(ram_en), .wea(ram_we), .addra(ram_addr), .dia(ram_data), .doa(), - .clkb(clk), .enb(en), .web(we), .addrb(addr), .dib(fifo2buf), .dob(buf2fifo) ); - - initial - begin - @(negedge rst); - @(posedge clk); - FillRAM; - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing full read, no wait states."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(6,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing full read, 2 wait states."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(6,2); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing full read, done ON the last."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(5,2); - rd_done_i <= 1; - ReadALine; - rd_done_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing partial read, 0 wait states, then nothing after last."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(3,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing partial read, 0 wait states, then done after last."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(3,0); - rd_done_i <= 1; - @(posedge clk); - rd_done_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing partial read, 0 wait states, then done at same time as last."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(2,0); - rd_done_i <= 1; - ReadALine; - rd_done_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing partial read, 3 wait states, then error at same time as last."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(2,3); - rd_error_i <= 1; - ReadALine; - rd_error_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(5,10); - $display("Testing Reading too much, 3 wait states."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(9,3); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(500,511); - $display("Testing full read, to the end of the buffer."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(12,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(0,511); - $display("Testing full read, start to end of the buffer."); - while(!rd_sop_o) - @(posedge clk); - ReadLines(512,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(505,3); - $display("Testing full read, wraparound"); - while(!rd_sop_o) - @(posedge clk); - ReadLines(11,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(10,15); - $display("Testing Full Write, no wait states"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(6,0,72); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(18,23); - $display("Testing Full Write, 1 wait states"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(6,0,101); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(27,40); - $display("Testing Partial Write, 0 wait states"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(6,0,201); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(35,200); - $display("Testing Partial Write, 0 wait states, then done"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(6,0,301); - wr_done_i <= 1; - @(posedge clk); - wr_done_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(45,200); - $display("Testing Partial Write, 0 wait states, then done and write simultaneously"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(6,0,301); - wr_done_i <= 1; - WriteALine(400); - wr_done_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(55,200); - $display("Testing Partial Write, 0 wait states, then error"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(6,0,501); - wr_error_i <= 1; - @(posedge clk); - wr_error_i <= 0; - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(0,82); - $display("Testing read after all the writes"); - while(!rd_sop_o) - @(posedge clk); - ReadLines(83,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(508,4); - $display("Testing wraparound write"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(9,0,601); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(506,10); - $display("Reading wraparound write"); - while(!rd_sop_o) - @(posedge clk); - ReadLines(17,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(0,511); - $display("Testing Whole Buffer write"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(512,0,1000); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(0,511); - $display("Reading Whole Buffer write"); - while(!rd_sop_o) - @(posedge clk); - ReadLines(512,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(5,10); - $display("Testing Write Too Many"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(12,0,2000); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(0,15); - $display("Reading back Write Too Many"); - while(!rd_sop_o) - @(posedge clk); - ReadLines(16,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferWrite(15,20); - $display("Testing Write One Less Than Full"); - while(!wr_ready_o) - @(posedge clk); - WriteLines(5,0,2000); - repeat (10) - @(posedge clk); - - ResetBuffer; - SetBufferRead(13,22); - $display("Reading back Write One Less Than Full"); - while(!rd_sop_o) - @(posedge clk); - ReadLines(10,0); - repeat (10) - @(posedge clk); - - ResetBuffer; - repeat(100) - @(posedge clk); - $finish; - end - - always @(posedge clk) - if(rd_read_i == 1'd1) - $display("READ Buffer %d, rd_sop_o %d, rd_eop_o %d", rd_dat_o, rd_sop_o, rd_eop_o); - - always @(posedge clk) - if(wr_write_i == 1'd1) - $display("WRITE Buffer %d, wr_ready_o %d, wr_full_o %d", wr_dat_i, wr_ready_o, wr_full_o); - - initial begin - $dumpfile("buffer_int_tb.vcd"); - $dumpvars(0,buffer_int_tb); - end - - task FillRAM; - begin - ram_addr <= 0; - ram_data <= 0; - @(posedge clk); - ram_en <= 1; - ram_we <= 1; - @(posedge clk); - repeat (511) - begin - ram_addr <= ram_addr + 1; - ram_data <= ram_data + 1; - ram_en <= 1; - ram_we <= 1; - @(posedge clk); - end - ram_en <= 0; - ram_we <= 0; - @(posedge clk); - $display("Filled the RAM"); - end - endtask // FillRAM - - task ResetBuffer; - begin - clear <= 1; read <= 0; write <= 0; - go <= 1; - @(posedge clk); - go <= 0; - @(posedge clk); - $display("Buffer Reset"); - end - endtask // ClearBuffer - - task SetBufferWrite; - input [8:0] start; - input [8:0] stop; - begin - clear <= 0; read <= 0; write <= 1; - firstline <= start; - lastline <= stop; - go <= 1; - @(posedge clk); - go <= 0; - @(posedge clk); - $display("Buffer Set for Write"); - end - endtask // SetBufferWrite - - task SetBufferRead; - input [8:0] start; - input [8:0] stop; - begin - clear <= 0; read <= 1; write <= 0; - firstline <= start; - lastline <= stop; - go <= 1; - @(posedge clk); - go <= 0; - @(posedge clk); - $display("Buffer Set for Read"); - end - endtask // SetBufferRead - - task ReadALine; - begin - #1 rd_read_i <= 1; - @(posedge clk); - rd_read_i <= 0; - end - endtask // ReadALine - - task ReadLines; - input [9:0] lines; - input [7:0] wait_states; - begin - $display("Read Lines: Number %d, Wait States %d",lines,wait_states); - repeat (lines) - begin - ReadALine; - repeat (wait_states) - @(posedge clk); - end - end - endtask // ReadLines - - task WriteALine; - input [31:0] value; - begin - #1 wr_write_i <= 1; - wr_dat_i <= value; - @(posedge clk); - wr_write_i <= 0; - end - endtask // WriteALine - - task WriteLines; - input [9:0] lines; - input [7:0] wait_states; - input [31:0] value; - begin - $display("Write Lines: Number %d, Wait States %d",lines,wait_states); - repeat(lines) - begin - value <= value + 1; - WriteALine(value); - repeat(wait_states) - @(posedge clk); - end - end - endtask // WriteLines - -endmodule // buffer_int_tb diff --git a/control_lib/buffer_pool.v b/control_lib/buffer_pool.v deleted file mode 100644 index 969296230..000000000 --- a/control_lib/buffer_pool.v +++ /dev/null @@ -1,323 +0,0 @@ - -// Buffer pool. Contains 8 buffers, each 2K (512 by 32). Each buffer -// is a dual-ported RAM. Port A on each of them is indirectly connected -// to the wishbone bus by a bridge. Port B may be connected any one of the -// 8 (4 rd, 4 wr) FIFO-like streaming interaces, or disconnected. The wishbone bus -// provides access to all 8 buffers, and also controls the connections -// between the ports and the buffers, allocating them as needed. - -// wb_adr is 16 bits -- -// bits 13:11 select which buffer -// bits 10:2 select line in buffer -// bits 1:0 are unused (32-bit access only) - -module buffer_pool - (input wb_clk_i, - input wb_rst_i, - input wb_we_i, - input wb_stb_i, - input [15:0] wb_adr_i, - input [31:0] wb_dat_i, - output [31:0] wb_dat_o, - output reg wb_ack_o, - output wb_err_o, - output wb_rty_o, - - input stream_clk, - input stream_rst, - - input set_stb, input [7:0] set_addr, input [31:0] set_data, - output [31:0] status, - output sys_int_o, - - output [31:0] s0, output [31:0] s1, output [31:0] s2, output [31:0] s3, - output [31:0] s4, output [31:0] s5, output [31:0] s6, output [31:0] s7, - - // Write Interfaces - input [31:0] wr0_dat_i, input wr0_write_i, input wr0_done_i, input wr0_error_i, output wr0_ready_o, output wr0_full_o, - input [31:0] wr1_dat_i, input wr1_write_i, input wr1_done_i, input wr1_error_i, output wr1_ready_o, output wr1_full_o, - input [31:0] wr2_dat_i, input wr2_write_i, input wr2_done_i, input wr2_error_i, output wr2_ready_o, output wr2_full_o, - input [31:0] wr3_dat_i, input wr3_write_i, input wr3_done_i, input wr3_error_i, output wr3_ready_o, output wr3_full_o, - - // Read Interfaces - output [31:0] rd0_dat_o, input rd0_read_i, input rd0_done_i, input rd0_error_i, output rd0_sop_o, output rd0_eop_o, - output [31:0] rd1_dat_o, input rd1_read_i, input rd1_done_i, input rd1_error_i, output rd1_sop_o, output rd1_eop_o, - output [31:0] rd2_dat_o, input rd2_read_i, input rd2_done_i, input rd2_error_i, output rd2_sop_o, output rd2_eop_o, - output [31:0] rd3_dat_o, input rd3_read_i, input rd3_done_i, input rd3_error_i, output rd3_sop_o, output rd3_eop_o - ); - - wire [7:0] sel_a; - - wire [2:0] which_buf = wb_adr_i[13:11]; // address 15:14 selects the buffer pool - wire [8:0] buf_addra = wb_adr_i[10:2]; // ignore address 1:0, 32-bit access only - - decoder_3_8 dec(.sel(which_buf),.res(sel_a)); - - genvar i; - - wire go; - - reg [2:0] port[0:7]; - reg [3:0] read_src[0:3]; - reg [3:0] write_src[0:3]; - - wire [7:0] done; - wire [7:0] error; - wire [7:0] idle; - - wire [31:0] buf_doa[0:7]; - - wire [7:0] buf_enb; - wire [7:0] buf_web; - wire [8:0] buf_addrb[0:7]; - wire [31:0] buf_dib[0:7]; - wire [31:0] buf_dob[0:7]; - - wire [31:0] wr_dat_i[0:7]; - wire [7:0] wr_write_i; - wire [7:0] wr_done_i; - wire [7:0] wr_error_i; - wire [7:0] wr_ready_o; - wire [7:0] wr_full_o; - - wire [31:0] rd_dat_o[0:7]; - wire [7:0] rd_read_i; - wire [7:0] rd_done_i; - wire [7:0] rd_error_i; - wire [7:0] rd_sop_o; - wire [7:0] rd_eop_o; - - assign status = {8'd0,idle[7:0],error[7:0],done[7:0]}; - - assign s0 = {23'd0,buf_addrb[0]}; - assign s1 = {23'd0,buf_addrb[1]}; - assign s2 = {23'd0,buf_addrb[2]}; - assign s3 = {23'd0,buf_addrb[3]}; - assign s4 = {23'd0,buf_addrb[4]}; - assign s5 = {23'd0,buf_addrb[5]}; - assign s6 = {23'd0,buf_addrb[6]}; - assign s7 = {23'd0,buf_addrb[7]}; - - wire [31:0] fifo_ctrl; - setting_reg #(.my_addr(64)) - sreg(.clk(stream_clk),.rst(stream_rst),.strobe(set_stb),.addr(set_addr),.in(set_data), - .out(fifo_ctrl),.changed(go)); - - integer k; - always @(posedge stream_clk) - if(stream_rst) - for(k=0;k<8;k=k+1) - port[k] <= 4; // disabled - else - for(k=0;k<8;k=k+1) - if(go & (fifo_ctrl[31:28]==k)) - port[k] <= fifo_ctrl[27:25]; - - always @(posedge stream_clk) - if(stream_rst) - for(k=0;k<4;k=k+1) - read_src[k] <= 8; // disabled - else - for(k=0;k<4;k=k+1) - if(go & fifo_ctrl[22] & (fifo_ctrl[27:25]==k)) - read_src[k] <= fifo_ctrl[31:28]; - - always @(posedge stream_clk) - if(stream_rst) - for(k=0;k<4;k=k+1) - write_src[k] <= 8; // disabled - else - for(k=0;k<4;k=k+1) - if(go & fifo_ctrl[23] & (fifo_ctrl[27:25]==k)) - write_src[k] <= fifo_ctrl[31:28]; - - generate - for(i=0;i<8;i=i+1) - begin : gen_buffer - RAMB16_S36_S36 dpram - (.DOA(buf_doa[i]),.ADDRA(buf_addra),.CLKA(wb_clk_i),.DIA(wb_dat_i),.DIPA(4'h0), - .ENA(wb_stb_i & sel_a[i]),.SSRA(0),.WEA(wb_we_i), - .DOB(buf_dob[i]),.ADDRB(buf_addrb[i]),.CLKB(stream_clk),.DIB(buf_dib[i]),.DIPB(4'h0), - .ENB(buf_enb[i]),.SSRB(0),.WEB(buf_web[i]) ); - - /* ram_2port #(.DWIDTH(32),.AWIDTH(9)) buffer - (.clka(wb_clk_i),.ena(wb_stb_i & sel_a[i]),.wea(wb_we_i), - .addra(buf_addra),.dia(wb_dat_i),.doa(buf_doa[i]), - .clkb(stream_clk),.enb(buf_enb[i]),.web(buf_web[i]), - .addrb(buf_addrb[i]),.dib(buf_dib[i]),.dob(buf_dob[i])); */ - - buffer_int #(.BUFF_NUM(i)) fifo_int - (.clk(stream_clk),.rst(stream_rst), - .ctrl_word(fifo_ctrl),.go(go & (fifo_ctrl[31:28]==i)), - .done(done[i]),.error(error[i]),.idle(idle[i]), - .en_o(buf_enb[i]), - .we_o(buf_web[i]), - .addr_o(buf_addrb[i]), - .dat_to_buf(buf_dib[i]), - .dat_from_buf(buf_dob[i]), - .wr_dat_i(wr_dat_i[i]), - .wr_write_i(wr_write_i[i]), - .wr_done_i(wr_done_i[i]), - .wr_error_i(wr_error_i[i]), - .wr_ready_o(wr_ready_o[i]), - .wr_full_o(wr_full_o[i]), - .rd_dat_o(rd_dat_o[i]), - .rd_read_i(rd_read_i[i]), - .rd_done_i(rd_done_i[i]), - .rd_error_i(rd_error_i[i]), - .rd_sop_o(rd_sop_o[i]), - .rd_eop_o(rd_eop_o[i]) - ); - - // FIXME -- if it is a problem, maybe we don't need enables on these muxes - mux4 #(.WIDTH(32)) - mux4_dat_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(wr0_dat_i),.i1(wr1_dat_i), - .i2(wr2_dat_i),.i3(wr3_dat_i),.o(wr_dat_i[i])); - mux4 #(.WIDTH(1)) - mux4_write_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(wr0_write_i),.i1(wr1_write_i), - .i2(wr2_write_i),.i3(wr3_write_i),.o(wr_write_i[i])); - mux4 #(.WIDTH(1)) - mux4_wrdone_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(wr0_done_i),.i1(wr1_done_i), - .i2(wr2_done_i),.i3(wr3_done_i),.o(wr_done_i[i])); - mux4 #(.WIDTH(1)) - mux4_wrerror_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(wr0_error_i),.i1(wr1_error_i), - .i2(wr2_error_i),.i3(wr3_error_i),.o(wr_error_i[i])); - mux4 #(.WIDTH(1)) - mux4_read_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(rd0_read_i),.i1(rd1_read_i), - .i2(rd2_read_i),.i3(rd3_read_i),.o(rd_read_i[i])); - mux4 #(.WIDTH(1)) - mux4_rddone_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(rd0_done_i),.i1(rd1_done_i), - .i2(rd2_done_i),.i3(rd3_done_i),.o(rd_done_i[i])); - mux4 #(.WIDTH(1)) - mux4_rderror_i (.en(~port[i][2]),.sel(port[i][1:0]),.i0(rd0_error_i),.i1(rd1_error_i), - .i2(rd2_error_i),.i3(rd3_error_i),.o(rd_error_i[i])); - end // block: gen_buffer - endgenerate - - //---------------------------------------------------------------------- - // Wishbone Outputs - - // Use the following lines if ram output and mux can be made fast enough - - assign wb_err_o = 1'b0; // Unused for now - assign wb_rty_o = 1'b0; // Unused for now - - always @(posedge wb_clk_i) - wb_ack_o <= wb_stb_i & ~wb_ack_o; - assign wb_dat_o = buf_doa[which_buf]; - - // Use this if we can't make the RAM+MUX fast enough - // reg [31:0] wb_dat_o_reg; - // reg stb_d1; - - // always @(posedge wb_clk_i) - // begin - // wb_dat_o_reg <= buf_doa[which_buf]; - // stb_d1 <= wb_stb_i; - // wb_ack_o <= (stb_d1 & ~wb_ack_o) | (wb_we_i & wb_stb_i); - // end - //assign wb_dat_o = wb_dat_o_reg; - - mux8 #(.WIDTH(1)) - mux8_wr_ready0(.en(~write_src[0][3]),.sel(write_src[0][2:0]), .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), - .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), .i4(wr_ready_o[4]), - .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]),.o(wr0_ready_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_full0(.en(~write_src[0][3]),.sel(write_src[0][2:0]), .i0(wr_full_o[0]), .i1(wr_full_o[1]), - .i2(wr_full_o[2]), .i3(wr_full_o[3]), .i4(wr_full_o[4]), - .i5(wr_full_o[5]), .i6(wr_full_o[6]), .i7(wr_full_o[7]),.o(wr0_full_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_ready1(.en(~write_src[1][3]),.sel(write_src[1][2:0]), .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), - .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), .i4(wr_ready_o[4]), - .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]),.o(wr1_ready_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_full1(.en(~write_src[1][3]),.sel(write_src[1][2:0]), .i0(wr_full_o[0]), .i1(wr_full_o[1]), - .i2(wr_full_o[2]), .i3(wr_full_o[3]), .i4(wr_full_o[4]), - .i5(wr_full_o[5]), .i6(wr_full_o[6]), .i7(wr_full_o[7]),.o(wr1_full_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_ready2(.en(~write_src[2][3]),.sel(write_src[2][2:0]), .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), - .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), .i4(wr_ready_o[4]), - .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]),.o(wr2_ready_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_full2(.en(~write_src[2][3]),.sel(write_src[2][2:0]), .i0(wr_full_o[0]), .i1(wr_full_o[1]), - .i2(wr_full_o[2]), .i3(wr_full_o[3]), .i4(wr_full_o[4]), - .i5(wr_full_o[5]), .i6(wr_full_o[6]), .i7(wr_full_o[7]),.o(wr2_full_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_ready3(.en(~write_src[3][3]),.sel(write_src[3][2:0]), .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), - .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), .i4(wr_ready_o[4]), - .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]),.o(wr3_ready_o)); - - mux8 #(.WIDTH(1)) - mux8_wr_full3(.en(~write_src[3][3]),.sel(write_src[3][2:0]), .i0(wr_full_o[0]), .i1(wr_full_o[1]), - .i2(wr_full_o[2]), .i3(wr_full_o[3]), .i4(wr_full_o[4]), - .i5(wr_full_o[5]), .i6(wr_full_o[6]), .i7(wr_full_o[7]),.o(wr3_full_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_sop0(.en(~read_src[0][3]),.sel(read_src[0][2:0]), .i0(rd_sop_o[0]), .i1(rd_sop_o[1]), - .i2(rd_sop_o[2]), .i3(rd_sop_o[3]), .i4(rd_sop_o[4]), - .i5(rd_sop_o[5]), .i6(rd_sop_o[6]), .i7(rd_sop_o[7]),.o(rd0_sop_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_eop0(.en(~read_src[0][3]),.sel(read_src[0][2:0]), .i0(rd_eop_o[0]), .i1(rd_eop_o[1]), - .i2(rd_eop_o[2]), .i3(rd_eop_o[3]), .i4(rd_eop_o[4]), - .i5(rd_eop_o[5]), .i6(rd_eop_o[6]), .i7(rd_eop_o[7]),.o(rd0_eop_o)); - - mux8 #(.WIDTH(32)) - mux8_rd_dat_0 (.en(~read_src[0][3]),.sel(read_src[0][2:0]), .i0(rd_dat_o[0]), .i1(rd_dat_o[1]), - .i2(rd_dat_o[2]), .i3(rd_dat_o[3]), .i4(rd_dat_o[4]), - .i5(rd_dat_o[5]), .i6(rd_dat_o[6]), .i7(rd_dat_o[7]),.o(rd0_dat_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_sop1(.en(~read_src[1][3]),.sel(read_src[1][2:0]), .i0(rd_sop_o[0]), .i1(rd_sop_o[1]), - .i2(rd_sop_o[2]), .i3(rd_sop_o[3]), .i4(rd_sop_o[4]), - .i5(rd_sop_o[5]), .i6(rd_sop_o[6]), .i7(rd_sop_o[7]),.o(rd1_sop_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_eop1(.en(~read_src[1][3]),.sel(read_src[1][2:0]), .i0(rd_eop_o[0]), .i1(rd_eop_o[1]), - .i2(rd_eop_o[2]), .i3(rd_eop_o[3]), .i4(rd_eop_o[4]), - .i5(rd_eop_o[5]), .i6(rd_eop_o[6]), .i7(rd_eop_o[7]),.o(rd1_eop_o)); - - mux8 #(.WIDTH(32)) - mux8_rd_dat_1 (.en(~read_src[1][3]),.sel(read_src[1][2:0]), .i0(rd_dat_o[0]), .i1(rd_dat_o[1]), - .i2(rd_dat_o[2]), .i3(rd_dat_o[3]), .i4(rd_dat_o[4]), - .i5(rd_dat_o[5]), .i6(rd_dat_o[6]), .i7(rd_dat_o[7]),.o(rd1_dat_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_sop2(.en(~read_src[2][3]),.sel(read_src[2][2:0]), .i0(rd_sop_o[0]), .i1(rd_sop_o[1]), - .i2(rd_sop_o[2]), .i3(rd_sop_o[3]), .i4(rd_sop_o[4]), - .i5(rd_sop_o[5]), .i6(rd_sop_o[6]), .i7(rd_sop_o[7]),.o(rd2_sop_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_eop2(.en(~read_src[2][3]),.sel(read_src[2][2:0]), .i0(rd_eop_o[0]), .i1(rd_eop_o[1]), - .i2(rd_eop_o[2]), .i3(rd_eop_o[3]), .i4(rd_eop_o[4]), - .i5(rd_eop_o[5]), .i6(rd_eop_o[6]), .i7(rd_eop_o[7]),.o(rd2_eop_o)); - - mux8 #(.WIDTH(32)) - mux8_rd_dat_2 (.en(~read_src[2][3]),.sel(read_src[2][2:0]), .i0(rd_dat_o[0]), .i1(rd_dat_o[1]), - .i2(rd_dat_o[2]), .i3(rd_dat_o[3]), .i4(rd_dat_o[4]), - .i5(rd_dat_o[5]), .i6(rd_dat_o[6]), .i7(rd_dat_o[7]),.o(rd2_dat_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_sop3(.en(~read_src[3][3]),.sel(read_src[3][2:0]), .i0(rd_sop_o[0]), .i1(rd_sop_o[1]), - .i2(rd_sop_o[2]), .i3(rd_sop_o[3]), .i4(rd_sop_o[4]), - .i5(rd_sop_o[5]), .i6(rd_sop_o[6]), .i7(rd_sop_o[7]),.o(rd3_sop_o)); - - mux8 #(.WIDTH(1)) - mux8_rd_eop3(.en(~read_src[3][3]),.sel(read_src[3][2:0]), .i0(rd_eop_o[0]), .i1(rd_eop_o[1]), - .i2(rd_eop_o[2]), .i3(rd_eop_o[3]), .i4(rd_eop_o[4]), - .i5(rd_eop_o[5]), .i6(rd_eop_o[6]), .i7(rd_eop_o[7]),.o(rd3_eop_o)); - - mux8 #(.WIDTH(32)) - mux8_rd_dat_3 (.en(~read_src[3][3]),.sel(read_src[3][2:0]), .i0(rd_dat_o[0]), .i1(rd_dat_o[1]), - .i2(rd_dat_o[2]), .i3(rd_dat_o[3]), .i4(rd_dat_o[4]), - .i5(rd_dat_o[5]), .i6(rd_dat_o[6]), .i7(rd_dat_o[7]),.o(rd3_dat_o)); - - assign sys_int_o = (|error) | (|done); - -endmodule // buffer_pool diff --git a/control_lib/buffer_pool_tb.v b/control_lib/buffer_pool_tb.v deleted file mode 100644 index 16741438e..000000000 --- a/control_lib/buffer_pool_tb.v +++ /dev/null @@ -1,50 +0,0 @@ - -module buffer_pool_tb(); - - wire wb_clk_i; - wire wb_rst_i; - wire wb_we_i; - wire wb_stb_i; - wire [15:0] wb_adr_i; - wire [31:0] wb_dat_i; - wire [31:0] wb_dat_o; - wire wb_ack_o; - wire wb_err_o; - wire wb_rty_o; - - wire stream_clk, stream_rst; - - wire set_stb; - wire [7:0] set_addr; - wire [31:0] set_data; - - wire [31:0] wr0_dat_i; - buffer_pool dut - (.wb_clk_i(wb_clk_i), - .wb_rst_i(wb_rst_i), - .wb_we_i(wb_we_i), - .wb_stb_i(wb_stb_i), - .wb_adr_i(wb_adr_i), - .wb_dat_i(wb_dat_i), - .wb_dat_o(wb_dat_o), - .wb_ack_o(wb_ack_o), - .wb_err_o(wb_err_o), - .wb_rty_o(wb_rty_o), - - .stream_clk(stream_clk), - .stream_rst(stream_rst), - - .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - - .wr0_dat_i(wr0_dat_i), .wr0_write_i(), .wr0_done_i(), .wr0_error_i(), .wr0_ready_o(), .wr0_full_o(), - .wr1_dat_i(), .wr1_write_i(), .wr1_done_i(), .wr1_error_i(), .wr1_ready_o(), .wr1_full_o(), - .wr2_dat_i(), .wr2_write_i(), .wr2_done_i(), .wr2_error_i(), .wr2_ready_o(), .wr2_full_o(), - .wr3_dat_i(), .wr3_write_i(), .wr3_done_i(), .wr3_error_i(), .wr3_ready_o(), .wr3_full_o(), - - .rd0_dat_o(), .rd0_read_i(), .rd0_done_i(), .rd0_error_i(), .rd0_ready_o(), .rd0_empty_o(), - .rd1_dat_o(), .rd1_read_i(), .rd1_done_i(), .rd1_error_i(), .rd1_ready_o(), .rd1_empty_o(), - .rd2_dat_o(), .rd2_read_i(), .rd2_done_i(), .rd2_error_i(), .rd2_ready_o(), .rd2_empty_o(), - .rd3_dat_o(), .rd3_read_i(), .rd3_done_i(), .rd3_error_i(), .rd3_ready_o(), .rd3_empty_o() - ); - -endmodule // buffer_pool_tb diff --git a/control_lib/cascadefifo.v b/control_lib/cascadefifo.v deleted file mode 100644 index c1a4ab335..000000000 --- a/control_lib/cascadefifo.v +++ /dev/null @@ -1,50 +0,0 @@ - - -// This FIFO exists to provide an intermediate point for the data on its -// long trek from one RAM (in the buffer pool) to another (in the longfifo) -// The shortfifo is more flexible in its placement since it is based on -// distributed RAM -// This one should only be used on transmit side applications. I.e. tx_mac, tx_dsp, etc. -// Spartan 3's have slow routing.... -// If we REALLY need to, we could also do this on the output side, -// with for the receive side stuff - -module cascadefifo - #(parameter WIDTH=32, SIZE=9) - (input clk, input rst, - input [WIDTH-1:0] datain, - output [WIDTH-1:0] dataout, - input read, - input write, - input clear, - output full, - output empty, - output [15:0] space, - output [15:0] occupied); - - wire [WIDTH-1:0] data_int; - wire empty_int, full_int, transfer; - wire [4:0] short_space, short_occupied; - wire [15:0] long_space, long_occupied; - - shortfifo #(.WIDTH(WIDTH)) shortfifo - (.clk(clk),.rst(rst),.clear(clear), - .datain(datain), .write(write), .full(full), - .dataout(data_int), .read(transfer), .empty(empty_int), - .space(short_space),.occupied(short_occupied) ); - - longfifo #(.WIDTH(WIDTH),.SIZE(SIZE)) longfifo - (.clk(clk),.rst(rst),.clear(clear), - .datain(data_int), .write(transfer), .full(full_int), - .dataout(dataout), .read(read), .empty(empty), - .space(long_space),.occupied(long_occupied) ); - - assign transfer = ~empty_int & ~full_int; - - assign space = {11'b0,short_space} + long_space; - assign occupied = {11'b0,short_occupied} + long_occupied; - -endmodule // cascadefifo - - - diff --git a/control_lib/cascadefifo2.v b/control_lib/cascadefifo2.v deleted file mode 100644 index 984cc46e6..000000000 --- a/control_lib/cascadefifo2.v +++ /dev/null @@ -1,56 +0,0 @@ - - -// This FIFO exists to provide an intermediate point for the data on its -// long trek from one RAM (in the buffer pool) to another (in the longfifo) -// The shortfifo is more flexible in its placement since it is based on -// distributed RAM - -// This one has the shortfifo on both the in and out sides. -module cascadefifo2 - #(parameter WIDTH=32, SIZE=9) - (input clk, input rst, - input [WIDTH-1:0] datain, - output [WIDTH-1:0] dataout, - input read, - input write, - input clear, - output full, - output empty, - output [15:0] space, - output [15:0] occupied); - - wire [WIDTH-1:0] data_int, data_int2; - wire empty_int, full_int, transfer; - wire empty_int2, full_int2, transfer2; - wire [4:0] s1_space, s1_occupied, s2_space, s2_occupied; - wire [15:0] l_space, l_occupied; - - shortfifo #(.WIDTH(WIDTH)) shortfifo - (.clk(clk),.rst(rst),.clear(clear), - .datain(datain), .write(write), .full(full), - .dataout(data_int), .read(transfer), .empty(empty_int), - .space(s1_space),.occupied(s1_occupied) ); - - longfifo #(.WIDTH(WIDTH),.SIZE(SIZE)) longfifo - (.clk(clk),.rst(rst),.clear(clear), - .datain(data_int), .write(transfer), .full(full_int), - .dataout(data_int2), .read(transfer2), .empty(empty_int2), - .space(l_space),.occupied(l_occupied) ); - - shortfifo #(.WIDTH(WIDTH)) shortfifo2 - (.clk(clk),.rst(rst),.clear(clear), - .datain(data_int2), .write(transfer2), .full(full_int2), - .dataout(dataout), .read(read), .empty(empty), - .space(s2_space),.occupied(s2_occupied) ); - - assign transfer = ~empty_int & ~full_int; - assign transfer2 = ~empty_int2 & ~full_int2; - - assign space = {11'b0,s1_space} + {11'b0,s2_space} + l_space; - assign occupied = {11'b0,s1_occupied} + {11'b0,s2_occupied} + l_occupied; - -endmodule // cascadefifo2 - - - - diff --git a/control_lib/fifo_2clock.v b/control_lib/fifo_2clock.v deleted file mode 100644 index 6b1eb607e..000000000 --- a/control_lib/fifo_2clock.v +++ /dev/null @@ -1,66 +0,0 @@ - -module fifo_2clock - #(parameter DWIDTH=32, AWIDTH=9) - (input wclk, input [DWIDTH-1:0] datain, input write, output full, output reg [AWIDTH-1:0] level_wclk, - input rclk, output [DWIDTH-1:0] dataout, input read, output empty, output reg [AWIDTH-1:0] level_rclk, - input arst); - - reg [AWIDTH-1:0] wr_addr, rd_addr; - wire [AWIDTH-1:0] wr_addr_rclk, rd_addr_wclk; - wire [AWIDTH-1:0] next_rd_addr; - wire enb_read; - - // Write side management - wire [AWIDTH-1:0] next_wr_addr = wr_addr + 1; - always @(posedge wclk or posedge arst) - if(arst) - wr_addr <= 0; - else if(write) - wr_addr <= next_wr_addr; - assign full = (next_wr_addr == rd_addr_wclk); - - // RAM for data storage. Data out is registered, complicating the - // read side logic - ram_2port #(.DWIDTH(DWIDTH),.AWIDTH(AWIDTH)) mac_rx_ff_ram - (.clka(wclk),.ena(1'b1),.wea(write),.addra(wr_addr),.dia(datain),.doa(), - .clkb(rclk),.enb(enb_read),.web(1'b0),.addrb(next_rd_addr),.dib(0),.dob(dataout) ); - - // Read side management - reg data_valid; - assign empty = ~data_valid; - assign next_rd_addr = rd_addr + data_valid; - assign enb_read = read | ~data_valid; - - always @(posedge rclk or posedge arst) - if(arst) - rd_addr <= 0; - else if(read) - rd_addr <= rd_addr + 1; - - always @(posedge rclk or posedge arst) - if(arst) - data_valid <= 0; - else - if(read & (next_rd_addr == wr_addr_rclk)) - data_valid <= 0; - else if(next_rd_addr != wr_addr_rclk) - data_valid <= 1; - - // Send pointers across clock domains via gray code - gray_send #(.WIDTH(AWIDTH)) send_wr_addr - (.clk_in(wclk),.addr_in(wr_addr), - .clk_out(rclk),.addr_out(wr_addr_rclk) ); - - gray_send #(.WIDTH(AWIDTH)) send_rd_addr - (.clk_in(rclk),.addr_in(rd_addr), - .clk_out(wclk),.addr_out(rd_addr_wclk) ); - - // Generate fullness info, these are approximate and may be delayed - // and are only for higher-level flow control. - // Only full and empty are guaranteed exact. - always @(posedge wclk) - level_wclk <= wr_addr - rd_addr_wclk; - always @(posedge rclk) - level_rclk <= wr_addr_rclk - rd_addr; - -endmodule // fifo_2clock diff --git a/control_lib/fifo_2clock_casc.v b/control_lib/fifo_2clock_casc.v deleted file mode 100644 index e9b0cfc25..000000000 --- a/control_lib/fifo_2clock_casc.v +++ /dev/null @@ -1,31 +0,0 @@ - -module fifo_2clock_casc - #(parameter DWIDTH=32, AWIDTH=9) - (input wclk, input [DWIDTH-1:0] datain, input write, output full, output [AWIDTH-1:0] level_wclk, - input rclk, output [DWIDTH-1:0] dataout, input read, output empty, output [AWIDTH-1:0] level_rclk, - input arst); - - wire full_int, empty_int, full_int2, empty_int2, transfer, transfer2; - wire [DWIDTH-1:0] data_int, data_int2; - - shortfifo #(.WIDTH(DWIDTH)) shortfifo - (.clk(wclk), .rst(arst), .clear(0), - .datain(datain), .write(write), .full(full), - .dataout(data_int), .read(transfer), .empty(empty_int) ); - - assign transfer = ~full_int & ~empty_int; - - fifo_2clock #(.DWIDTH(DWIDTH),.AWIDTH(AWIDTH)) fifo_2clock - (.wclk(wclk), .datain(data_int), .write(transfer), .full(full_int), .level_wclk(level_wclk), - .rclk(rclk), .dataout(data_int2), .read(transfer2), .empty(empty_int2), .level_rclk(level_rclk), - .arst(arst) ); - - assign transfer2 = ~full_int2 & ~empty_int2; - - shortfifo #(.WIDTH(DWIDTH)) shortfifo2 - (.clk(rclk), .rst(arst), .clear(0), - .datain(data_int2), .write(transfer2), .full(full_int2), - .dataout(dataout), .read(read), .empty(empty) ); - -endmodule // fifo_2clock_casc - diff --git a/control_lib/fifo_reader.v b/control_lib/fifo_reader.v deleted file mode 100644 index 49d05b1a6..000000000 --- a/control_lib/fifo_reader.v +++ /dev/null @@ -1,28 +0,0 @@ - -module fifo_reader - #(parameter rate=4) - (input clk, - input [31:0] data_in, - output read_o - input ready_i, - input done_i - ); - - reg [7:0] state = 0; - - always @(posedge clk) - if(ready) - if(state == rate) - state <= 0; - else - state <= state + 1; - else - state <= 0; - - assign read = (state == rate); - - initial $monitor(data_in); - -endmodule // fifo_reader - - diff --git a/control_lib/fifo_tb.v b/control_lib/fifo_tb.v index 98fd63f8d..616fe4ee7 100644 --- a/control_lib/fifo_tb.v +++ b/control_lib/fifo_tb.v @@ -2,11 +2,11 @@ module fifo_tb(); reg clk, rst; wire short_full, short_empty, long_full, long_empty; - wire casc_full, casc_empty, casc2_full, casc2_empty; + wire casc2_full, casc2_empty; reg read, write; wire [7:0] short_do, long_do; - wire [7:0] casc_do, casc2_do; + wire [7:0] casc2_do; reg [7:0] di; reg clear = 0; @@ -19,10 +19,6 @@ module fifo_tb(); (.clk(clk),.rst(rst),.datain(di),.dataout(long_do),.clear(clear), .read(read),.write(write),.full(long_full),.empty(long_empty)); - cascadefifo #(.WIDTH(8), .SIZE(4)) cascadefifo - (.clk(clk),.rst(rst),.datain(di),.dataout(casc_do),.clear(clear), - .read(read),.write(write),.full(casc_full),.empty(casc_empty)); - cascadefifo2 #(.WIDTH(8), .SIZE(4)) cascadefifo2 (.clk(clk),.rst(rst),.datain(di),.dataout(casc2_do),.clear(clear), .read(read),.write(write),.full(casc2_full),.empty(casc2_empty)); diff --git a/control_lib/fifo_writer.v b/control_lib/fifo_writer.v deleted file mode 100644 index 064ad3cb9..000000000 --- a/control_lib/fifo_writer.v +++ /dev/null @@ -1,31 +0,0 @@ - -module fifo_writer - #(parameter rate=4) - (input clk, - output [31:0] data_out, - output write_o, - input ready_i, - input done_i - ); - - reg [7:0] state = 0; - - - // FIXME change this to write - always @(posedge clk) - if(ready) - if(state == rate) - state <= 0; - else - state <= state + 1; - else - state <= 0; - - assign read = (state == rate); - - initial $monitor(data_in); - -endmodule // fifo_writer - - - diff --git a/control_lib/giantfifo.v b/control_lib/giantfifo.v deleted file mode 100644 index dba330b8a..000000000 --- a/control_lib/giantfifo.v +++ /dev/null @@ -1,209 +0,0 @@ - - - -module giantfifo - #(parameter WIDTH=36) - (input clk, input rst, - input [WIDTH-1:0] datain, - output [WIDTH-1:0] dataout, - input read, - input write, - input clear, - output full, - output empty, - output [15:0] space, - output [15:0] occupied, - - // External RAM - inout [17:0] RAM_D, - output reg [18:0] RAM_A, - output RAM_CE1n, - output RAM_CENn, - output reg RAM_CLK, - output reg RAM_WEn, - output RAM_OEn, - output RAM_LDn - ); - - wire [4:0] path1_occ, path2_space; - wire [35:0] path1_dat, path2_dat; - - shortfifo #(.WIDTH(WIDTH)) sf1 - (.clk(clk),.rst(rst),.clear(clear), - .datain(datain),.write(write),.full(full), - .dataout(path1_dat),.read(path1_read),.empty(path1_empty), - .space(),.occupied(path1_occ) ); - wire path1_almost_empty = (path1_occ == 5'd1); - - shortfifo #(.WIDTH(WIDTH)) sf2 - (.clk(clk),.rst(rst),.clear(clear), - .datain(path2_dat),.write(path2_write),.full(path2_full), - .dataout(dataout),.read(read),.empty(empty), - .space(path2_space),.occupied() ); - wire path2_almost_full = (path2_space == 5'd1); - - assign RAM_CE1n = 1'b0; - assign RAM_CENn = 1'b0; - always @(clk) - RAM_CLK <= #2 clk; - assign RAM_LDn = 1'b0; - - // State machine - wire write_now, read_now, idle, phase; - reg ram_full, ram_empty; - - reg [17:0] read_ptr, write_ptr; - reg [2:0] zbt_state; - - localparam ZBT_IDLE = 0; - localparam ZBT_WRITE_UPPER = 2; - localparam ZBT_WRITE_LOWER = 3; - localparam ZBT_READ_UPPER = 4; - localparam ZBT_READ_LOWER = 5; - - wire can_write = ~ram_full & ~path1_empty; - wire can_write_chain = can_write & ~path1_almost_empty; - - wire can_read = ~ram_empty & ~path2_full; - wire can_read_chain = can_read & ~path2_almost_full; - - assign phase = zbt_state[0]; - - reg [17:0] ram_occupied; - wire ram_almost_empty = (write_ptr == (read_ptr+1'b1)); - wire ram_almost_full = ((write_ptr+1'b1) == read_ptr); - - always @(posedge clk) - if(rst | clear) - begin - zbt_state <= ZBT_IDLE; - write_ptr <= 0; - read_ptr <= 0; - ram_full <= 0; - ram_empty <= 1; - ram_occupied <= 0; - end - else - case(zbt_state) - ZBT_IDLE : - if(can_read) - zbt_state <= ZBT_READ_UPPER; - else if(can_write) - zbt_state <= ZBT_WRITE_UPPER; - - ZBT_WRITE_UPPER : - begin - zbt_state <= ZBT_WRITE_LOWER; - ram_occupied <= ram_occupied + 1; - ram_empty <= 0; - if(ram_occupied == 18'd10) - ram_full <= 1; - end - ZBT_WRITE_LOWER : - begin - write_ptr <= write_ptr + 1; - if(can_read_chain) - zbt_state <= ZBT_READ_UPPER; - else if(can_write_chain) - zbt_state <= ZBT_WRITE_UPPER; - else - zbt_state <= ZBT_IDLE; - end - ZBT_READ_UPPER : - begin - zbt_state <= ZBT_READ_LOWER; - ram_occupied <= ram_occupied - 1; - ram_full <= 0; - if(ram_occupied == 18'd1) - ram_empty <= 1; - end - ZBT_READ_LOWER : - begin - read_ptr <= read_ptr + 1; - if(can_read_chain) - zbt_state <= ZBT_READ_UPPER; - else if(can_write_chain) - zbt_state <= ZBT_WRITE_UPPER; - else - zbt_state <= ZBT_IDLE; - end - default : - zbt_state <= ZBT_IDLE; - endcase // case(zbt_state) - - // Need to generate RAM_WEn, RAM_OEn, RAM_D, RAM_A; - assign path1_read = (zbt_state == ZBT_WRITE_LOWER); - reg path2_write, delayed_read_upper, delayed_read_lower, delayed_write; - - always @(posedge clk) - if(delayed_read_upper) - path2_dat[35:18] <= RAM_D; - always @(posedge clk) - if(delayed_read_lower) - path2_dat[17:0] <= RAM_D; - - always @(posedge clk) - if(rst) - begin - delayed_read_upper <= 0; - delayed_read_lower <= 0; - path2_write <= 0; - end - else - begin - delayed_read_upper <= (zbt_state == ZBT_READ_LOWER); - delayed_read_lower <= delayed_read_upper; - path2_write <= delayed_read_lower; - end - - reg [17:0] RAM_D_pre2, RAM_D_pre1, RAM_D_out; - - always @(posedge clk) - RAM_D_pre2 <= phase ? path1_dat[17:0] : path1_dat[35:18]; - - always @(posedge clk) RAM_D_pre1 <= RAM_D_pre2; - always @(posedge clk) RAM_D_out <= RAM_D_pre1; - reg wr_del_1, wr_del_2; - always @(posedge clk) - if(rst) - begin - wr_del_1 <= 0; - wr_del_2 <= 0; - delayed_write <= 0; - end - else - begin - delayed_write <= wr_del_2; - wr_del_2 <= wr_del_1; - wr_del_1 <= write_now; - end - - reg delayed_read, rd_del_1, rd_del_2; - always @(posedge clk) - if(rst) - begin - rd_del_1 <= 0; - rd_del_2 <= 0; - delayed_read <= 0; - end - else - begin - delayed_read <= rd_del_2; - rd_del_2 <= rd_del_1; - rd_del_1 <= read_now; - end - - assign RAM_D = delayed_write ? RAM_D_out : 18'bzzzzzzzzzzzzzzzzzz; - assign write_now = (zbt_state == ZBT_WRITE_UPPER) || (zbt_state == ZBT_WRITE_LOWER); - assign read_now = (zbt_state == ZBT_READ_UPPER) || (zbt_state == ZBT_READ_LOWER); - - always @(posedge clk) - RAM_A <= write_now ? {write_ptr,phase} : {read_ptr,phase}; - - always @(posedge clk) - RAM_WEn <= ~write_now; - - assign RAM_OEn = ~delayed_read; - assign RAM_OEn = 0; - -endmodule // giantfifo diff --git a/control_lib/giantfifo_tb.v b/control_lib/giantfifo_tb.v deleted file mode 100644 index 87ecd97ae..000000000 --- a/control_lib/giantfifo_tb.v +++ /dev/null @@ -1,173 +0,0 @@ -module fifo_tb(); - - localparam WIDTH = 36; - reg clk, rst; - wire short_full, short_empty, long_full, long_empty, giant_full, giant_empty; - wire casc_full, casc_empty, casc2_full, casc2_empty; - reg read, write; - - wire [WIDTH-1:0] short_do, long_do, casc_do, casc2_do, giant_do; - reg [WIDTH-1:0] di; - - reg clear = 0; - - shortfifo #(.WIDTH(WIDTH)) shortfifo - (.clk(clk),.rst(rst),.datain(di),.dataout(short_do),.clear(clear), - .read(read),.write(write),.full(short_full),.empty(short_empty)); - - longfifo #(.WIDTH(WIDTH), .SIZE(4)) longfifo - (.clk(clk),.rst(rst),.datain(di),.dataout(long_do),.clear(clear), - .read(read),.write(write),.full(long_full),.empty(long_empty)); - - cascadefifo #(.WIDTH(WIDTH), .SIZE(4)) cascadefifo - (.clk(clk),.rst(rst),.datain(di),.dataout(casc_do),.clear(clear), - .read(read),.write(write),.full(casc_full),.empty(casc_empty)); - - cascadefifo2 #(.WIDTH(WIDTH), .SIZE(4)) cascadefifo2 - (.clk(clk),.rst(rst),.datain(di),.dataout(casc2_do),.clear(clear), - .read(read),.write(write),.full(casc2_full),.empty(casc2_empty)); - - wire [17:0] RAM_D; - wire [18:0] RAM_A; - wire RAM_CLK, RAM_WEn, RAM_LDn, RAM_CE1n, RAM_OEn, RAM_CENn; - - giantfifo #(.WIDTH(WIDTH)) giantfifo - (.clk(clk),.rst(rst),.datain(di),.dataout(giant_do),.clear(clear), - .read(read),.write(write),.full(giant_full),.empty(giant_empty), - .RAM_D(RAM_D),.RAM_A(RAM_A),.RAM_CE1n(RAM_CE1n),.RAM_CENn(RAM_CENn), - .RAM_CLK(RAM_CLK),.RAM_WEn(RAM_WEn),.RAM_OEn(RAM_OEn),.RAM_LDn(RAM_LDn) - ); - - wire MODE = 1'b0; - cy1356 ram_model(.d(RAM_D),.clk(RAM_CLK),.a(RAM_A), - .bws(2'b00),.we_b(RAM_WEn),.adv_lb(RAM_LDn), - .ce1b(RAM_CE1n),.ce2(1'b1),.ce3b(1'b0), - .oeb(RAM_OEn),.cenb(RAM_CENn),.mode(MODE) - ); - - initial rst = 1; - initial #1000 rst = 0; - initial clk = 0; - always #50 clk = ~clk; - - initial di = 36'h300AE; - initial read = 0; - initial write = 0; - - always @(posedge clk) - if(write) - di <= di + 1; - - always @(posedge clk) - begin - if(short_full != long_full) - $display("Error: FULL mismatch"); - if(short_empty != long_empty) - $display("Note: EMPTY mismatch, usually not a problem (longfifo has 2 cycle latency)"); - if(read & (short_do != long_do)) - $display("Error: DATA mismatch"); - end - - initial $dumpfile("giantfifo_tb.vcd"); - initial $dumpvars(0,fifo_tb); - - initial - begin - @(negedge rst); - @(posedge clk); - repeat (10) - @(posedge clk); - write <= 1; - @(posedge clk); - write <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - read <= 1; - @(posedge clk); - read <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - - repeat(10) - begin - write <= 1; - @(posedge clk); - write <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - read <= 1; - @(posedge clk); - read <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - end // repeat (10) - - write <= 1; - repeat (4) - @(posedge clk); - write <= 0; - @(posedge clk); - read <= 1; - repeat (4) - @(posedge clk); - read <= 0; - @(posedge clk); - - - write <= 1; - repeat (4) - @(posedge clk); - write <= 0; - @(posedge clk); - repeat (4) - begin - read <= 1; - @(posedge clk); - read <= 0; - @(posedge clk); - end - - write <= 1; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - read <= 1; - repeat (5) - @(posedge clk); - write <= 0; - @(posedge clk); - @(posedge clk); - read <= 0; - @(posedge clk); - - write <= 1; - repeat (16) - @(posedge clk); - write <= 0; - @(posedge clk); - - read <= 1; - repeat (16) - @(posedge clk); - read <= 0; - @(posedge clk); - - repeat (10) - @(posedge clk); - $finish; - end -endmodule // longfifo_tb diff --git a/control_lib/newfifo/.gitignore b/control_lib/newfifo/.gitignore new file mode 100644 index 000000000..cba7efc8e --- /dev/null +++ b/control_lib/newfifo/.gitignore @@ -0,0 +1 @@ +a.out diff --git a/control_lib/newfifo/fifo18_to_ll8.v b/control_lib/newfifo/fifo18_to_ll8.v deleted file mode 100644 index 4653244ef..000000000 --- a/control_lib/newfifo/fifo18_to_ll8.v +++ /dev/null @@ -1,58 +0,0 @@ - -module fifo18_to_ll8 - (input clk, input reset, input clear, - input [35:0] f18_data, - input f18_src_rdy_i, - output f18_dst_rdy_o, - - output reg [7:0] ll_data, - output ll_sof_n, - output ll_eof_n, - output ll_src_rdy_n, - input ll_dst_rdy_n); - - wire ll_sof, ll_eof, ll_src_rdy; - assign ll_sof_n = ~ll_sof; - assign ll_eof_n = ~ll_eof; - assign ll_src_rdy_n = ~ll_src_rdy; - wire ll_dst_rdy = ~ll_dst_rdy_n; - - wire f18_sof = f18_data[32]; - wire f18_eof = f18_data[33]; - wire f18_occ = f18_data[35:34]; - wire advance, end_early; - reg [1:0] state; - assign debug = {29'b0,state}; - - always @(posedge clk) - if(reset) - state <= 0; - else - if(advance) - if(ll_eof) - state <= 0; - else - state <= state + 1; - - always @* - case(state) - 0 : ll_data = f18_data[31:24]; - 1 : ll_data = f18_data[23:16]; - 2 : ll_data = f18_data[15:8]; - 3 : ll_data = f18_data[7:0]; - default : ll_data = f18_data[31:24]; - endcase // case (state) - - assign ll_sof = (state==0) & f18_sof; - assign ll_eof = f18_eof & (((state==0)&(f18_occ==1)) | - ((state==1)&(f18_occ==2)) | - ((state==2)&(f18_occ==3)) | - (state==3)); - - assign ll_src_rdy = f18_src_rdy_i; - - assign advance = ll_src_rdy & ll_dst_rdy; - assign f18_dst_rdy_o = advance & ((state==3)|ll_eof); - assign debug = state; - -endmodule // ll8_to_fifo36 diff --git a/control_lib/newfifo/fifo36_to_ll8.v b/control_lib/newfifo/fifo36_to_ll8.v index 1befb9e6e..0dee1dfc6 100644 --- a/control_lib/newfifo/fifo36_to_ll8.v +++ b/control_lib/newfifo/fifo36_to_ll8.v @@ -1,6 +1,6 @@ module fifo36_to_ll8 - (input clk, reset, + (input clk, input reset, input clear, input [35:0] f36_data, input f36_src_rdy_i, output f36_dst_rdy_o, diff --git a/control_lib/newfifo/fifo_2clock.v b/control_lib/newfifo/fifo_2clock.v index 6b1eb607e..07ae090f2 100644 --- a/control_lib/newfifo/fifo_2clock.v +++ b/control_lib/newfifo/fifo_2clock.v @@ -1,9 +1,58 @@ +// FIXME ignores the AWIDTH (fifo size) parameter + module fifo_2clock - #(parameter DWIDTH=32, AWIDTH=9) - (input wclk, input [DWIDTH-1:0] datain, input write, output full, output reg [AWIDTH-1:0] level_wclk, - input rclk, output [DWIDTH-1:0] dataout, input read, output empty, output reg [AWIDTH-1:0] level_rclk, - input arst); + #(parameter WIDTH=36, SIZE=6) + (input wclk, input [WIDTH-1:0] datain, input src_rdy_i, output dst_rdy_o, output [15:0] space, + input rclk, output [WIDTH-1:0] dataout, output src_rdy_o, input dst_rdy_i, output [15:0] occupied, + input arst); + + wire [SIZE:0] level_rclk, level_wclk; // xilinx adds an extra bit if you ask for accurate levels + wire full, empty, write, read; + + assign dst_rdy_o = ~full; + assign src_rdy_o = ~empty; + assign write = src_rdy_i & dst_rdy_o; + assign read = src_rdy_o & dst_rdy_i; + + generate + if(WIDTH==36) + if(SIZE==9) + fifo_xlnx_512x36_2clk fifo_xlnx_512x36_2clk + (.rst(rst), + .wr_clk(wclk),.din(datain),.full(full),.wr_en(write),.wr_data_count(level_wclk), + .rd_clk(rclk),.dout(dataout),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); + else if(SIZE==11) + fifo_xlnx_2Kx36_2clk fifo_xlnx_2Kx36_2clk + (.rst(rst), + .wr_clk(wclk),.din(datain),.full(full),.wr_en(write),.wr_data_count(level_wclk), + .rd_clk(rclk),.dout(dataout),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); + else if(SIZE==6) + fifo_xlnx_64x36_2clk fifo_xlnx_64x36_2clk + (.rst(rst), + .wr_clk(wclk),.din(datain),.full(full),.wr_en(write),.wr_data_count(level_wclk), + .rd_clk(rclk),.dout(dataout),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); + else + fifo_xlnx_512x36_2clk fifo_xlnx_512x36_2clk + (.rst(rst), + .wr_clk(wclk),.din(datain),.full(full),.wr_en(write),.wr_data_count(level_wclk), + .rd_clk(rclk),.dout(dataout),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); + else if((WIDTH==19)|(WIDTH==18)) + if(SIZE==4) + fifo_xlnx_16x19_2clk fifo_xlnx_16x19_2clk + (.rst(rst), + .wr_clk(wclk),.din(datain),.full(full),.wr_en(write),.wr_data_count(level_wclk), + .rd_clk(rclk),.dout(dataout),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); + endgenerate + + assign occupied = {{(16-SIZE-1){1'b0}},level_rclk}; + assign space = ((1<<SIZE)+1)-level_wclk; + +endmodule // fifo_2clock + +/* +`else + // ISE sucks, so the following doesn't work properly reg [AWIDTH-1:0] wr_addr, rd_addr; wire [AWIDTH-1:0] wr_addr_rclk, rd_addr_wclk; @@ -62,5 +111,7 @@ module fifo_2clock level_wclk <= wr_addr - rd_addr_wclk; always @(posedge rclk) level_rclk <= wr_addr_rclk - rd_addr; - +`endif endmodule // fifo_2clock + +*/ diff --git a/control_lib/newfifo/fifo_2clock_casc.v b/control_lib/newfifo/fifo_2clock_casc.v deleted file mode 100644 index e9b0cfc25..000000000 --- a/control_lib/newfifo/fifo_2clock_casc.v +++ /dev/null @@ -1,31 +0,0 @@ - -module fifo_2clock_casc - #(parameter DWIDTH=32, AWIDTH=9) - (input wclk, input [DWIDTH-1:0] datain, input write, output full, output [AWIDTH-1:0] level_wclk, - input rclk, output [DWIDTH-1:0] dataout, input read, output empty, output [AWIDTH-1:0] level_rclk, - input arst); - - wire full_int, empty_int, full_int2, empty_int2, transfer, transfer2; - wire [DWIDTH-1:0] data_int, data_int2; - - shortfifo #(.WIDTH(DWIDTH)) shortfifo - (.clk(wclk), .rst(arst), .clear(0), - .datain(datain), .write(write), .full(full), - .dataout(data_int), .read(transfer), .empty(empty_int) ); - - assign transfer = ~full_int & ~empty_int; - - fifo_2clock #(.DWIDTH(DWIDTH),.AWIDTH(AWIDTH)) fifo_2clock - (.wclk(wclk), .datain(data_int), .write(transfer), .full(full_int), .level_wclk(level_wclk), - .rclk(rclk), .dataout(data_int2), .read(transfer2), .empty(empty_int2), .level_rclk(level_rclk), - .arst(arst) ); - - assign transfer2 = ~full_int2 & ~empty_int2; - - shortfifo #(.WIDTH(DWIDTH)) shortfifo2 - (.clk(rclk), .rst(arst), .clear(0), - .datain(data_int2), .write(transfer2), .full(full_int2), - .dataout(dataout), .read(read), .empty(empty) ); - -endmodule // fifo_2clock_casc - diff --git a/control_lib/newfifo/fifo_2clock_cascade.v b/control_lib/newfifo/fifo_2clock_cascade.v new file mode 100644 index 000000000..5ce726977 --- /dev/null +++ b/control_lib/newfifo/fifo_2clock_cascade.v @@ -0,0 +1,35 @@ + +module fifo_2clock_cascade + #(parameter WIDTH=32, SIZE=9) + (input wclk, input [WIDTH-1:0] datain, input src_rdy_i, output dst_rdy_o, output [15:0] space, + input rclk, output [WIDTH-1:0] dataout, output src_rdy_o, input dst_rdy_i, output [15:0] occupied, + input arst); + + wire [WIDTH-1:0] data_int1, data_int2; + wire src_rdy_int1, src_rdy_int2, dst_rdy_int1, dst_rdy_int2; + wire [SIZE-1:0] level_wclk, level_rclk; + wire [4:0] s1_space, s1_occupied, s2_space, s2_occupied; + wire [15:0] l_space, l_occupied; + + fifo_short #(.WIDTH(WIDTH)) shortfifo + (.clk(wclk), .reset(arst), .clear(0), + .datain(datain), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), + .dataout(data_int1), .src_rdy_o(src_rdy_int1), .dst_rdy_i(dst_rdy_int1), + .space(s1_space), .occupied(s1_occupied) ); + + fifo_2clock #(.WIDTH(WIDTH),.SIZE(SIZE)) fifo_2clock + (.wclk(wclk), .datain(data_int1), .src_rdy_i(src_rdy_int1), .dst_rdy_o(dst_rdy_int1), .space(l_space), + .rclk(rclk), .dataout(data_int2), .src_rdy_o(src_rdy_int2), .dst_rdy_i(dst_rdy_int2), .occupied(l_occupied), + .arst(arst) ); + + fifo_short #(.WIDTH(WIDTH)) shortfifo2 + (.clk(rclk), .reset(arst), .clear(0), + .datain(data_int2), .src_rdy_i(src_rdy_int2), .dst_rdy_o(dst_rdy_int2), + .dataout(dataout), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i), + .space(s2_space), .occupied(s2_occupied)); + + // Be conservative -- Only advertise space from input side of fifo, occupied from output side + assign space = {11'b0,s1_space} + l_space; + assign occupied = {11'b0,s2_occupied} + l_occupied; + +endmodule // fifo_2clock_cascade diff --git a/control_lib/newfifo/fifo_new_tb.v b/control_lib/newfifo/fifo_new_tb.v deleted file mode 100644 index f561df7fa..000000000 --- a/control_lib/newfifo/fifo_new_tb.v +++ /dev/null @@ -1,158 +0,0 @@ -module fifo_new_tb(); - - reg clk = 0; - reg rst = 1; - reg clear = 0; - initial #1000 rst = 0; - always #50 clk = ~clk; - - reg [31:0] f36_data = 0; - reg [1:0] f36_occ = 0; - reg f36_sof = 0, f36_eof = 0; - - wire [35:0] f36_in = {f36_occ,f36_eof,f36_sof,f36_data}; - reg src_rdy_f36i = 0; - wire dst_rdy_f36i; - - wire [35:0] f36_out, f36_out2; - wire src_rdy_f36o; - reg dst_rdy_f36o = 0; - - //fifo_cascade #(.WIDTH(36), .SIZE(4)) fifo_cascade36 - //fifo_long #(.WIDTH(36), .SIZE(4)) fifo_cascade36 - - wire i1_sr, i1_dr; - wire i2_sr, i2_dr; - wire i3_sr, i3_dr; - reg i4_dr = 0; - wire i4_sr; - - wire [35:0] i1, i4; - wire [18:0] i2, i3; - - wire [7:0] ll_data; - wire ll_src_rdy_n, ll_dst_rdy_n, ll_sof_n, ll_eof_n; - - fifo_short #(.WIDTH(36)) fifo_short1 - (.clk(clk),.reset(rst),.clear(clear), - .datain(f36_in),.src_rdy_i(src_rdy_f36i),.dst_rdy_o(dst_rdy_f36i), - .dataout(i1),.src_rdy_o(i1_sr),.dst_rdy_i(i1_dr) ); - - fifo36_to_fifo19 fifo36_to_fifo19 - (.clk(clk),.reset(rst),.clear(clear), - .f36_datain(i1),.f36_src_rdy_i(i1_sr),.f36_dst_rdy_o(i1_dr), - .f19_dataout(i2),.f19_src_rdy_o(i2_sr),.f19_dst_rdy_i(i2_dr) ); - - fifo19_to_ll8 fifo19_to_ll8 - (.clk(clk),.reset(rst),.clear(clear), - .f19_data(i2),.f19_src_rdy_i(i2_sr),.f19_dst_rdy_o(i2_dr), - .ll_data(ll_data),.ll_sof_n(ll_sof_n),.ll_eof_n(ll_eof_n), - .ll_src_rdy_n(ll_src_rdy_n),.ll_dst_rdy_n(ll_dst_rdy_n)); - - ll8_to_fifo19 ll8_to_fifo19 - (.clk(clk),.reset(rst),.clear(clear), - .ll_data(ll_data),.ll_sof_n(ll_sof_n),.ll_eof_n(ll_eof_n), - .ll_src_rdy_n(ll_src_rdy_n),.ll_dst_rdy_n(ll_dst_rdy_n), - .f19_data(i3),.f19_src_rdy_o(i3_sr),.f19_dst_rdy_i(i3_dr) ); - - fifo19_to_fifo36 fifo19_to_fifo36 - (.clk(clk),.reset(rst),.clear(clear), - .f19_datain(i3),.f19_src_rdy_i(i3_sr),.f19_dst_rdy_o(i3_dr), - .f36_dataout(i4),.f36_src_rdy_o(i4_sr),.f36_dst_rdy_i(i4_dr) ); - - task ReadFromFIFO36; - begin - $display("Read from FIFO36"); - #1 i4_dr <= 1; - while(1) - begin - while(~i4_sr) - @(posedge clk); - $display("Read: %h",i4); - @(posedge clk); - end - end - endtask // ReadFromFIFO36 - - reg [15:0] count; - task PutPacketInFIFO36; - input [31:0] data_start; - input [31:0] data_len; - begin - count <= 4; - src_rdy_f36i <= 1; - f36_data <= data_start; - f36_sof <= 1; - f36_eof <= 0; - f36_occ <= 0; - - $display("Put Packet in FIFO36"); - while(~dst_rdy_f36i) - @(posedge clk); - @(posedge clk); - $display("PPI_FIFO36: Entered First Line"); - f36_sof <= 0; - while(count+4 < data_len) - begin - f36_data <= f36_data + 32'h01010101; - count <= count + 4; - while(~dst_rdy_f36i) - @(posedge clk); - @(posedge clk); - $display("PPI_FIFO36: Entered New Line"); - end - f36_data <= f36_data + 32'h01010101; - f36_eof <= 1; - if(count + 4 == data_len) - f36_occ <= 0; - else if(count + 3 == data_len) - f36_occ <= 3; - else if(count + 2 == data_len) - f36_occ <= 2; - else - f36_occ <= 1; - while(~dst_rdy_f36i) - @(posedge clk); - @(posedge clk); - f36_occ <= 0; - f36_eof <= 0; - f36_data <= 0; - src_rdy_f36i <= 0; - $display("PPI_FIFO36: Entered Last Line"); - end - endtask // PutPacketInFIFO36 - - initial $dumpfile("fifo_new_tb.vcd"); - initial $dumpvars(0,fifo_new_tb); - - initial - begin - @(negedge rst); - //#10000; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - ReadFromFIFO36; - end - - initial - begin - @(negedge rst); - @(posedge clk); - @(posedge clk); - PutPacketInFIFO36(32'hA0B0C0D0,12); - @(posedge clk); - @(posedge clk); - #10000; - @(posedge clk); - PutPacketInFIFO36(32'hE0F0A0B0,36); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - end - - initial #20000 $finish; -endmodule // longfifo_tb diff --git a/control_lib/newfifo/fifo_tb.v b/control_lib/newfifo/fifo_tb.v index 98fd63f8d..f561df7fa 100644 --- a/control_lib/newfifo/fifo_tb.v +++ b/control_lib/newfifo/fifo_tb.v @@ -1,155 +1,158 @@ -module fifo_tb(); +module fifo_new_tb(); - reg clk, rst; - wire short_full, short_empty, long_full, long_empty; - wire casc_full, casc_empty, casc2_full, casc2_empty; - reg read, write; - - wire [7:0] short_do, long_do; - wire [7:0] casc_do, casc2_do; - reg [7:0] di; - - reg clear = 0; - - shortfifo #(.WIDTH(8)) shortfifo - (.clk(clk),.rst(rst),.datain(di),.dataout(short_do),.clear(clear), - .read(read),.write(write),.full(short_full),.empty(short_empty)); + reg clk = 0; + reg rst = 1; + reg clear = 0; + initial #1000 rst = 0; + always #50 clk = ~clk; - longfifo #(.WIDTH(8), .SIZE(4)) longfifo - (.clk(clk),.rst(rst),.datain(di),.dataout(long_do),.clear(clear), - .read(read),.write(write),.full(long_full),.empty(long_empty)); + reg [31:0] f36_data = 0; + reg [1:0] f36_occ = 0; + reg f36_sof = 0, f36_eof = 0; - cascadefifo #(.WIDTH(8), .SIZE(4)) cascadefifo - (.clk(clk),.rst(rst),.datain(di),.dataout(casc_do),.clear(clear), - .read(read),.write(write),.full(casc_full),.empty(casc_empty)); + wire [35:0] f36_in = {f36_occ,f36_eof,f36_sof,f36_data}; + reg src_rdy_f36i = 0; + wire dst_rdy_f36i; + + wire [35:0] f36_out, f36_out2; + wire src_rdy_f36o; + reg dst_rdy_f36o = 0; - cascadefifo2 #(.WIDTH(8), .SIZE(4)) cascadefifo2 - (.clk(clk),.rst(rst),.datain(di),.dataout(casc2_do),.clear(clear), - .read(read),.write(write),.full(casc2_full),.empty(casc2_empty)); + //fifo_cascade #(.WIDTH(36), .SIZE(4)) fifo_cascade36 + //fifo_long #(.WIDTH(36), .SIZE(4)) fifo_cascade36 + + wire i1_sr, i1_dr; + wire i2_sr, i2_dr; + wire i3_sr, i3_dr; + reg i4_dr = 0; + wire i4_sr; + + wire [35:0] i1, i4; + wire [18:0] i2, i3; - initial rst = 1; - initial #1000 rst = 0; - initial clk = 0; - always #50 clk = ~clk; + wire [7:0] ll_data; + wire ll_src_rdy_n, ll_dst_rdy_n, ll_sof_n, ll_eof_n; - initial di = 8'hAE; - initial read = 0; - initial write = 0; + fifo_short #(.WIDTH(36)) fifo_short1 + (.clk(clk),.reset(rst),.clear(clear), + .datain(f36_in),.src_rdy_i(src_rdy_f36i),.dst_rdy_o(dst_rdy_f36i), + .dataout(i1),.src_rdy_o(i1_sr),.dst_rdy_i(i1_dr) ); - always @(posedge clk) - if(write) - di <= di + 1; - - always @(posedge clk) - begin - if(short_full != long_full) - $display("Error: FULL mismatch"); - if(short_empty != long_empty) - $display("Note: EMPTY mismatch, usually not a problem (longfifo has 2 cycle latency)"); - if(read & (short_do != long_do)) - $display("Error: DATA mismatch"); - end + fifo36_to_fifo19 fifo36_to_fifo19 + (.clk(clk),.reset(rst),.clear(clear), + .f36_datain(i1),.f36_src_rdy_i(i1_sr),.f36_dst_rdy_o(i1_dr), + .f19_dataout(i2),.f19_src_rdy_o(i2_sr),.f19_dst_rdy_i(i2_dr) ); + + fifo19_to_ll8 fifo19_to_ll8 + (.clk(clk),.reset(rst),.clear(clear), + .f19_data(i2),.f19_src_rdy_i(i2_sr),.f19_dst_rdy_o(i2_dr), + .ll_data(ll_data),.ll_sof_n(ll_sof_n),.ll_eof_n(ll_eof_n), + .ll_src_rdy_n(ll_src_rdy_n),.ll_dst_rdy_n(ll_dst_rdy_n)); + + ll8_to_fifo19 ll8_to_fifo19 + (.clk(clk),.reset(rst),.clear(clear), + .ll_data(ll_data),.ll_sof_n(ll_sof_n),.ll_eof_n(ll_eof_n), + .ll_src_rdy_n(ll_src_rdy_n),.ll_dst_rdy_n(ll_dst_rdy_n), + .f19_data(i3),.f19_src_rdy_o(i3_sr),.f19_dst_rdy_i(i3_dr) ); + + fifo19_to_fifo36 fifo19_to_fifo36 + (.clk(clk),.reset(rst),.clear(clear), + .f19_datain(i3),.f19_src_rdy_i(i3_sr),.f19_dst_rdy_o(i3_dr), + .f36_dataout(i4),.f36_src_rdy_o(i4_sr),.f36_dst_rdy_i(i4_dr) ); + + task ReadFromFIFO36; + begin + $display("Read from FIFO36"); + #1 i4_dr <= 1; + while(1) + begin + while(~i4_sr) + @(posedge clk); + $display("Read: %h",i4); + @(posedge clk); + end + end + endtask // ReadFromFIFO36 + + reg [15:0] count; + task PutPacketInFIFO36; + input [31:0] data_start; + input [31:0] data_len; + begin + count <= 4; + src_rdy_f36i <= 1; + f36_data <= data_start; + f36_sof <= 1; + f36_eof <= 0; + f36_occ <= 0; + + $display("Put Packet in FIFO36"); + while(~dst_rdy_f36i) + @(posedge clk); + @(posedge clk); + $display("PPI_FIFO36: Entered First Line"); + f36_sof <= 0; + while(count+4 < data_len) + begin + f36_data <= f36_data + 32'h01010101; + count <= count + 4; + while(~dst_rdy_f36i) + @(posedge clk); + @(posedge clk); + $display("PPI_FIFO36: Entered New Line"); + end + f36_data <= f36_data + 32'h01010101; + f36_eof <= 1; + if(count + 4 == data_len) + f36_occ <= 0; + else if(count + 3 == data_len) + f36_occ <= 3; + else if(count + 2 == data_len) + f36_occ <= 2; + else + f36_occ <= 1; + while(~dst_rdy_f36i) + @(posedge clk); + @(posedge clk); + f36_occ <= 0; + f36_eof <= 0; + f36_data <= 0; + src_rdy_f36i <= 0; + $display("PPI_FIFO36: Entered Last Line"); + end + endtask // PutPacketInFIFO36 - initial $dumpfile("fifo_tb.vcd"); - initial $dumpvars(0,fifo_tb); + initial $dumpfile("fifo_new_tb.vcd"); + initial $dumpvars(0,fifo_new_tb); initial begin @(negedge rst); - @(posedge clk); - repeat (10) - @(posedge clk); - write <= 1; - @(posedge clk); - write <= 0; - @(posedge clk); - @(posedge clk); + //#10000; @(posedge clk); @(posedge clk); @(posedge clk); @(posedge clk); + ReadFromFIFO36; + end + + initial + begin + @(negedge rst); @(posedge clk); @(posedge clk); - read <= 1; - @(posedge clk); - read <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - - repeat(10) - begin - write <= 1; - @(posedge clk); - write <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - read <= 1; - @(posedge clk); - read <= 0; - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - @(posedge clk); - end // repeat (10) - - write <= 1; - repeat (4) - @(posedge clk); - write <= 0; - @(posedge clk); - read <= 1; - repeat (4) - @(posedge clk); - read <= 0; - @(posedge clk); - - - write <= 1; - repeat (4) - @(posedge clk); - write <= 0; + PutPacketInFIFO36(32'hA0B0C0D0,12); @(posedge clk); - repeat (4) - begin - read <= 1; - @(posedge clk); - read <= 0; - @(posedge clk); - end - - write <= 1; @(posedge clk); + #10000; @(posedge clk); + PutPacketInFIFO36(32'hE0F0A0B0,36); @(posedge clk); @(posedge clk); - read <= 1; - repeat (5) - @(posedge clk); - write <= 0; - @(posedge clk); - @(posedge clk); - read <= 0; @(posedge clk); - - write <= 1; - repeat (16) - @(posedge clk); - write <= 0; @(posedge clk); - - read <= 1; - repeat (16) - @(posedge clk); - read <= 0; @(posedge clk); - - repeat (10) - @(posedge clk); - $finish; end + + initial #20000 $finish; endmodule // longfifo_tb diff --git a/control_lib/newfifo/ll8_shortfifo.v b/control_lib/newfifo/ll8_shortfifo.v new file mode 100644 index 000000000..39ada9a4f --- /dev/null +++ b/control_lib/newfifo/ll8_shortfifo.v @@ -0,0 +1,13 @@ + + +module ll8_shortfifo + (input clk, input reset, input clear, + input [7:0] datain, input sof_i, input eof_i, input error_i, input src_rdy_i, output dst_rdy_o, + output [7:0] dataout, output sof_o, output eof_o, output error_o, output src_rdy_o, input dst_rdy_i); + + fifo_short #(.WIDTH(11)) fifo_short + (.clk(clk), .reset(reset), .clear(clear), + .datain({error_i,eof_i,sof_i,datain}), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), + .dataout({error_o,eof_o,sof_o,dataout}), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); + +endmodule // ll8_shortfifo diff --git a/coregen/coregen.cgp b/coregen/coregen.cgp index 1ee75a7b6..810d64dac 100644 --- a/coregen/coregen.cgp +++ b/coregen/coregen.cgp @@ -1,10 +1,10 @@ -# Date: Mon Feb 4 20:12:22 2008 +# Date: Thu Sep 3 17:40:48 2009 SET addpads = False SET asysymbol = False SET busformat = BusFormatAngleBracketNotRipped SET createndf = False SET designentry = Verilog -SET device = xc3s1500 +SET device = xc3s2000 SET devicefamily = spartan3 SET flowvendor = Other SET formalverification = False diff --git a/coregen/fifo_xlnx_16x19_2clk.ngc b/coregen/fifo_xlnx_16x19_2clk.ngc new file mode 100644 index 000000000..b12d34d7c --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$3f24g<,[o}e~g`n;"2*413&;$>"9 > %10?*nhel%fmyz cnpfc`h(|dz$Sni fhdl[}jipV;=t<7P2bnh*kah92:?7=>=0593477339:=<95?8122?45<9'::>6?6:HLSQQ<cag6:47>11592=?IR\Y__6iazt=3;>5863;80>=:432006>5?l29x>=>?ff662(363=;n794FNQWW>uthoVof|ywPtipfwm:4294996:5IORVP?vugnUna}zv_ujqavnXizyn~y2<:1<11>2=AGZ^X7~}of]fiur~W}byi~fPndebp`:4294:h6:5IORVP?vugnUmyabPtipfwm:4294986:5IORVP?vugnUmyabPtipfwmYf{zoyx1=50?07?1<NFY__6}|`g^dvhiYs`{oxdR`jg`vf86<76=1?NI<>8:79KPRW]]0omyoPcnwmp92=87;i784@UURVP?tcWmkmRm`uov?0?699k1>6B[[PTV9swYci}kTob{at=694;2<=H3==68;;72:41=11<K?7;766595=D753?K?7;ONA395A7=0L=13>9?;;9CFB1=?MJL:74:491230>?780805;:497230>?1>0>054864:;EB<4<I980M<<4A308E62<I<<256O\YOA\V@A33K;9;>5MU3:8FPUXAGLD=6M;;BC;E7=DM880OEKLK^NJG@HTMV^R\H=4CMP:?FIJE@^_II?;;BMQAZABFLXJXDAA_HLEK2=DZLK_II?4D59GF3@33MHI>>5KPN78@UTF8<1O\_O>5:FSVD423MZYM>:4F9:;6>@C;2LOO95IDBG7?CBDX=1MHIH<;GFS0>@CXL>0JK6?5:Dbhvc63N90KCJ>;H08M54<A880E?<4I2;8MKOS[]K_I>5FNW18MJD53EE=7AANDDF4?II@AJKG86BZT348HPR5WE>0@XZ<4:NVP10<D\^?SI84LTV7[I3<EZMDBn5BakmqR`ttafdh7@gaosTfvvohf:1E==:4N0237>H69:1E=?=4N010?K73;2D:9>5A1718J4143G;3?6@>929M655<F;;87C<=3:L176=I:=90B?8<;O0;7>H4::1E?>=4N270?K50;2D85>5A4018J1243G>>?6@;629M0<5<F<:87C;=3:L606=I=<80B;=4N760?K02;2D=:>5A6618J3>43G<2>6@83:L446=I?890B:<<;O507>H0<:1E;8=4N640?K10;2D<4>5A7808J=5<F1:87C6>3:L;66=I0:90B5:<;O::6>H>;2D2<>5A9018J<443G38?6@6629M=25<F0287C76f:LA[GSTX@DT\_A_S69MAQQHZB;0C?5@K09S0>VFZ]k0\D@PBTQJ@]d<X@DTNX]AALG0?UTB92[37_OB17Z2@3=TG\XHI>5\PN68P\VB;:1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UiecQwos2345YUmzgx<=<;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_ckm[}iu89::S_k|umv276=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwYeagUsc>?03]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?2^Pfwpjs9:90Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTnd`Pxnp3456XZly~`y?<3:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^`jjZ~hz9:;=R\jstnw565<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXj`dTtb|?010\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4567W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;=R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?03]Qavsk|88:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7<3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`31?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?6;463\:$kh!rg-dg}(ddbr$~iQnup\flh;;78;7X> gsd-vc)`kq$h`fv re]sjqtXj`dT<?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ>219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^014>S7'nxm"h gbz-gim'{nT|cz}_ckm[6413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=6:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4566:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?2328Q5)`zo$yj"ilx/aoo})ulVzexQhc=2=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`848582_;#j|i.sd,cf~)keas#jPpovq[be;:78;7X> gsd-vc)`kq$h`fv re]sjqtXoj682<h4U1-dvc(un&mht#mcky-q`Zvi|{UloR>>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP10d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^02b>S7'nxm"h gbz-gim'{nT|cz}_fa\770<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm7<3<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8485>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1<1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:46;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP0378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX9;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP2378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX;;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>3:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2>>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8692?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:46;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\773<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ~hz9:;<?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRv`r123573<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ~hz9:;>??4U1-dvc(un&mht#mcky-tvZvi|{Uiec2?>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>2:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:56;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag682?>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ?219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^314>S7'nxm"h gbz-gim'~xT|cz}_ckm[7473\:$kh!rg-dg}(ddbr${Qnup\flhX;;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0105?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789;9:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012165=R8&myj#|i/fa{*fjlp&}yS}`{r^e`858582_;#j|i.sd,cf~)keas#z|Ppovq[be;978;7X> gsd-vc)`kq$h`fv ws]sjqtXoj692?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1=11g9V4*aun'xm#jmw.bnh|*quWyd~Ril_13e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]25c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[77a3\:$kh!rg-dg}(ddbr${Qnup\cfY4:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo595>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU:>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU8>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5969:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9595>55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z6502_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj>_00;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T>?64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y4:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWqey<=>?249V4*aun'xm#jmw.bnh|*quWyd~Ril_ymq4566:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWqey<=>=369V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.Ob`aYulVnhSdQndeqvf5678=9h7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$Aljk_sf\`fYnWhnoxl?012\g|:66:90Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%FxlPdhde[rtXzmUa}:<4:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos04543\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dz=?95Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"C|uc]gmc`X{UyhRzbp630<>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWjs7=3=n;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\g|:668;8n6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_ymq84869:h0Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%FxlPdhde[rtXzmUa}Qwos>0:47502_;#j|i.sd,ci6)zm%l~< hrea1*wbd'{nThnQf_10;?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcT=?64U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lY5:11^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^11<>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS9=>;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoXe|r;<=<30?16?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?4;YT_89:7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$~iQkc^k\ip~78987=3=<;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoXe|r;<=<31?3277=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236979::;0Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;692><4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?2=>012?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?7;553\:$kh!rg-dh5(ul&my=#i}db0-vae(zmUooRgPmtz3454;;7;8:6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:90>0>_RU374=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236929;;1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^ov|567:5>5=>84U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?2;>0]PS54f3\:$kh!rg-dh5(ul&my=#|iwgv,VDKXZMUNBRHXFU31=>S7'nxm"h gm2-va)`z8$yjzh{/SCN[WC@G\^TIC?=b:W3+bta&{l$ka>!re-dv4(un~l#_OB_WCOMAYA_O^:=>=4U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe302>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c9$Ce?55Z0.eqb+ta'nf;"j gs3-vcqa|&i~~Qiwgv\wqgsmVLXARHId0/Jj474;2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[CUJWOLo>>84U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe0.Mk5?3\:$kh!rg-dh5(ul&my=#|iwgv,gptuWo}mxR}{aug\BVKXNOn9!D`>13:8Q5)`zo$yj"ic0/pg+bt6&{l|jy!jmqvz[cqa|Vli>:5Z0.eqb+ta'nf;"j gs3-vcqa|&of|ywPfvdw[l4b3\:$kh!rg-dh5(ul&my=#|iwgv,ahvsqVl|jyQf_np34565n2_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^mq45679;?0Y=!hrg,qb*ak8'xo#j|>.sdtbq)r{lxTzlbfd3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTe>>4U1-dvc(un&mg<#|k/fpbw+tt|z%ym`Qjmqvz[cdXaVey<=>?369V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?012240YT_9987X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[lYhz9:;<<?:369V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?012250YT_9997X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[lYhz9:;<?9<2:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVcTc>?01:;5c=R8&myj#|i/fn3*wb(zhgTzlbfd^dtbq443\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu110>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|?8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{9208Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7<3?>_HLU[54d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<0<257e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|32?326f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2<>032b>S7'nxm"h gm2-va)uxg~y#naznu>3:4`<]9%l~k }f.eo4+tc'{zex!lotlw8486n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:568l0Y=!hrg,qb*ak8'xo#~ats-`kphs4:4:i6[?/fpe*w`(oe:%~i!}povq+firf}U;=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T=<k4U1-dvc(un&mg<#|k/srmpw)dg|dS??j;T2,cw`)zo%l`= }d.psjqt(kfexR==2:W3+bta&{l$ka>!re-qtkru'je~byQk1=2=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:66;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;7>3<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><2<15>S7'nxm"h gm2-va)uxg~y#naznu]g5Z65;2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9V:T=??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P1318Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\5Z7592_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9V89?6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R<P1338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\775<]9%l~k }f.eo4+tc'{zex!lotlw[a7X;V;986[?/fpe*w`(oe:%~i!}povq+firf}Uecy>?000;?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkWohTe?;4U1-dvc(un&mg<#y}/fubw+qt|z%ym`Qiumn\m7e<]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTeRa}01236c=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZ`rdeUbSb|?01225=543\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQ`r123447?WZ];>k5Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]j[jt789::8<<j;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[lYhz9:;<?8=e:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXg{:;<=;<2d9V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYnWfx;<=>63528Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.Ob`aYpzVnjxlQlotlw[lYflm:;<=Qly=3=05=R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HgclV}ySio{a^alqkrXaVkoh=>?0^az8683:2_;#j|i.sd,ci6){%l{im>.vf`a}r(EhnoSz|Pd`vb[firf}UbSljk0123[f;;7;:8;5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vir0>0>1^QT415<]9%l~k }f.eo4+qu'n}oo< xdbg{p*KflmU|~Rjnt`]`kphsW`Ujhi>?01]{kw:668;??6[?/fpe*w`(oe:%{!hwea2*rbdmq~$Aljk_vp\`drfWje~byQf_`fg4567Wqey0?0>1518Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.Ob`aYpzVnjxlQlotlw[lYflm:;<=Qwos>0:473?2_;#j|i.sd,ci6){%l{im>.vf`a}r(EhnoSz|Pd`vb[firf}UbSljk0123[}iu4:4:=R]X1558Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.Ob`aYpzVnjxlQlotlw[lYflm:;<=Qwos>0:47X[^88>6[?/fpe*w`(oe:%{!hwea2*rbdmq~$A~{m_ekebZquW{nTx`~9329V4*aun'xm#jb?.vp,crbd9'}oohv{/LqvfZbnnoU|~R|k_uos34503\:$kh!rg-dh5(pz&m|hn?!weaf|q)J{|hThdhi_vp\vaYseyUhu1?1389V4*aun'xm#jb?.vp,crbd9'}oohv{/LqvfZbnnoU|~R|k_uos[f;97;:?l5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@}zb^fjbcYpzVxoSyc_ymq85869:k0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GxyoQkigd\swYulV~f|Rv`r=3=544a3\:$kh!rg-dh5(pz&m|hn?!weaf|q)caolT{Q}d^vnt969:o1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'~xThlzn_bmvjqYnW98m7X> gsd-vc)`d9$|~"ixdb3-saebp}%|~Rjnt`]`kphsW`U:>k5Z0.eqb+ta'nf;"z| gvf`5+qcklr#z|Pd`vb[firf}UbS?<i;T2,cw`)zo%l`= xr.et`f7)minty!xr^fbpdYdg|dSdQ<2g9V4*aun'xm#jb?.vp,crbd9'}oohv{/vp\`drfWje~byQf_51;?P6(o{l%~k!hl1,tv*aplj;%{imjxu-tvZbf|hUhcx`{_h]b`a67896:2>64U1-dvc(un&mg<#y}/fugg4(pljosx"y}_ecweZeh}g~TeRokd1234949;11^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'~xThlzn_bmvjqYnWhno<=>?<2<2`>S7'nxm"h gm2-sw)uidU|~Rka_h317>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz<259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex4==;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[}iu494:=RGAV^21g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1?1100`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey0?0>13a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?3?>1g9V4*aun'xm#jb?.vp,suhsz&idycz30?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=3=5c=R8&myj#|i/fn3*rt(yd~"m`uov?6;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9599l1^<"i}f/pe+bj7&~x${}`{r.alqkrX88o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW8;n7X> gsd-vc)`d9$|~"ynup,gjsi|V8:i6[?/fpe*w`(oe:%{!xpovq+firf}U8>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2?>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?5;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64;49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1=1209V4*aun'xm#jb?.vp,suhsz&idyczPd0]364=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<Q<239V4*aun'xm#jb?.vp,suhsz&idyczPd3>3:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;97897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90?0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=1=64=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y7::1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U;S<<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_000?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[4Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q<229V4*aun'xm#jb?.vp,suhsz&idyczPd3]0[4433\:$kh!rg-dh5(pz&}{by| cnwmpZhh|9:;=<84U1-dvc(un&gna"j`uu]j[5713\:$kh!rg-nah)cg|~TeR?>7:W3+bta&{l$ahc dnww[lY688=0Y=!hrg,qb*kbe&ndyyQf_0323>S7'nxm"h mdo,`jssW`U:><94U1-dvc(un&gna"j`uu]j[456?2_;#j|i.sd,i`k(lfSdQ>4058Q5)`zo$yj"cjm.flqqYnW8?:;6[?/fpe*w`(elg$hb{{_h]2241<]9%l~k }f.ofi*bh}}UbS<9>7:W3+bta&{l$ahc dnww[lY608<0Y=!hrg,qb*kbe&ndyyQf_335?P6(o{l%~k!bel-gkprXaV9::6[?/fpe*w`(elg$hb{{_h]753=R8&myj#|i/lgn+air|VcT9<84U1-dvc(un&gna"j`uu]j[3713\:$kh!rg-nah)cg|~TeR9>6:W3+bta&{l$ahc dnww[lY?9?1^<"i}f/pe+hcj'me~xRgP90g8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM03e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL335c=R8&myj#|i/lgn+bbj&mg$Aob_SCN547a3\:$kh!rg-nah)`ld$oa"C}al]QEH759o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ9:;m7X> gsd-vc)jmd%lh` km.OqehYUID;?=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF=8?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@?91g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB163e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL3;5c=R8&myj#|i/lgn+bbj&mg$Aob_SCN5<7b3\:$kh!rg-nah)`ld$oa"C}al]QEH46m2_;#j|i.sd,i`k(omg%h`!Br`o\VDK49l1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ<8o0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE<;n7X> gsd-vc)jmd%lh` km.OqehYUID<:i6[?/fpe*w`(elg$kic!dl-NvdkXZHG<=h5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF4<k4U1-dvc(un&gna"ikm/fn+HtfeVXJA4<:;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?4;413\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7==0=6:W3+bta&{l$ahc geo-`h)X~hxbbikw01238479:?1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1?=>348Q5)`zo$yj"cjm.egi+bj'V|j~d`key2345:6;78=7X> gsd-vc)jmd%lh` km.]uewoillr;<=>315<12>S7'nxm"h mdo,cak)ld%Tzl|fneg{456748?5>;5Z0.eqb+ta'dof#jjb.eo,[sguagnnt=>?0=35:70<]9%l~k }f.ofi*ace'nf#Rxnrhlga}67896:;3<9;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?5=85=2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0<0=5:W3+bta&{l$ahc geo-`h)X~hxbbikw01238785=2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0>0=5:W3+bta&{l$ahc geo-`h)X~hxbbikw01238185=2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;080=5:W3+bta&{l$ahc geo-`h)X~hxbbikw01238385=2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0:0=5:W3+bta&{l$ahc geo-`h)X~hxbbikw01238=85=2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;040>e:W3+bta&{l$ahc geo-`h)cg|~Te1>11g9V4*aun'xm#`kb/ffn*ak(lfSd2>0?3e?P6(o{l%~k!bel-d`h(ce&ndyyQf<03=5c=R8&myj#|i/lgn+bbj&mg$hb{{_h>26;7a3\:$kh!rg-nah)`ld$oa"j`uu]j84599o1^<"i}f/pe+hcj'nnf"ic dnww[l:6<7;m7X> gsd-vc)jmd%lh` km.flqqYn48?5=k5Z0.eqb+ta'dof#jjb.eo,`jssW`6::3?i;T2,cw`)zo%fi`!hdl,gi*bh}}Ub0<911g9V4*aun'xm#`kb/ffn*ak(lfSd2>8?3f?P6(o{l%~k!bel-d`h(ce&ndyyQf<0<2a>S7'nxm"h mdo,cak)ld%ocxzPi=0=5`=R8&myj#|i/lgn+bbj&mg$hb{{_h>0:4c<]9%l~k }f.ofi*ace'nf#iazt^k?0;7b3\:$kh!rg-nah)`ld$oa"j`uu]j8086m2_;#j|i.sd,i`k(omg%h`!kotv\m9099l1^<"i}f/pe+hcj'nnf"ic dnww[l:068o0Y=!hrg,qb*kbe&moa#jb/emvpZo;07;n7X> gsd-vc)jmd%lh` km.flqqYn404:h6[?/fpe*w`(elg$kic!dl-gkprXaV::h6[?/fpe*w`(elg$kic!dl-gkprXaV;:i6[?/fpe*w`(elg$kic!dl-gkprXaV;;=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U:=<k4U1-dvc(un&gna"ikm/fn+air|VcT=??j;T2,cw`)zo%fi`!hdl,gi*bh}}UbS<=>e:W3+bta&{l$ahc geo-`h)cg|~TeR?;1d9V4*aun'xm#`kb/ffn*ak(lfSdQ>50g8Q5)`zo$yj"cjm.egi+bj'me~xRgP173f?P6(o{l%~k!bel-d`h(ce&ndyyQf_052a>S7'nxm"h mdo,cak)ld%ocxzPi^3;5a=R8&myj#|i/lgn+bbj&mg$hb{{_h]15a=R8&myj#|i/lgn+bbj&mg$hb{{_h]05a=R8&myj#|i/lgn+bbj&mg$hb{{_h]75a=R8&myj#|i/lgn+bbj&mg$hb{{_h]65a=R8&myj#|i/lgn+bbj&mg$hb{{_h]55a=R8&myj#|i/lgn+bbj&mg$hb{{_h]45a=R8&myj#|i/lgn+bbj&mg$hb{{_h];5a=R8&myj#|i/lgn+bbj&mg$hb{{_h]:52=R8&myj#|i/scn[wc`g|~Tic?k;T2,cw`)zo%yylck.pg[wusWhyyij<?;T2,cw`)zo%yylck.pg[wusWhyyijQk1328Q5)`zo$yj"||tcnh+wbXzz~Tm~|jg^f15f=R8&myj#|i/sqwfim(zmUyyQlol`2`>S7'nxm"h rrvahn)ulVxxxRm`mc32a>S7'nxm"h rrvahn)ulVxxxR|jg=2=5`=R8&myj#|i/sqwfim(zmUyyQ}ef>2:4c<]9%l~k }f.pppgjl'{nT~~zPrde?6;7c3\:$kh!rg-qwqdkc&xoS}{_sgd[57c3\:$kh!rg-qwqdkc&xoS}{_sgd[47c3\:$kh!rg-qwqdkc&xoS}{_sgd[77c3\:$kh!rg-qwqdkc&}yS}{_`qqab473\:$kh!rg-qwqdkc&}yS}{_`qqabYc9;:0Y=!hrg,qb*tt|kf`#z|Prrv\evtboVn9=n5Z0.eqb+ta'{ynae ws]qwqYdgdh:h6[?/fpe*w`(zz~i`f!xr^pppZehek;:i6[?/fpe*w`(zz~i`f!xr^pppZtbo5:5=h5Z0.eqb+ta'{ynae ws]qwqYumn6:2<j4U1-dvc(un&xxxobd/vp\vvrXzlmT<<j4U1-dvc(un&xxxobd/vp\vvrXzlmT=l5ZSDP\EIOF[j1^_H\PVHQJFIC43_IH56XFEV]W]UC33^IGG?5XE0f8\LJNFQ'SHO.?.0"PPPD'8';+M^MFI79[WQJNJ>1S_YQHNE`8\ZEHZLUBBKA9;Yfa[Lba3QncS]|fmWgqwlii991Sh`QBakmqR`ttafd:<6Vkm^OjjjtQm{ybccm4amolwqYbey~rn6ocmnqw[cskd?1imnezpe9aefmrxVgj~fk}3:aooa=ci}kTob{at)2*`>bf|hUhcx`{(0+g?agsiVidycz'2(f8`drfWje~by&<)e9geqgXkfex%:&d:fbpdYdg|d0=0i;ecweZeh}g~787>17:famqcuz?1oec&?)79gmk.6!>1oec&>0(58`lh/98#<7iga(00*3>bnf!;8%:5kio*20,1<l`d#=8'8;ekm,40.?2nbb%?8)69gmk.60 <0hd`'2(48`lh/; <0hd`'4(48`lh/= <0hd`'6(48`lh/? <0hd`'8(48`lh/1 <0hd`30?58`lh;994<7iga<03=3>bnf5;92:5kio>27;1<l`d7=908;ekm8439?2nbb1?9>69gmk:6?730hd`31983:2=cag6:4384dhl?5;0<l`d7>384dhl?7;0<l`d78384dhl?1;0<l`d7:384dhl?3;0<l`d74384dhl?=;1<lf$='8;emvp-7.02ndyy&>0(:8`jss 8;"46j`uu*26,><lf$<=&8:flqq.6< 20hb{{(07*<>bh}}"::$64dnww,41.02ndyy&>8(58`jss ;#<7iazt)1*3>bh}}"?%:5kotv+1,1<lf$;'8;emvp-1.?2ndyy&7)69gkpr/1 =0hb{{<1<;?air|5;;255kotv?548?3me~x1?=>99gkpr;9:437iazt=37:==cg|~7=807;emvp971611ocxz316<b?air|5;36=07;emvp97?6>1ocxz31?58`jss4;4<7iazt=1=3>bh}}6?2:5kotv?1;1<lf0;08;emvp919?2ndyy27>69gkpr;1720iigi2oeg1>cjx}s8>6hffn]dakcui}eyS{:P3-"[mioip)ID^H.Heogqeqiu(8:%=#><159emciXpedsS<8w18]1gim4:2lbjbQwloz\53~61V8h`f"iigm\c`hbzh~d~Rx;_2.MKKC+FFDN?oj4fhdl[}jipV;=t<7P2bnh(coagVmnbh|ntnp\r1Y4$riTdl}Piov\gim:8%iTdl}Pssqw95*dW{nTjk~=0.`[mgtW{nThlzn_bmvjq;6$jUoecQxievk94?+kVbjRy}_ecweZeh}g~6=!mPftno[cjfozUyyQyam?2(fYneyfnah`{aukljZr~xl79 nQzsd]figccllnT~hi20-a\swYazl{6=!mPurg\`jssW{y1<"l_tlgaw`kg~Ugcz3?,b]kevYh~lxm`by20-a\twckghnT`lzjnb{>4)eXlfSzgkti?2=)eXezmdbRxnl<3/gZtcWmo{xe3>6-a\lduX}gnn~kb`w<2/gZnf{Vkgab}{_gwoh86+kVbjR||t<3/gZbf|hUhcx`{_vkgpm;2$jUcm~Qxr^c`o86+kVxiRklc<2/gZehedeeSnb`cj?3(fYpzVkhgRb`w<2/gZtcWyd~Ryfduj>0)eX}zoTjzh{_ecweZeh}g~6=!mPh`q\eikh{}Una}zv=1.`[wbXlh~jSnaznu]tmaro5<&hSbxjrgnlsZjh4:'oRy}_qlwvZqnl}b68!mPpsmd[`kw|pUu}k20-a\swYci}kTob{at^uj`qn:=%iT|kco`f\v`at58&hSiazt^pppZpfd4:'oRfns^fbpdYdg|d1="l_qplcZ`rdeUdk|h^lfcdrbWkg1<:#c^uq[acw|a7::!mPpsmd[`kw|pUdk|h^lfcdrbWkg18"l_qplcZcjx}sTxe|jsi]bwvcu|V|j`0:#c^jbwZpfd`n6<!mPpsmd[cskdV~c~h}g_`qpawrX~hf6=8"lolrlj`hsWgkfi0hffn]{hk~X9?r:5R<llj.`[sgkamUgcz3?,b]svlkXn`ldSywe<726}51$jU{~biPftno[qwm4:'oRcjmnpz[qwm48'q?k4fhdl[}jipV;=t<7P2bnh[coagVmnbh|ntnp\r1Y4WqyS<:4ftno3>oi|Vigg55agb`vmib?3f|n~kb`w`9svjaXmdzu<:4psmd[`kw|pUdk|h)2*51=wzfmTi`~{y^vkv`uo 8#:86~}of]fiur~W}byi~f'2(37?uthoVof|ywPtipfwm.4!8<0|ah_dosp|Ys`{oxd1=50?3a?uthoVof|ywPtipfwmYf{zoyx%>&1c9svjaXmdzuRzgrdqk[dutm{~#=$?m;qplcZcjx}sTxe|jsi]bwvcu|!8"=o5rne\ahvsqV~c~h}g_`qpawr/; ;o7}|`g^gntqX|axneQnsrgqp95=87;i7}|`g^gntqX|axneQaefcwa-6.9k1{~biPelrw}ZrozlycSckhaug+5,7e3yxdkRkbpu{\pmtb{aUeijo{e)0*5g=wzfmTi`~{y^vkv`uoWgolmyk'3(3g?uthoVof|ywPtipfwmYimnki1=50?;8twi`Wog`<=4psmd[cskdV~c~h}g(1+27>vugnUmyabPtipfwm.6!890|ah_gwohZrozlyc$?'>3:rqkbYa}efTxe|jsi*0-43<x{elSk{cl^vkv`uo4:0;2<o4psmd[cskdV~c~h}g_`qpawr/8 ;j7}|`g^dvhiYs`{oxdRo|sdpw,4/6i2zycjQiumn\pmtb{aUj~k}t)0*5d=wzfmTjxbc_ujqavnXizyn~y&<)0a8twi`Wog`Rzgrdqk[dutm{~7?7>11`9svjaXn|fgSyf}erj\j`af|l";%<o4psmd[cskdV~c~h}g_ogdeqc/9 ;j7}|`g^dvhiYs`{oxdR`jg`vf,7/6i2zycjQiumn\pmtb{aUeijo{e)1*5f=wzfmTjxbc_ujqavnXflmjxh2<:1<5?wbXkea:<6|k_ecweZeh}g~#<$??;sf\`drfWje~by&>)028vaYci}kTob{at)0*55=ulVnjxlQlotlw,6/682xoSio{a^alqkr/< ;;7jPd`vb[firf}6;2<>4re]geqgXkfex1?1119q`Zbf|hUhcx`{<3<24>tcWmkmRm`uov?7;753{nThlzn_bmvjq:3294:<6|k_ecweZeh}g~783;4re]fj3=ulVxxx>5}su58wgosm{x?7~||t59wvpc>3|doihcov78rdjnl?1|~Rolk79tvZekc8:0{Qkauc\gjsi|!:"==5xr^fbpdYdg|d$<'>0:uq[agsiVidycz'2(33?rtXlh~jSnaznu*0-46<{UomyoPcnwmp-2.991|~Rjnt`]`kphs494:<6y}_ecweZeh}g~7=3??;vp\`drfWje~by2=>028swYci}kTob{at=1=57=pzVnjxlQlotlw81<768:0{Qkauc\gjsi|5>596y}_dl5?rtXzz~vLM~8d`9CD}7=N3>1=v];0;0;7?>=9:82<<h5a81gk45>3;0b?<8:59'672=:;:0q^=j:3:0>=<6;;3;=k4n92f8W0c=:1i1<7?<2822b?g>;l1X?h4=8b83>45519;m6l7<f:f1<3<7280:w^:?:3:0>=<6;;3;=k4n92f8rQd1290:6<4jezQ74?4?;321=><600d9e<5c3-8:h7;i;W011?4|}?=1=6{98;28y!d72o1i>5850;14>6<4?rB9=o5U39874g=900j644r$c:96=0<,;886?6:;h0ae?6=3f8h47>5$c096fb<fk;1<65`2b594?"e:38hh6`m1;38?j4d>3:1(o<52bf8jg7=:21d>n;50;&a6?4dl2di=7=4;n0`0?6=,k81>nj4nc390>=h:k91<7*m2;0a<>he93:07b<m2;29 g4=:k20bo?51:9l6g7=83.i>7<m8:la5?4<3f8i<7>5$c096g><fk;1?65`2`d94?"e:38i46`m1;68?l4dn3:17b<7a;29?j4?<3:17d<l3;29?l4ek3:17b<96;29 g4=:>20bo?50:9l633=83.i>7<88:la5?7<3f8=87>5$c0962><fk;1>65`27194?"e:38<46`m1;18?j41:3:1(o<526:8jg7=<21d>;?50;&a6?4002di=7;4;n054?6=,k81>:64nc392>=h:<l1<7*m2;04<>he93=07b<:e;29 g4=:>20bo?58:9l63c=83.i>7<88:la5??<3f8=h7>5$c0962><fk;1m65`27a94?"e:38<46`m1;`8?j41j3:1(o<526:8jg7=k21d>;o50;&a6?4002di=7j4;n05=?6=,k81>:64nc39a>=h:?21<7*m2;04<>he93l07b<97;29 g4=:>20bo?51198k73c290/n?4=799mf4<6921d>8m50;&a6?4002di=7?=;:k17c<72-h96?;>;o`2>5=<a;9n6=4+b38114=ij80:76g=3e83>!d52;?:7cl>:398m75d290/n?4=509mf4<432c9?o4?:%`1>7363gh:6954i31b>5<#j;099<5ab086?>o5;00;6)l=:372?kd62?10e?=7:18'f7<5=81en<48;:k172<72-h96?;>;o`2>==<a;><6=4+b38114=ij80276g=4783>!d52;?:7cl>:`98m722290/n?4=509mf4<e32c9894?:%`1>7363gh:6n54i360>5<#j;099<5ab08g?>o5<;0;6)l=:372?kd62l10e?:>:18'f7<5=81en<4i;:k105<72-h96?;>;o`2>46<3`88:7>5$c09607<fk;1=<54i316>5<#j;099<5ab0826>=n:ho1<75m20a94?7=83:pD??m;%`;>77d3fkm6=44}c77>5<6290;wE<>b:&a<?333f?86=44}c14>5<1=3n86hktH33a?_5?28<p=?4>a;3:>40=910:87o5108:>43=9:0:47?n:`82=?75200::7?::06956<693w/n54=889'1f<2:2.8o7<77:&0b?4?02.jn7oj;h0af?6=3f82i7>5;h0aa?6=3f8947>5;n0`5?6=3`89n7>5;h0:3?6=,k81>464nc394>=n:0<1<7*m2;0:<>he93;07d<65;29 g4=:020bo?52:9j6<2=83.i>7<68:la5?5<3`8im7>5;n0;`?6=3f8h47>5$c096fb<fk;1<65`2b594?"e:38hh6`m1;38?j4d>3:1(o<52bf8jg7=:21d>n;50;&a6?4dl2di=7=4;n0`0?6=,k81>nj4nc390>=h:k91<7*m2;0a<>he93:07b<m2;29 g4=:k20bo?51:9l6g7=83.i>7<m8:la5?4<3f8i<7>5$c096g><fk;1?65`2`d94?"e:38i46`m1;68?l4fk3:1(o<52`f8jg7=821b>ll50;&a6?4fl2di=7?4;h0be?6=,k81>lj4nc396>=n:h31<7*m2;0b`>he93907d<lf;29?j4493:1(o<52218jg7=821d>>>50;&a6?44;2di=7?4;n01b?6=,k81>>=4nc396>=h:;o1<7*m2;007>he93907b<=d;29 g4=::90bo?54:9l6=g=831d>5:50;9j6d4=83.i>7<n3:la5?6<3`8j=7>5$c096d5<fk;1=65f2`294?"e:38j?6`m1;08?l4>n3:1(o<52`18jg7=;21b>n=50;9j6=d=831b>?m50;9j6a6=831d>oj50;9l6f4=831d>?750;9l6f6=831b>om50;9l630=83.i>7<88:la5?6<3f8=97>5$c0962><fk;1=65`27694?"e:38<46`m1;08?j41;3:1(o<526:8jg7=;21d>;<50;&a6?4002di=7:4;n055?6=,k81>:64nc391>=h:?:1<7*m2;04<>he93<07b<:f;29 g4=:>20bo?57:9l60c=83.i>7<88:la5?><3f8=i7>5$c0962><fk;1565`27f94?"e:38<46`m1;c8?j41k3:1(o<526:8jg7=j21d>;l50;&a6?4002di=7m4;n05e?6=,k81>:64nc39`>=h:?31<7*m2;04<>he93o07b<98;29 g4=:>20bo?5f:9l631=83.i>7<88:la5?7732e99i4?:%`1>71?3gh:6<?4;n06g?6=,k81>:64nc3957=<a;396=4+b381=6=ij80;76g=9083>!d52;387cl>:098m7?7290/n?4=929mf4<532c94k4?:%`1>7?43gh:6>54i31e>5<#j;099<5ab083?>o5;l0;6)l=:372?kd62810e?=k:18'f7<5=81en<4=;:k17f<72-h96?;>;o`2>6=<a;9i6=4+b38114=ij80?76g=3`83>!d52;?:7cl>:498m75>290/n?4=509mf4<132c9?54?:%`1>7363gh:6:54i314>5<#j;099<5ab08;?>o5<>0;6)l=:372?kd62010e?:9:18'f7<5=81en<4n;:k100<72-h96?;>;o`2>g=<a;>?6=4+b38114=ij80h76g=4283>!d52;?:7cl>:e98m725290/n?4=509mf4<b32c98<4?:%`1>7363gh:6k54i363>5<#j;099<5ab0824>=n::<1<7*m2;065>he93;:76g=3483>!d52;?:7cl>:008?l45i3:17d<n7;29 g4=:h20bo?50:9j6d0=83.i>7<n8:la5?7<3`8j97>5$c096d><fk;1>65f2`694?"e:38j46`m1;18?l4>k3:1(o<528f8jg7=821b>4l50;&a6?4>l2di=7?4;h0:e?6=,k81>4j4nc396>=n:031<7*m2;0:`>he93907b<7e;29?j44<3:17d<ne;29?g45:3:1=7>50z&a<?333A89=6F=1c9l16<722wi>=650;194?6|,k218l5G2338L77e3A9>7)89:3`e?!3f2;1b?44?::k75?6=3fh?6=44}c027?6=;3:1<v*m8;6b?M4592B9=o5G349'23<5jo1/9l4=;h1:>5<<a=;1<75`b583>>{e:9=1<7=50;2x g>=<h1C>??4H33a?M523-<=6?li;%7b>7=n;00;66g;1;29?jd32900qo<>1;291?6=8r.i47;?;I015>N59k1C?85+6781fc=#=h097d=6:188m6d=831b8<4?::ka7?6=3fh?6=44}c026?6=;3:1<v*m8;6b?M4592B9=o5G349'23<5jo1/9l4=;h1:>5<<a=;1<75`b583>>{e:9<1<7;50;2x g>==91C>??4H33a?M523-<=6?li;%7b>7=n;00;66g<b;29?l262900eo=50;9lf1<722wi><>50;694?6|,k218k5G2338L77e3-?j6?5f3883>>o393:17dl<:188kg2=831vn?>i:187>5<7s-h369h4H302?M46j2.>m7<4i2;94?=n<80;66gm3;29?jd32900qo<?e;290?6=8r.i47:i;I015>N59k1/9l4=;h1:>5<<a=;1<75fb283>>ie<3:17pl=1883>1<729q/n54;f:J164=O:8h0(8o52:k0=?6=3`>:6=44ic194?=hj=0;66sm20:94?2=83:p(o654g9K677<@;;i7);n:39j7<<722c?=7>5;h`0>5<<gk>1<75rb01a>5<3290;w)l7:5d8L7463A8:n6*:a;58m6?=831b8<4?::ka7?6=3fh?6=44}c32f?6==3:1<v*m8;6g?M4592B9=o5+5`81?l5>2900e>j50;9j04<722ci?7>5;n`7>5<<uk;:o7>55;294~"e03>o7E<=1:J15g=#=h097d=6:188m6b=831b8<4?::ka7?6=3fh?6=44}c32`?6==3:1<v*m8;6g?M4592B9=o5+5`81?l5>2900e>j50;9j04<722ci?7>5;n`7>5<<uk;:i7>55;294~"e03>o7E<=1:J15g=#=h097d=6:188m6b=831b8<4?::ka7?6=3fh?6=44}c32b?6==3:1<v*m8;6g?M4592B9=o5+5`81?l5>2900e>j50;9j04<722ci?7>5;n`7>5<<uk;>;7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c36=?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;>n7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c36`?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;==7>54;294~"e03>m7E<=1:J15g=#=h097d=6:188m17=831bn>4?::ma0?6=3th::=4?:583>5}#j10?j6F=209K64d<,<k1>6g<9;29?l262900eo=50;9lf1<722wi=4k50;794?6|,k218n5G2338L77e3-?j6?5f3883>>o4j3:17d=k:188m17=831dn94?::a5d6=83?1<7>t$c:90f=O:;;0D??m;%7b>7=n;00;66g<b;29?l5c2900e9?50;9lf1<722wi=l<50;794?6|,k218n5G2338L77e3-?j6?5f3883>>o4j3:17d=k:188m17=831dn94?::a5d5=83?1<7>t$c:90f=O:;;0D??m;%7b>7=n;00;66g<b;29?l5c2900e9?50;9lf1<722wi=4750;794?6|,k218n5G2338L77e3-?j6?5f3883>>o4j3:17d=k:188m17=831dn94?::a5<>=83?1<7>t$c:90f=O:;;0D??m;%7b>7=n;00;66g<b;29?l5c2900e9?50;9lf1<722wi=4950;794?6|,k218n5G2338L77e3-?j6?5f3883>>o4j3:17d=k:188m17=831dn94?::a5<0=83?1<7>t$c:915=O:;;0D??m;%7b>2=n;00;66g<b;29?l262900eo=50;9lf1<722wi=:750;694?6|,k218o5G2338L77e3-?j6?5f3883>>o4l3:17d:>:188kg2=831vn<9n:187>5<7s-h369l4H302?M46j2.>m7<4i2;94?=n;m0;66g;1;29?jd32900qo?8b;290?6=8r.i47:m;I015>N59k1/9l4=;h1:>5<<a:n1<75f4083>>ie<3:17pl>7b83>1<729q/n54;b:J164=O:8h0(8o52:k0=?6=3`9o6=44i5394?=hj=0;66sm16f94?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rb0:f>5<2290;w)l7:5a8L7463A8:n6*:a;08m6?=831b?o4?::k0`?6=3`>:6=44oc694?=zj82m6=4::183!d?2<:0D?<>;I02f>"2i3=0e>750;9j7g<722c?=7>5;h`0>5<<gk>1<75rb0;3>5<2290;w)l7:5a8L7463A8:n6*:a;08m6?=831b?o4?::k0`?6=3`>:6=44oc694?=zj83:6=4::183!d?2=i0D?<>;I02f>"2i380e>750;9j7g<722c8h7>5;h62>5<<gk>1<75rb06e>5<2290;w)l7:428L7463A8:n6*:a;58m6?=831b?o4?::k75?6=3`h86=44oc694?=zj8?96=4::183!d?2=i0D?<>;I02f>"2i380e>750;9j7g<722c8h7>5;h62>5<<gk>1<75rb073>5<2290;w)l7:5a8L7463A8:n6*:a;08m6?=831b?o4?::k0`?6=3`>:6=44oc694?=zj8?:6=4::183!d?2=i0D?<>;I02f>"2i380e>750;9j7g<722c8h7>5;h62>5<<gk>1<75rbba94?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbb`94?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbbc94?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbb;94?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbg094?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbg394?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbg294?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbdd94?2=83:p(o654c9K677<@;;i7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rb02g>5<3290;w)l7:5`8L7463A8:n6*:a;08m6?=831b?i4?::k75?6=3fh?6=44}c33g?6=<3:1<v*m8;6a?M4592B9=o5+5`81?l5>2900e>j50;9j04<722ei87>5;|`24g<72=0;6=u+b987f>N5:81C><l4$4c96>o413:17d=k:188m17=831dn94?::a55g=83>1<7>t$c:90g=O:;;0D??m;%7b>7=n;00;66g<d;29?l262900co:50;9~f`1=83>1<7>t$c:90g=O:;;0D??m;%7b>7=n;00;66g<d;29?l262900co:50;9~f`0=83>1<7>t$c:90g=O:;;0D??m;%7b>7=n;00;66g<d;29?l262900co:50;9~f`3=83>1<7>t$c:90g=O:;;0D??m;%7b>7=n;00;66g<d;29?l262900co:50;9~f`2=83>1<7>t$c:90g=O:;;0D??m;%7b>7=n;00;66g<d;29?l262900co:50;9~f462290?6=4?{%`;>1d<@;8:7E<>b:J01>"1>38ij6*:a;08m6?=831b?i4?::k75?6=3fh?6=44}c330?6=<3:1<v*m8;6a?M4592B9=o5G349'23<5jo1/9l4=;h1:>5<<a:n1<75f4083>>ie<3:17pl>0283>1<729q/n54;b:J164=O:8h0D>;4$7496g`<,<k1>6g<9;29?l5c2900e9?50;9lf1<722wi==<50;694?6|,k218o5G2338L77e3A9>7)89:3`e?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjml1<7:50;2x g>=<k1C>??4H33a?M523-<=6?li;%7b>7=n;00;66g<d;29?l262900co:50;9~fac=83>1<7>t$c:90g=O:;;0D??m;I16?!012;hm7);n:39j7<<722c8h7>5;h62>5<<gk>1<75rbef94?2=83:p(o654c9K677<@;;i7E=:;%45>7da3-?j6?5f3883>>o4l3:17d:>:188kg2=831vnim50;694?6|,k218o5G2338L77e3A9>7)89:3`e?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjm=1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjm<1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjm?1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjm>1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjon1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjoi1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjoh1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zjok1<7:50;2x g>=<k1C>??4H33a?!3f2;1b?44?::k0`?6=3`>:6=44oc694?=zj8986=4;:183!d?2=h0D?<>;I02f>"2i380e>750;9j7a<722c?=7>5;n`7>5<<uk;8<7>54;294~"e03>i7E<=1:J15g=#=h097d=6:188m6b=831b8<4?::ma0?6=3th:?l4?:583>5}#j10?n6F=209K64d<,<k1>6g<9;29?l5c2900e9?50;9lf1<722wi=>950;694?6|,k218k5G2338L77e3-?j6:5f3883>>o393:17dl<:188kg2=831vn<=9:187>5<7s-h369h4H302?M46j2.>m794i2;94?=n<80;66gm3;29?jd32900qo?i2;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7a;3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?id;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7am3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?if;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg4783:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo<?1;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg47:3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo<?3;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg47<3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?i4;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7a=3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?i6;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7a?3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?i8;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7a13:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?ia;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7aj3:197>50z&a<?2d3A89=6F=1c9'1d<53`926=44i2`94?=n;m0;66g;1;29?jd32900qo?ic;291?6=8r.i47:l;I015>N59k1/9l4=;h1:>5<<a:h1<75f3e83>>o393:17bl;:188yg7d=3:1h7>50z&a<?d23A89=6F=1c9j75<722c8=7>5;h11>5<<a:91<75f4083>>o3=3:17d:9:188m11=831b854?::k15`<722c9=k4?::ma3?6=3f>?6=44}c3a=?6=l3:1<v*m8;`6?M4592B9=o5f3183>>o493:17d==:188m65=831b8<4?::k71?6=3`>=6=44i5594?=n<10;66g=1d83>>o59o0;66am7;29?j232900qo?l4;29`?6=8r.i47l:;I015>N59k1b?=4?::k05?6=3`996=44i2194?=n<80;66g;5;29?l212900e9950;9j0=<722c9=h4?::k15c<722ei;7>5;n67>5<<uk;h:7>5d;294~"e03h>7E<=1:J15g=n;90;66g<1;29?l552900e>=50;9j04<722c?97>5;h65>5<<a==1<75f4983>>o59l0;66g=1g83>>ie?3:17b:;:188yg7d?3:1h7>50z&a<?d23A89=6F=1c9j75<722c8=7>5;h11>5<<a:91<75f4083>>o3=3:17d:9:188m11=831b854?::k15`<722c9=k4?::ma3?6=3f>?6=44}c3`e?6=l3:1<v*m8;`6?M4592B9=o5f3183>>o493:17d==:188m65=831b8<4?::k71?6=3`>=6=44i5594?=n<10;66g=1d83>>o59o0;66am7;29?j232900qo?l8;29`?6=8r.i47l:;I015>N59k1b?=4?::k05?6=3`996=44i2194?=n<80;66g;5;29?l212900e9950;9j0=<722c9=h4?::k15c<722ei;7>5;n67>5<<uk;h57>5d;294~"e03h>7E<=1:J15g=n;90;66g<1;29?l552900e>=50;9j04<722c?97>5;h65>5<<a==1<75f4983>>o59l0;66g=1g83>>ie?3:17b:;:188yg7dj3:1h7>50z&a<?d23A89=6F=1c9j75<722c8=7>5;h11>5<<a:91<75f4083>>o3=3:17d:9:188m11=831b854?::k15`<722c9=k4?::ma3?6=3f>?6=44}c3ae?6=l3:1<v*m8;`6?M4592B9=o5f3183>>o493:17d==:188m65=831b8<4?::k71?6=3`>=6=44i5594?=n<10;66g=1d83>>o59o0;66am7;29?j232900qo?md;29`?6=8r.i47l:;I015>N59k1b?=4?::k05?6=3`996=44i2194?=n<80;66g;5;29?l212900e9950;9j0=<722c9=h4?::k15c<722ei;7>5;n67>5<<uk;in7>5d;294~"e03h>7E<=1:J15g=n;90;66g<1;29?l552900e>=50;9j04<722c?97>5;h65>5<<a==1<75f4983>>o59l0;66g=1g83>>ie?3:17b:;:188yg7ek3:1h7>50z&a<?d23A89=6F=1c9j75<722c8=7>5;h11>5<<a:91<75f4083>>o3=3:17d:9:188m11=831b854?::k15`<722c9=k4?::ma3?6=3f>?6=44}c3aa?6=l3:1<v*m8;`6?M4592B9=o5f3183>>o493:17d==:188m65=831b8<4?::k71?6=3`>=6=44i5594?=n<10;66g=1d83>>o59o0;66am7;29?j232900qo?mf;29`?6=8r.i47l:;I015>N59k1b?=4?::k05?6=3`996=44i2194?=n<80;66g;5;29?l212900e9950;9j0=<722c9=h4?::k15c<722ei;7>5;n67>5<<uk;h<7>5d;294~"e03h>7E<=1:J15g=n;90;66g<1;29?l552900e>=50;9j04<722c?97>5;h65>5<<a==1<75f4983>>o59l0;66g=1g83>>ie?3:17b:;:188yg7d93:1h7>50z&a<?d23A89=6F=1c9j75<722c8=7>5;h11>5<<a:91<75f4083>>o3=3:17d:9:188m11=831b854?::k15`<722c9=k4?::ma3?6=3f>?6=44}c3`6?6=l3:1<v*m8;`6?M4592B9=o5f3183>>o493:17d==:188m65=831b8<4?::k71?6=3`>=6=44i5594?=n<10;66g=1d83>>o59o0;66am7;29?j232900qo?l3;29`?6=8r.i47l:;I015>N59k1b?=4?::k05?6=3`996=44i2194?=n<80;66g;5;29?l212900e9950;9j0=<722c9=h4?::k15c<722ei;7>5;n67>5<<uk;i<7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3bb?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;ji7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3b`?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;jo7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3bf?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;jm7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3b=?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;j47>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3a<?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;i;7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3a2?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;i97>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3a0?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;i?7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3a6?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;i=7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3b3?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;j:7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c021?6=;3:1<v*m8;43?M4592B9=o5+5`824>o2>3:17d;8:188kdb=831vn?>n:180>5<7s-h36;>4H302?M46j2.>m7??;h75>5<<a<=1<75`ae83>>{e91=1<7=50;2x g>=>91C>??4H33a?!3f28i0e8850;9j12<722ejh7>5;|`233<72:0;6=u+b9854>N5:81C><l4$4c95f=n=?0;66g:7;29?jgc2900qo?;8;297?6=8r.i478?;I015>N59k1/9l4>c:k62?6=3`?<6=44o`f94?=zjj>1<7=50;2x g>=>91C>??4H33a?!3f28i0e8850;9j12<722ejh7>5;|``7?6=;3:1<v*m8;43?M4592B9=o5+5`82g>o2>3:17d;8:188kdb=831vnn<50;194?6|,k21:=5G2338L77e3-?j6<m4i4494?=n=>0;66and;29?xdem3:1?7>50z&a<?073A89=6F=1c9'1d<6k2c>:7>5;h74>5<<ghn1<75rbcf94?5=83:p(o65619K677<@;;i7);n:0a8m00=831b9:4?::mb`?6=3thio7>53;294~"e03<;7E<=1:J15g=#=h0:o6g:6;29?l302900clj50;9~f455290?6=4?{%`;>34<@;8:7E<>b:&6e?443`?=6=44i4594?=n=10;66and;29?xd6010;694?:1y'f=<1:2B9><5G20`8 0g=:81b9;4?::k63?6=3`?36=44o`f94?=zj8>26=4;:183!d?2?80D?<>;I02f>"2i38:7d;9:188m01=831b954?::mb`?6=3th:?44?:483>5}#j10=?6F=209K64d<,<k1?l5f5783>>o2?3:17d;7:188m0?=831dmi4?::a5=?=83?1<7>t$c:926=O:;;0D??m;%7b>74<a<<1<75f5683>>o203:17d;6:188kdb=831vn<:n:186>5<7s-h36;=4H302?M46j2.>m7<=;h75>5<<a<=1<75f5983>>o213:17bok:188yg74=3:197>50z&a<?043A89=6F=1c9'1d<582c>:7>5;h74>5<<a<21<75f5883>>ifl3:17pl>2d83>1<729q/n5492:J164=O:8h0(8o5e:k62?6=3`?<6=44i4:94?=him0;66sm16594?3=83:p(o65629K677<@;;i7);n:0`8m00=831b9:4?::k6<?6=3`?26=44o`f94?=zj82:6=4<:183!d?2?:0D?<>;I02f>"2i3h0e8850;9j12<722ejh7>5;|`26a<72<0;6=u+b9857>N5:81C><l4$4c9`>o2>3:17d;8:188m0>=831b944?::mb`?6=3th:>k4?:283>5}#j10=<6F=209K64d<,<k1=n5f5783>>o2?3:17bok:188yg70;3:1?7>50z&a<?073A89=6F=1c9'1d<502c>:7>5;h74>5<<ghn1<75rb037>5<4290;w)l7:728L7463A8:n6*:a;0;?l312900e8950;9lea<722wink4?:283>5}#j10=<6F=209K64d<,<k1=n5f5783>>o2?3:17bok:188ygd>29086=4?{%`;>36<@;8:7E<>b:&6e?7d3`?=6=44i4594?=him0;66sm10c94?3=83:p(o65629K677<@;;i7);n:058m00=831b9:4?::k6<?6=3`?26=44o`f94?=zj8>;6=4::183!d?2?90D?<>;I02f>"2i38>7d;9:188m01=831b954?::k6=?6=3fko6=44}c375?6==3:1<v*m8;40?M4592B9=o5+5`81e>o2>3:17d;8:188m0>=831b944?::mb`?6=3th::;4?:483>5}#j10=?6F=209K64d<,<k1>l5f5783>>o2?3:17d;7:188m0?=831dmi4?::a531=83?1<7>t$c:926=O:;;0D??m;%7b>7g<a<<1<75f5683>>o203:17d;6:188kdb=831vn<87:186>5<7s-h36;=4H302?M46j2.>m7<n;h75>5<<a<=1<75f5983>>o213:17bok:188yg71=3:197>50z&a<?043A89=6F=1c9'1d<312c>:7>5;h74>5<<a<21<75f5883>>ifl3:17pl>3e83>0<729q/n5493:J164=O:8h0(8o52`9j13<722c>;7>5;h7;>5<<a<31<75`ae83>>{e9?o1<7;50;2x g>=>:1C>??4H33a?!3f2;n0e8850;9j12<722c>47>5;h7:>5<<ghn1<75rb007>5<2290;w)l7:718L7463A8:n6*:a;18m00=831b9:4?::k6<?6=3`?26=44o`f94?=zjj:1<7:50;2x g>=>;1C>??4H33a?!3f2;h0e8850;9j12<722c>47>5;ncg>5<<ukhj6=4;:183!d?2?80D?<>;I02f>"2i38i7d;9:188m01=831b954?::mb`?6=3th:>;4?:483>5}#j10=?6F=209K64d<,<k1>n5f5783>>o2?3:17d;7:188m0?=831dmi4?::a57e=83?1<7>t$c:926=O:;;0D??m;%7b>1c<a<<1<75f5683>>o203:17d;6:188kdb=831vn<<m:186>5<7s-h36;=4H302?M46j2.>m784i4494?=n=>0;66g:8;29?l3>2900clj50;9~f40d290>6=4?{%`;>35<@;8:7E<>b:&6e?253`?=6=44i4594?=n=10;66g:9;29?jgc2900qo?9b;297?6=8r.i478?;I015>N59k1/9l4m;h75>5<<a<=1<75`ae83>>{e9;91<7;50;2x g>=>:1C>??4H33a?!3f2<1b9;4?::k63?6=3`?36=44i4;94?=him0;66sm16294?3=83:p(o65629K677<@;;i7);n:0g8m00=831b9:4?::k6<?6=3`?26=44o`f94?=zj8=:6=4::183!d?2?90D?<>;I02f>"2i39?7d;9:188m01=831b954?::k6=?6=3fko6=44}c35b?6==3:1<v*m8;40?M4592B9=o5+5`802>o2>3:17d;8:188m0>=831b944?::mb`?6=3th::94?:583>5}#j10=>6F=209K64d<,<k1>95f5783>>o2?3:17d;7:188kdb=831vn<=j:186>5<7s-h36;=4H302?M46j2.>m7;>;h75>5<<a<=1<75f5983>>o213:17bok:188yg7513:197>50z&a<?043A89=6F=1c9'1d<3;2c>:7>5;h74>5<<a<21<75f5883>>ifl3:17pl>2983>0<729q/n5493:J164=O:8h0(8o51e9j13<722c>;7>5;h7;>5<<a<31<75`ae83>>{e9?n1<7;50;2x g>=>:1C>??4H33a?!3f2;o0e8850;9j12<722c>47>5;h7:>5<<ghn1<75rbb394?3=83:p(o65629K677<@;;i7);n:0d8m00=831b9:4?::k6<?6=3`?26=44o`f94?=zjkh1<7;50;2x g>=>:1C>??4H33a?!3f28l0e8850;9j12<722c>47>5;h7:>5<<ghn1<75rb003>5<3290;w)l7:708L7463A8:n6*:a;a8m00=831b9:4?::k6<?6=3fko6=44}c3b0?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;>o7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c3:b?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;j=7>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c36a?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;>47>55;294~"e03>h7E<=1:J15g=#=h097d=6:188m6d=831b?i4?::k75?6=3fh?6=44}c36e?6==3:1<v*m8;6`?M4592B9=o5+5`81?l5>2900e>l50;9j7a<722c?=7>5;n`7>5<<uk;3:7>52;294~"e03?i7E<=1:J15g=n=<0;66and;29?xd6<>0;6?4?:1y'f=<2j2B9><5G20`8m03=831dmi4?::a54?=83<1<7>t$c:921=O:;;0D??m;%7b>4d<a<<1<75f5683>>o203:17d;6:188k0b=831dmi4?::a540=8391<7>t$c:924=O:;;0D??m;%7b>7><a<<1<75f5683>>i2l3:17pl>7483>3<729q/n5494:J164=O:8h0(8o5269j13<722c>;7>5;h7;>5<<a<31<75`5e83>>ifl3:17pl>1983>3<729q/n5494:J164=O:8h0(8o5279j13<722c>;7>5;h7;>5<<a<31<75`5e83>>ifl3:17pl>6283>0<729q/n5495:J164=O:8h0(8o54:k62?6=3`?<6=44i4:94?=n=00;66a:d;29?xd6;o0;684?:1y'f=<1=2B9><5G20`8 0g=:01b9;4?::k63?6=3`?36=44i4;94?=h=m0;66sm13394?3=83:p(o65649K677<@;;i7);n:3d8m00=831b9:4?::k6<?6=3`?26=44o4f94?=z{;hj6=49{_0ae>;6;;0>463>3886=>;6;<0>563>2d862>;6:m0>:6s|22094?7dsW8886P=289]6f4<V;i;7S<=8:\1fa=Y:1n0R?m>;_0;a>X51l1U>>?4^313?[45n2T9>h5Q23f897452<901??>:53897612=;01???:538976a2=;01?>j:538977>2=;01??7:538947e2k901<?l:c18947c2k901<?j:c18947a2k90q~<mc;297~X5jj16><?5b29>650=j:1v?6;:181[4?<27:?:4m4:p6f`=839pR?mi;<3;5?3134;=87;9;|q1e`<72<>pR?oj;<03<?5>348;;7=6;<032?5>348:<7=6;<03b?5>348;i7=6;<30f?5>34;:n7=6;<32g?5>34;:h7=6;<32a?5>34;:j7=6;<363?5>34;>57=6;<36f?5>34;>h7=6;<37b?5>34;>>7=6;<364?5>34;>=7=6;<d1>6?<5o;1?452f180=>;bn39270??d;1:?877k39270??b;1:?877i39270??5;1:?877<39270??3;1:?877:39270j8:2;89a0=;016h84<9:?g0?5>34;8?7=6;<304?5>34;8m7=6;<303?5>34;8:7=6;<3e6?5>34;m?7=6;<3e`?5>34;mi7=6;<3eb?5>348;<7=6;<035?5>348;>7=6;<037?5>348;87=6;<3e0?5>34;m97=6;<3e2?5>34;m;7=6;<3e<?5>34;m57=6;<3ee?5>34;mn7=6;<3eg?5>34;i<7=6;<3bb?5>34;ji7=6;<3b`?5>34;jo7=6;<3bf?5>34;jm7=6;<3b=?5>34;j47=6;<3a<?5>34;i;7=6;<3a2?5>34;i97=6;<3a0?5>34;i?7=6;<3a6?5>34;i=7=6;<3b3?5>34;j:7=6;<36g?5>34;>i7=6;<36<?5>34;>m7=6;|q1<d<72;qU>5o4=042>g2<uz8h?7>53gy]6f5<5;;86>74=332>6?<5;;96>74=33:>6?<5;;36>74=042>6?<58<;6>74=0;f>6?<58k;6>74=0c1>6?<58k86>74=0;:>6?<58336>74=0;4>6?<583=6>74=05:>6?<58=j6>74=05a>6?<58=h6>74=05g>6?<582n6>74=0:e>6?<583;6>74=0;2>6?<5ji1?452cc80=>;di39270m6:2;89`1=;016i;4<9:?f1?5>34o?6>74=ed97<=:ll08563kd;1:?8bd2:301kj5389>bf<4127mn7=6;<db>6?<58i>6??j;<3a=?46m27:o94=1d9>5f0=:8o01<m8:33f?87di38:i63>c9815`=:9j31><k4=0aa>77b34;im7<>e:?2fa<59l16=ol520g894dd2;;n70?me;02a>;6jo09=h521b2964c<58i:6??j;<3`6?46m27:o>4=1d9>5d2=;016=4h5389>5d7=;01v?mj:181[4d027:;i4m4:p6fe=838pR?m8;<34g?d33ty9oo4?:3y]6f0<58=i6o:4}r0`e?6=:rT9o85216c9f1=z{;i26=4={_0`0>;6?00i86s|26;94?4|V;<=70?m0;`7?xu5?>0;6?uQ277894ga2k>0q~<86;296~X5>=16=lk5b59~w7122909wS<93:?2ea<e<2wx>::50;0xZ70534;jo7l;;|q136<72;qU>;?4=0ca>g2<uz8<>7>52z\125=:9hk1n95rs352>5<5sW8>j63>a88a0>{t:>:1<7<t^37f?87f03h?7p}=8383>7}Y:?o01<l7:c68yv4?93:1>vP=6e9>5g1=j=1v?6?:181[41k27:n;4m4:p62`=838pR?8m;<3a1?d33ty9;h4?:3y]63g<58h?6o:4}r04`?6=:rT9:4521c19f1=z{;=h6=4={_05<>;6j;0i86s|26`94?4|V;<<70?m1;`7?xu5?h0;6?uQ24f894g02k>0q~<9f;296~X5=j16=l85b59~w7d>2909wS<m3:?25c<e<2wx>o950;0xZ7d534;:i7l;;|q1f3<72;qU>o?4=03g>g2<uz8i97>52z\1f5=:98i1n95rs3`7>5<5sW8jj63>1c8a0>{t:<81<7<t^31e?87d;3>:7p}=5183>7}Y::o01<m=:538yv43n3:1>vP=3e9>5f7=<81v?:j:181[44k27:o=4;1:p61b=838pR?=m;<3ab?263ty98n4?:3y]66g<58hn69?4}r07f?6=:rT9?4521cf904=z{;>j6=4={_00<>;6jj0?=6s|25;94?4|V;9<70?mb;62?xu5=k0;6?uQ255894df2=;0q~<:a;296~X5<?16=nl5409~w73>2909wS<;5:?2gd<392wx>8650;0xZ72334;h57:>;|q112<72;qU>9=4=0a;>17<uz8>:7>52z\107=:9j=18<5rs376>5<5sW8?=63>c7875>{t:<>1<7<t^363?87d=3>:7p}=5283>7}Y::<01<m;:538yv4303:1>vP=349>5g?=<81v?>8:18084703>:70<?7;`7?847>39i7p}=0983>7}::921n95221c913=z{;;96=4<{<027?26348:=7=m;<026?d33ty9=>4?:3y>645=j=16><;5579~w7612908w0<?7;62?847>3h?70<?a;74?xu5980;6>u22039f1=::8818<52207912=z{;:26=4;{<024?d4348;j7l<;<03a?d4348;m7ok;|q14a<728ip1???:c68945e2k901<?m:2f8947d2:n01<?k:2f8947b2:n01<?i:2f894302:n01<;6:2f8943e2:n01<;k:2f8942a2k901<;=:2f894372:n01<;>:2f894542:n01<=?:2f8945f2:n01<=8:c1894512k901<<;:458944d2<=01<<<:4;894472<=01<;l:2f8943b2:n01<;7:2f8943f2:n0q~<?c;2954}::9l1n952f380`>;a939o70h?:2f89``=;m16==j53e9>55e=;m16==l53e9>55g=;m16==;53e9>552=;m16===53e9>554=;m16h:4<d:?g2?5c34n>6>j4=e697a=z{;:i6=4=7z?14`<e<27:j?4<d:?2b6<4l27:ji4<d:?2b`<4l27:jk4<d:?145<4l279<<4<d:?147<4l279<>4<d:?141<4l27:j94<d:?2b0<4l27:j;4<d:?2b2<4l27:j54<d:?2b<<4l27:jl4<d:?2bg<4l27:jn4<d:?2f5<4l27:mk4<d:?2e`<4l27:mi4<d:?2ef<4l27:mo4<d:?2ed<4l27:m44<d:?2e=<4l27:n54<d:?2f2<4l27:n;4<d:?2f0<4l27:n94<d:?2f6<4l27:n?4<d:?2f4<4l27:m:4<d:?2e3<4l2wx><:50;1x977>2k901??7:c1897722hn0q~<>7;2952}::831n9521739f6=:9?:1n>5218g97a=:9h:1?i521`097a=:9h91?i5218;97a=:9021?i5218597a=:90<1n>5216;97a=:9>k1?i5216`97a=:9>i1?i5216f97a=:91o1?i5219d9f6=:90:1?i5218397a=:9h>1?i5218d97a=:9h;1?i5rs335>5<69r79=54m4:?`g?5c34ii6>j4=bc97a=:k008h63j7;1g?8c12:n01h;53e9>a1<4l27oj7=k;<ff>6b<5mn1?i52db80`>;al39o70hl:2f89cd=;m16jl4<d:p56e=838p1<=m:538945b2hn0q~?<b;297~;6;k0i863>34862>;6:m0>;6s|13294?4|58;i69?4=003>db<uz;9>7>52z?25f<3927:>94nd:p573=838p1<?k:53894412hn0q~?=7;296~;69l0?=63>298b`>{t9;k1<7<t=03e>17<588i6lj4}r36b?6=:8q6=8953c9>50?=;k16=8l53c9>50b=;k16=9h53c9>504=;k16=8>53c9>507=;k16=k<53c9>5c5=;k16=kj53c9>5cc=;k16=kh53c9>656=;k16>=?53c9>654=;k16>==53c9>652=;k16=k:53c9>5c3=;k16=k853c9>5c1=;k16=k653c9>5c?=;k16=ko53c9>5cd=;k16=km53c9>57b=im16=>k5599>50e=;k16=8k53c9>50>=;k16=8o53c9~w42e2903w0?:7;62?873n3h?70?;8;74?87313?370?;a;7;?87393?=70?:8;62?873?3?>7p}>5283>40|58?<6o:4=0a6>13<58h269;4=0a7>13<58i=69;4=0a4>13<58ij69;4=0a;>13<58i269;4=0aa>13<58hj69;4=0`g>13<58hi69;4=0``>13<58hn69;4=0`e>13<58i;69;4=0a2>13<58i969;4=0a0>13<5ko19:5213391<=z{8>h6=48{<36=?2634;><7l;;<37<?3134;?57;8;<37e?3034;8h7;7;<36e?263ty:994?:04x943>2k>01<m::54894d>2=<01<m;:54894e12=<01<m8:54894ef2=<01<m7:54894e>2=<01<mm:54894df2=<01<lk:54894de2=<01<ll:54894db2=<01<li:54894e72=<01<m>:54894e52=<01<m<:5489gc==?16ni4:7:p51b=83<p1<;m:53894362k>01<:6:448942f2<301<=k:448943d2=;0q~?:5;295=}:9<h1n9521b7902=:9k318:521b6902=:9j<18:521b5902=:9jk18:521b:902=:9j318:521b`902=:9kk18:521cf902=:9kh18:521ca902=:9ko18:521cd902=:9j:18:521b3902=:9j818:521b1902=:jm0>:63mc;74?876i3?<70?=9;74?xu6<l0;68u214f904=:9<81n95215c913=:9=;1955214g904=z{8?=6=4>8z?21a<e<27o;7:>;<3`1?2?34;i57:7;<3`0?2?34;h:7:7;<3`3?2?34;hm7:7;<3`<?2?34;h57:7;<3`f?2?34;im7:7;<3a`?2?34;in7:7;<3ag?2?34;ii7:7;<3ab?2?34;h<7:7;<3`5?2?34;h>7:7;<3`7?2?34hh6884=00;>01<589m6894}r356?6=;r7::<4;1:?225<3927::84nd:p536=839p1<8?:c6894>62<=01<8<:458yv7f=3:1>>u218g97g=:9h:1?o521`097g=:9h91?o5218;97g=:9021?o5218597g=:90<1?o5219g97g=:91l1?o5218297g=:90;1?o521b7964`<58h26??i;<3`0?46n27:o;4=1g9>5f1=:8l01<mn:33e?87d038:j63>c8815c=:9jh1><h4=0`b>77a34;ih7<>f:?2fg<59o16=om520d894db2;;m70?mf;02b>;6k909=k521b3964`<58i96??i;<3`7?46n27:4<4nd:?2e1<4j27:5k4<b:?2e4<4j2wx=4<50;6x94?b2=;01<79:c6894012<201<7i:538yv7>i3:1=5u218g9f1=:9j?1?=521c;975=:9j>1?=521b4975=:9j=1?=521bc975=:9j21?=521b;975=:9jh1?=521cc975=:9kn1?=521c`975=:9ki1?=521cg975=:9kl1?=521b2975=:9j;1?=521b0975=:9j91?=52164913=:k=0>;63>7686=>;6>m0>56s|18194?2|58k;69?4=0;4>g2<58<=6884=0c2>17<uz;2n7>519y>5d6=j=16=n;5309>5g?=;816=n:5309>5f0=;816=n95309>5fg=;816=n65309>5f?=;816=nl5309>5gg=;816=oj5309>5gd=;816=om5309>5gc=;816=oh5309>5f6=;816=n?5309>5f4=;816=n=5309>g1<2>27h?7;8;<343?3?34;=h7;8;|q2=1<72:q6=l<5409>5<>=j=16=;95599~w4?d290:mv3>a38a0>;6k<08>63>b8806>;6k=08>63>c7806>;6k>08>63>c`806>;6k108>63>c8806>;6kk08>63>b`806>;6jm08>63>bc806>;6jj08>63>bd806>;6jo08>63>c1806>;6k808>63>c3806>;6k:08>63l3;75?8e52<=01<8j:458940d2<=01<9?:4;894162<30q~?65;290~;6i:0?=63>988a0>;6>>0>:63>a5875>{t90n1<7?7{<3b7?d334lo69?4=0a6>65<58h26>=4=0a7>65<58i=6>=4=0a4>65<58ij6>=4=0a;>65<58i26>=4=0aa>65<58hj6>=4=0`g>65<58hi6>=4=0``>65<58hn6>=4=0`e>65<58i;6>=4=0a2>65<58i96>=4=0a0>65<5j819;5216291==:9>;1955rs0:g>5<3s4;257:>;<3:5?d334;357;9;<35<?313ty:4n4?:4y>5<>=<816=4>5b59>5=>==?16=575599>535==?1v<6m:18587>?3>:70?7f;`7?87??3?=70?78;74?87?13?270?98;7;?xu60h0;6:u2184904=:91o1n952195912=:9121955219;912=:9?>19:52194910=z{8=36=4={<34=?2634;<:7ok;|q23`<72;q6=:o5409>53b=im1v<9i:181870j3>:70?9e;cg?xu6090;6?u216a904=:9?l1mi5rs04b>5<5s4;<h7:>;<35f?gc3ty:4?4?:3y>5=c=<816=585ae9~w4>42909w0?7f;62?87??3ko7p}>8583>7}:90:18<5219:9ea=z{82>6=4={<3:5?2634;357ok;|q206<72;q6=9h5409>511=im1v<:9:181872:3>:70?;a;cg?xu6<=0;6?u2142904=:9=21mi5rs066>5<5s4;>=7:>;<37=?gc3tyn?7>55z?`g?2634o<6o:4=c;912=:jh0>;63mb;74?xud03:1:v3lc;`7?870;3?<70?97;74?87103?<70?80;75?87093?=7p}ld;296~;dj3>:70l6:`f8yve0290<w0mm:c6894002<301<8j:448940d2<<01<9?:45894162<=01<8<:4:8yveb2909w0mn:5389gg=im1vn850;4x9fg=j=16=:95579>530==>16=;65589>53b==?16=:;5599~wf`=838p1n75409>fg<fl2wxo84?:6y>g<<e<27:;;4:7:?232<2?27::;4:9:?221<2027::i4:8:?230<212wx==750;7x9c4=<816==j5b59>fc<2?27h<7;8;<a2>01<uzon6=4:{<d1>g2<58>:6874=00;>00<58;=6894=01e>00<uzl86=4={<d2>17<5kl1mi5rsdf94?3|5o;1n952106912=:98k19;5212f912=:9;319;5rsg694?4|5o:18<52c18b`>{tmj0;68u2f18a0>;6<90>463>3e86=>;6900>463>19862>{tn<0;6?u2eg875>;d93ko7p}jb;292~;bn3h?70?;0;7:?87393?<70?>9;7:?87603?<70?=1;7;?xu6880;6?u211f904=:99?1n95rs023>5<5s4;;o7:>;<330?d33ty:<54?:5y>55e=j=16nk4:6:?`4?3134i:6884}rde>5<5s4;;n7:>;<337?d33ty:<:4?:2y>55d=j=16o=4:8:?`5?3?3tymi7>52z?24d<3927:<?4m4:p550=838p1<>n:c689f7==01vil50;0x9`1=<816hk4m4:p`d<72;q6i;4;1:?ga?d33tyn>7>54z?f2?d334h26884=cc913=:jk0>:6s|d883>7}:m<0?=63kd;`7?xub93:1?v3j5;`7?8df2<201ol5599~wa>=838p1h:5409>`f<e<2wxi=4?:3y>a1<e<27in7;6;|qe=?6=:r7:<84;1:?e`?d33tym47>52z?241<3927mo7l;;|qe3?6=:r7:<>4;1:?ef?d33tym:7>52z?247<3927mm7l;;|qg7?6=:r7oj7:>;<f4>g2<uzn96=4={<ff>17<5m<1n95rse394?4|5mn18<52d48a0>{tl90;6?u2db875>;c<3h?7p}j8;296~;c>3>:70ll:`f8yvc>2909w0j::5389gb=im1vho50;0x9a2=<816nh4nd:p55c=838p1km5409>g7<fl2wx==h50;0x9cd=<816o>4nd:p546=838p1ko5409>g1<fl2wx=>:50;0x94542=;01<=::`f8yv74;3:15v3>328a0>;6;;0>;63>3886<>;6;<0>463>2d86<>;6:m0>563>2g863>;6::0>;63>20863>{t9:;1<7=t=013>17<589j69?4=011>db<uz;8<7>59z?275<e<27:??4:6:?27<<2?27:?84:7:?26`<2?27:>i4:8:?26c<2>27:>>4:6:?264<2>2wx=>o50;7x945f2k>01<<;:448944d2<<01<<<:4:894472<<0q~?<8;297~;6;>0?=63>37875>;6;00jh6s|12494?4|589=6o:4=01:>00<uz;ho7>52z?2b7<3927:n44;4:p5a`=838p1<h=:c6894g12=;0q~?k6;296~;6n:0?=63>c5870>{t9l31<7<t=0d0>g2<58k<69?4}r3g3?6=:r7:ji4;1:?2g0<3<2wx=ho50;0x94`c2k>01<l>:538yv7c03:1>v3>fd875>;6k?0?86s|1d`94?4|58ln6o:4=0`1>17<uz;o57>52z?2bc<3927:o:4;4:p5`e=838p1<hi:c6894d42=;0q~?ka;296~;5890?=63>c9870>{t9ln1<7<t=323>g2<58h?69?4}r3gf?6=:r79<<4;1:?2g<<3<2wx=hk50;0x97662k>01<l::538yv7ck3:1>v3=03875>;6kh0?86s|1dd94?4|5;:96o:4=0`5>17<uz;oh7>52z?146<3927:oo4;4:p5c6=838p1?><:c6894d02=;0q~?ke;296~;58=0?=63>b`870>{t9o;1<7<t=327>g2<58h369?4}r3``?6=:r7:j94;1:?2fg<3<2wx=h>50;0x94`32k>01<o7:538yv7dm3:1>v3>f4875>;6jj0?86s|1d394?4|58l>6o:4=0c:>17<uz;hj7>52z?2b3<3927:ni4;4:p5`4=838p1<h9:c6894gf2=;0q~?k0;296~;6n>0?=63>bd870>{t9l91<7<t=0d4>g2<58ki69?4}r3g5?6=:r7:j54;1:?2fc<3<2wx=h:50;0x94`?2k>01<ol:538yv7c:3:1>v3>f8875>;6k90?86s|1d794?4|58l26o:4=0cg>17<uz;o?7>52z?2bd<3927:o<4;4:p5`0=838p1<hn:c6894gb2=;0q~?k4;296~;6nk0?=63>c3870>{t9l=1<7<t=0da>g2<58km69?4}r3g1?6=:r7:jn4;1:?2g6<3<2wx=h650;0x94`d2k>01<l?:538yv47=3:1=9u21c297g=:9hl1?o521`g97g=:9hn1?o521`a97g=:9hh1?o521`c97g=:9h31?o521`:97g=:9k21?o521c597g=:9k<1?o521c797g=:9k>1?o521c197g=:9k81?o521c397g=:9h=1?o521`497g=:9;o1mi5rs04:>5<3s4;<;7ok;<35a?3>34;=n7;9;<35b?3>3ty:8?4?:2y>57`=im16=?:5599>57d==?1v<o;:181870;3?=70?n4;`7?xu6?;0;6?u21619ea=:9?i1955rs07`>5<5s4;:87;9;<36g?d33ty:=>4?:5y>542=im16=?85579>57e==116=>h5599~w4722909w0?>a;7;?876>3?o7p}>1683>1}:98k1945213491==:9;31955210:9ea=z{8;:6=4={<32e?gc34;9n7;6;|q21=<72=q6=9>5579>50>=j=16=<75569>54>==11v<;n:18787383?<70?:a;`7?87613?=70?>8;7:?xu6<90;6?u21529ea=:9:l1945rs062>5<5s4;?=7ok;<30a?303ty::;4?:3y>530=im16=;;5579~w4002909w0?97;cg?871=3?<7p}>6983>7}:9?21mi5217791==z{8<86=4={<351?3>34;=?7;k;|q4<?6=:r7:?i4nd:?27`<2>2wx=::50;1x940b2<201<8i:44894122hn0q~?>2;290~;6:=0>563>27863>;6:k0>;63>188b`>{t>00;6>u213491<=:9;91mi5213:91==z{191<7<t=00`>0?<58;368j4}r5:>5<5s4;9o7ok;<31f?3?3ty3>7>52z?22f<2127:;84:d:p3d<72;q6=;m5ae9>53d==>1v:l50;0x94172hn01<8i:4:8yv1d2909w0?81;cg?871n3?<7p}8d;296~;6>=0jh63>6286=>{t?l0;6?u212g91<=:9:l19i5rs9394?4|58826874=03:>0b<uz=m6=4={<31=?gc34;947;6;|q;4?6=:r7:>=4:8:?264<2l2wx=4h50;0x94?a2k>01<9::448yv7f93:1>v3>a08a0>;6?<0>;6s|14g94?4|58?n6o:4=035>00<uty99?4?:3y]66`<5:=1>>h4$33b>=?<uz8><7>52z\17`=:;>09?h5+20c9=5=z{;>m6=4={_00`>;4?388h6*=1`8:f>{t:=o1<7<t^31`?8502;9h7)<>a;c1?xu5<m0;6?uQ22`8961=::h0(??n:7;8yv43k3:1>vP=3`9>72<5;h1/><o56c9~w72e2909wS<<9:?03?4412.9=l49c:p61g=838pR?=7;<14>75?3-8:m78k;|q10<<72;qU>>94=259661<,;;j6;k4}r06f?6=:rT98:52368102=#:8k1:k5rs37b>5<5sW8?:63<7;072>"59h0<<6s|24;94?4|V;>>70=8:366?!46i3=:7p}=5983>7}Y:=>01>952568 77f2>80q~<:7;296~X5<:16?:4=429'64g=?:1v?;9:181[43:278;7<;2:&15d<0<2wx>8;50;0xZ726349<6?:>;%02e?123ty9994?:3y]616<5:=1>9>4$33b>20<uz8>?7>52z\173=:;>09?;5+20c932=z{;>36=4={_001>;4?38896*=1`84<>{t:ho1<7<t^3cf?8502;kn7)<>a;:7?xu5jh0;6?uQ2cc8961=:kk0(??n:978yv4ek3:1>vP=bb9>72<5jj1/><o5879~w7e42909wS<l3:?03?4d;2.9=l477:p6f`=838pR?mi;<14>7ea3-8:m767;|q13<<72;qU>;84=259630<,;;j65o4}r043?6=:rT9:852368120=#:8k14o5rs355>5<5sW8=863<7;050>"59h03o6s|26794?4|V;<870=8:340?!46i32o7p}=7583>7}Y:?801>952708 77f21o0q~<83;296~X5>816?:4=609'64g=0o1v?9=:181[418278;7<90:&15d<>92wx>:?50;0xZ73a349<6?;i;%02e??53ty9;=4?:3y]60c<5:=1>8k4$33b><5<uz83>7>52z\12`=:;>09:h5+20c9=1=z{;2:6=4={_05`>;4?38=h6*=1`8:1>{t:1:1<7<t^34`?8502;<h7)<>a;;5?xu5?o0;6?uQ27`8961=:?h0(??n:858yv40m3:1>vP=6`9>72<5>h1/><o5999~w71c2909wS<99:?03?4112.9=l469:p62e=838pR?87;<14>70?3-8:m77n;|q13g<72;qU>;94=259631<,;;j64m4}r04e?6=:rT99i5236811a=#:8k15i5rs34e>5<5sW8>o63<7;06g>"59h02i6s|29694?4|V;2?70=8:3:7?!46i33m7p}=8`83>7}Y:1k01>9529c8 77f2h:0q~<m9;296~X5j:16?:4=b29'64g=i81v?l8:181[4e:278;7<m2:&15d<f;2wx>o850;0xZ7d6349<6?l>;%02e?g33ty9n84?:3y]6g6<5:=1>o>4$33b>d3<uz8i87>52z\1ec=:;>09mk5+20c9e3=z{;in6=4={_0`<>;4?38h46*=1`8b3>{t:ji1<7<t^3a4?8502;i<7)<>a;c;?xu5kk0;6?uQ2b48961=:j<0(??n:`;8yv4di3:1>vP=c49>72<5k<1/><o5a`9~w7e>2909wS<l4:?03?4d<2.9=l49a:~j3d22909wE<>b:m2g0=838pD??m;|l5f2<72;qC><l4}o4a<?6=:rB9=o5rn7`:>5<5sA8:n6sa6cc94?4|@;;i7p`9bc83>7}O:8h0qc8mc;296~N59k1vb;lk:181M46j2we:ok50;0xL77e3td=nk4?:3yK64d<ug<h<7>52zJ15g=zf?i:6=4={I02f>{i>j81<7<tH33a?xh1k:0;6?uG20`8yk0d<3:1>vF=1c9~j3e22909wE<>b:m2f0=838pD??m;|l5g2<72;qC><l4}o4`<?6=:rB9=o5rn7a:>5<5sA8:n6sa6bc94?4|@;;i7p`9cc83>7}O:8h0qc8lc;296~N59k1vb;mk:181M46j2we:nk50;0xL77e3td=ok4?:3yK64d<ug<o<7>52zJ15g=zf?n:6=4={I02f>{i>m81<7<tH33a?xh1l:0;6?uG20`8yk0c<3:1>vF=1c9~j3b22909wE<>b:m2a0=838pD??m;|l5`2<72;qC><l4}o4g<?6=:rB9=o5rn7f:>5<5sA8:n6sa6ec94?4|@;;i7p`9dc83>7}O:8h0qc8kc;296~N59k1vb;jk:181M46j2we:ik50;0xL77e3td=hk4?:3yK64d<ug<n<7>52zJ15g=zf?o:6=4={I02f>{i>l81<7<tH33a?xh1m:0;6?uG20`8yk0b<3:1>vF=1c9~j3c22909wE<>b:m2`0=838pD??m;|l5a2<72;qC><l4}o4f<?6=:rB9=o5rn7g:>5<5sA8:n6sa6dc94?4|@;;i7p`9ec83>7}O:8h0qc;l8;295~N59k1vb8hi:182M46j2we:=>50;3xL77e3td=<<4?:0yK64d<ug<;>7>51zJ15g=zf?:86=4>{I02f>{i>9>1<7?tH33a?xh18<0;6<uG20`8yk07>3:1=vF=1c9~j360290:wE<>b:m25>=83;pD??m;|l54<<728qC><l4}o43e?6=9rB9=o5rn72a>5<6sA8:n6sa61a94?7|@;;i7p`90e83>4}O:8h0qc8?e;295~N59k1vb;>i:182M46j2we:<>50;3xL77e3td==<4?:0yK64d<ug<:>7>51zJ15g=zf?;86=4>{I02f>{i>8>1<7?tH33a?xh19<0;6<uG20`8yk06>3:1=vF=1c9~j370290:wE<>b:m24>=83;pD??m;|l55<<728qC><l4}o42e?6=9rB9=o5rn73a>5<6sA8:n6sa60a94?7|@;;i7p`91e83>4}O:8h0qc8>e;295~N59k1vb;?i:182M46j2we:?>50;3xL77e3td=><4?:0yK64d<ug<9>7>51zJ15g=zf?886=4>{I02f>{i>;>1<7?tH33a?xh1:<0;6<uG20`8yk05>3:1=vF=1c9~j340290:wE<>b:m27>=83;pD??m;|l56<<728qC><l4}o41e?6=9rB9=o5rn70a>5<6sA8:n6sa63a94?7|@;;i7p`92e83>4}O:8h0qc8=e;295~N59k1vb;<i:182M46j2we:>>50;3xL77e3td=?<4?:0yK64d<ug<8>7>51zJ15g=zf?986=4>{I02f>{i>:>1<7?tH33a?xh1;<0;6<uG20`8yk04>3:1=vF=1c9~j350290:wE<>b:m26>=83;pD??m;|l57<<728qC><l4}o40e?6=9rB9=o5rn71a>5<6sA8:n6sa62a94?7|@;;i7p`93e83>4}O:8h0qc8<e;295~N59k1vb;=i:182M46j2we:9>50;3xL77e3td=8<4?:0yK64d<ug<?>7>51zJ15g=zf?>86=4>{I02f>{i>=>1<7?tH33a?xh1<<0;6<uG20`8yk03>3:1=vF=1c9~j320290:wE<>b:m21>=83;pD??m;|l50<<728qC><l4}o47e?6=9rB9=o5rn76a>5<6sA8:n6sa65a94?7|@;;i7p`94e83>4}O:8h0qc8;e;295~N59k1vb;:i:182M46j2we:8>50;3xL77e3td=9<4?:0yK64d<ug<>>7>51zJ15g=zf??86=4>{I02f>{i><>1<7?tH33a?xh1=<0;6<uG20`8yk02>3:1=vF=1c9~j330290:wE<>b:m20>=83;pD??m;|l51<<728qC><l4}o46e?6=9rB9=o5rn77a>5<6sA8:n6sa64a94?7|@;;i7p`95e83>4}O:8h0qc8:e;295~N59k1vb;;i:182M46j2we:;>50;3xL77e3td=:<4?:0yK64d<ug<=>7>51zJ15g=zf?<86=4>{I02f>{i>?>1<7?tH33a?xh1><0;6<uG20`8yk01>3:1=vF=1c9~j300290:wE<>b:m23>=83;pD??m;|l52<<728qC><l4}o45e?6=9rB9=o5rn74a>5<6sA8:n6sa67a94?7|@;;i7p`96e83>4}O:8h0qc89e;295~N59k1vb;8i:182M46j2we::>50;3xL77e3td=;<4?:0yK64d<ug<<>7>51zJ15g=zf?=86=4>{I02f>{i>>>1<7?tH33a?xh1?<0;6<uG20`8yk00>3:1=vF=1c9~j310290:wE<>b:m22>=83;pD??m;|l53<<728qC><l4}o44e?6=9rB9=o5rn75a>5<6sA8:n6sa66a94?7|@;;i7p`97e83>4}O:8h0qc88e;295~N59k1vb;9i:182M46j2we:5>50;3xL77e3td=4<4?:0yK64d<ug<3>7>51zJ15g=zf?286=4>{I02f>{i>1>1<7?tH33a?xh10<0;6<uG20`8yk0?>3:1=vF=1c9~j3>0290:wE<>b:m2=>=83;pD??m;|l5<<<728qC><l4}o4;e?6=9rB9=o5rn7:a>5<6sA8:n6sa69a94?7|@;;i7p`98e83>4}O:8h0qc87e;295~N59k1vb;6i:182M46j2we:4>50;3xL77e3td=5<4?:0yK64d<ug<2>7>51zJ15g=zf?386=4>{I02f>{i>0>1<7?tH33a?xh11<0;6<uG20`8yk0>>3:1=vF=1c9~j3?0290:wE<>b:m2<>=83;pD??m;|l5=<<728qC><l4}o4:e?6=9rB9=o5rn7;a>5<6sA8:n6sa68a94?7|@;;i7p`99e83>4}O:8h0qc86e;295~N59k1vb;7i:182M46j2we:l>50;3xL77e3td=m<4?:0yK64d<ug<j>7>51zJ15g=zf?k86=4>{I02f>{i>h>1<7?tH33a?xh1i<0;6<uG20`8yk0f>3:1=vF=1c9~j3g0290:wE<>b:m2d>=83;pD??m;|l5e<<728qC><l4}o4be?6=9rB9=o5rn7ca>5<6sA8:n6sa6`a94?7|@;;i7p`9ae83>4}O:8h0qc8ne;295~N59k1vb;oi:182M46j2we:o>50;3xL77e3td=n<4?:0yK64d<ug<i>7>51zJ15g=zf?h86=4>{I02f>{i>k>1<7?tH33a?x{zuIJHw:jn:6ffgc05=tJKNv>r@ARxyEF
\ No newline at end of file diff --git a/coregen/fifo_xlnx_16x19_2clk.v b/coregen/fifo_xlnx_16x19_2clk.v new file mode 100644 index 000000000..1d633384b --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk.v @@ -0,0 +1,169 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file fifo_xlnx_16x19_2clk.v when simulating +// the core, fifo_xlnx_16x19_2clk. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module fifo_xlnx_16x19_2clk( + din, + rd_clk, + rd_en, + rst, + wr_clk, + wr_en, + dout, + empty, + full, + rd_data_count, + wr_data_count); + + +input [18 : 0] din; +input rd_clk; +input rd_en; +input rst; +input wr_clk; +input wr_en; +output [18 : 0] dout; +output empty; +output full; +output [4 : 0] rd_data_count; +output [4 : 0] wr_data_count; + +// synthesis translate_off + + FIFO_GENERATOR_V4_3 #( + .C_COMMON_CLOCK(0), + .C_COUNT_TYPE(0), + .C_DATA_COUNT_WIDTH(5), + .C_DEFAULT_VALUE("BlankString"), + .C_DIN_WIDTH(19), + .C_DOUT_RST_VAL("0"), + .C_DOUT_WIDTH(19), + .C_ENABLE_RLOCS(0), + .C_FAMILY("spartan3"), + .C_FULL_FLAGS_RST_VAL(1), + .C_HAS_ALMOST_EMPTY(0), + .C_HAS_ALMOST_FULL(0), + .C_HAS_BACKUP(0), + .C_HAS_DATA_COUNT(0), + .C_HAS_INT_CLK(0), + .C_HAS_MEMINIT_FILE(0), + .C_HAS_OVERFLOW(0), + .C_HAS_RD_DATA_COUNT(1), + .C_HAS_RD_RST(0), + .C_HAS_RST(1), + .C_HAS_SRST(0), + .C_HAS_UNDERFLOW(0), + .C_HAS_VALID(0), + .C_HAS_WR_ACK(0), + .C_HAS_WR_DATA_COUNT(1), + .C_HAS_WR_RST(0), + .C_IMPLEMENTATION_TYPE(2), + .C_INIT_WR_PNTR_VAL(0), + .C_MEMORY_TYPE(2), + .C_MIF_FILE_NAME("BlankString"), + .C_MSGON_VAL(1), + .C_OPTIMIZATION_MODE(0), + .C_OVERFLOW_LOW(0), + .C_PRELOAD_LATENCY(0), + .C_PRELOAD_REGS(1), + .C_PRIM_FIFO_TYPE("512x36"), + .C_PROG_EMPTY_THRESH_ASSERT_VAL(4), + .C_PROG_EMPTY_THRESH_NEGATE_VAL(5), + .C_PROG_EMPTY_TYPE(0), + .C_PROG_FULL_THRESH_ASSERT_VAL(15), + .C_PROG_FULL_THRESH_NEGATE_VAL(14), + .C_PROG_FULL_TYPE(0), + .C_RD_DATA_COUNT_WIDTH(5), + .C_RD_DEPTH(16), + .C_RD_FREQ(1), + .C_RD_PNTR_WIDTH(4), + .C_UNDERFLOW_LOW(0), + .C_USE_DOUT_RST(1), + .C_USE_ECC(0), + .C_USE_EMBEDDED_REG(0), + .C_USE_FIFO16_FLAGS(0), + .C_USE_FWFT_DATA_COUNT(1), + .C_VALID_LOW(0), + .C_WR_ACK_LOW(0), + .C_WR_DATA_COUNT_WIDTH(5), + .C_WR_DEPTH(16), + .C_WR_FREQ(1), + .C_WR_PNTR_WIDTH(4), + .C_WR_RESPONSE_LATENCY(1)) + inst ( + .DIN(din), + .RD_CLK(rd_clk), + .RD_EN(rd_en), + .RST(rst), + .WR_CLK(wr_clk), + .WR_EN(wr_en), + .DOUT(dout), + .EMPTY(empty), + .FULL(full), + .RD_DATA_COUNT(rd_data_count), + .WR_DATA_COUNT(wr_data_count), + .CLK(), + .INT_CLK(), + .BACKUP(), + .BACKUP_MARKER(), + .PROG_EMPTY_THRESH(), + .PROG_EMPTY_THRESH_ASSERT(), + .PROG_EMPTY_THRESH_NEGATE(), + .PROG_FULL_THRESH(), + .PROG_FULL_THRESH_ASSERT(), + .PROG_FULL_THRESH_NEGATE(), + .RD_RST(), + .SRST(), + .WR_RST(), + .ALMOST_EMPTY(), + .ALMOST_FULL(), + .DATA_COUNT(), + .OVERFLOW(), + .PROG_EMPTY(), + .PROG_FULL(), + .VALID(), + .UNDERFLOW(), + .WR_ACK(), + .SBITERR(), + .DBITERR()); + + +// synthesis translate_on + +endmodule + diff --git a/coregen/fifo_xlnx_16x19_2clk.veo b/coregen/fifo_xlnx_16x19_2clk.veo new file mode 100644 index 000000000..2e9af1efa --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk.veo @@ -0,0 +1,53 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_16x19_2clk YourInstanceName ( + .din(din), // Bus [18 : 0] + .rd_clk(rd_clk), + .rd_en(rd_en), + .rst(rst), + .wr_clk(wr_clk), + .wr_en(wr_en), + .dout(dout), // Bus [18 : 0] + .empty(empty), + .full(full), + .rd_data_count(rd_data_count), // Bus [4 : 0] + .wr_data_count(wr_data_count)); // Bus [4 : 0] + +// INST_TAG_END ------ End INSTANTIATION Template --------- + +// You must compile the wrapper file fifo_xlnx_16x19_2clk.v when simulating +// the core, fifo_xlnx_16x19_2clk. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + diff --git a/coregen/fifo_xlnx_16x19_2clk.xco b/coregen/fifo_xlnx_16x19_2clk.xco new file mode 100644 index 000000000..d0f638026 --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk.xco @@ -0,0 +1,82 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Fri Sep 11 04:33:27 2009 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = False +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = True +SET vhdlsim = False +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 4.3 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=false +CSET component_name=fifo_xlnx_16x19_2clk +CSET data_count=false +CSET data_count_width=5 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET fifo_implementation=Independent_Clocks_Distributed_RAM +CSET full_flags_reset_value=1 +CSET full_threshold_assert_value=15 +CSET full_threshold_negate_value=14 +CSET input_data_width=19 +CSET input_depth=16 +CSET output_data_width=19 +CSET output_depth=16 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=No_Programmable_Full_Threshold +CSET read_clock_frequency=1 +CSET read_data_count=true +CSET read_data_count_width=5 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=true +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=true +CSET write_data_count_width=5 +# END Parameters +GENERATE +# CRC: 60b85dda + diff --git a/coregen/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.lso b/coregen/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.lso new file mode 100644 index 000000000..f1a6f7899 --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.lso @@ -0,0 +1,3 @@ +blkmemdp_v6_2 +blk_mem_gen_v2_6 +fifo_generator_v4_3 diff --git a/coregen/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/coregen/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt new file mode 100644 index 000000000..ef33fff67 --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<document OS="lin64" product="ISE" version="10.1.03"> + + <!--The data in this file is primarily intended for consumption by Xilinx tools. + The structure and the elements are likely to change over the next few releases. + This means code written to parse this file will need to be revisited each subsequent release.--> + + <application stringID="Xst" timeStamp="Thu Sep 10 21:33:06 2009"> + <section stringID="XST_HDL_SYNTHESIS_REPORT"> + <item dataType="int" stringID="XST_RAMS" value="1"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"></item> + <item dataType="int" stringID="XST_COUNTERS" value="2"> + <item dataType="int" stringID="XST_4BIT_UP_COUNTER" value="2"/> + </item> + <item dataType="int" stringID="XST_REGISTERS" value="32"> + <item dataType="int" stringID="XST_1BIT_REGISTER" value="15"/> + <item dataType="int" stringID="XST_2BIT_REGISTER" value="1"/> + <item dataType="int" stringID="XST_3BIT_REGISTER" value="1"/> + <item dataType="int" stringID="XST_4BIT_REGISTER" value="11"/> + <item dataType="int" stringID="XST_5BIT_REGISTER" value="2"/> + </item> + <item dataType="int" stringID="XST_XORS" value="28"> + <item dataType="int" stringID="XST_1BIT_XOR2" value="28"/> + </item> + </section> + <section stringID="XST_ADVANCED_HDL_SYNTHESIS_REPORT"> + <item dataType="int" stringID="XST_FSMS" value="1"/> + <item dataType="int" stringID="XST_RAMS" value="1"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"></item> + <item dataType="int" stringID="XST_COUNTERS" value="2"> + <item dataType="int" stringID="XST_4BIT_UP_COUNTER" value="2"/> + </item> + <item dataType="int" stringID="XST_REGISTERS" value="107"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="107"/> + </item> + <item dataType="int" stringID="XST_XORS" value="28"> + <item dataType="int" stringID="XST_1BIT_XOR2" value="28"/> + </item> + </section> + <section stringID="XST_FINAL_REGISTER_REPORT"> + <item dataType="int" stringID="XST_REGISTERS" value="126"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="126"/> + </item> + </section> + <section stringID="XST_PARTITION_REPORT"> + <section stringID="XST_PARTITION_IMPLEMENTATION_STATUS"> + <section stringID="XST_NO_PARTITIONS_WERE_FOUND_IN_THIS_DESIGN"/> + </section> + </section> + <section stringID="XST_FINAL_REPORT"> + <section stringID="XST_FINAL_RESULTS"> + <item stringID="XST_TOP_LEVEL_OUTPUT_FILE_NAME" value="/home/matt/coregen/tmp/_cg/fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc"/> + <item stringID="XST_OUTPUT_FORMAT" value="NGC"/> + <item stringID="XST_OPTIMIZATION_GOAL" value="SPEED"/> + <item stringID="XST_KEEP_HIERARCHY" value="no"/> + </section> + <section stringID="XST_DESIGN_STATISTICS"> + <item stringID="XST_IOS" value="101"/> + </section> + <section stringID="XST_CELL_USAGE"> + <item dataType="int" stringID="XST_BELS" value="66"> + <item dataType="int" stringID="XST_GND" value="1"/> + <item dataType="int" stringID="XST_INV" value="2"/> + <item dataType="int" stringID="XST_LUT2" value="18"/> + <item dataType="int" stringID="XST_LUT2L" value="1"/> + <item dataType="int" stringID="XST_LUT3" value="8"/> + <item dataType="int" stringID="XST_LUT4" value="30"/> + <item dataType="int" stringID="XST_LUT4D" value="3"/> + <item dataType="int" stringID="XST_LUT4L" value="3"/> + </item> + <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="126"> + <item dataType="int" stringID="XST_FD" value="4"/> + <item dataType="int" stringID="XST_FDC" value="40"/> + <item dataType="int" stringID="XST_FDCE" value="62"/> + <item dataType="int" stringID="XST_FDP" value="10"/> + <item dataType="int" stringID="XST_FDPE" value="5"/> + </item> + <item dataType="int" stringID="XST_RAMS" value="19"> + <item dataType="int" stringID="XST_RAM16X1D" value="19"/> + </item> + </section> + </section> + <section stringID="XST_DEVICE_UTILIZATION_SUMMARY"> + <item stringID="XST_SELECTED_DEVICE" value="3s2000fg456-5"/> + <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="96"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="126"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="103"/> + <item dataType="int" stringID="XST_NUMBER_USED_AS_LOGIC" value="65"/> + <item dataType="int" stringID="XST_NUMBER_USED_AS_RAMS" value="38"/> + <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="101"/> + <item AVAILABLE="333" dataType="int" stringID="XST_NUMBER_OF_BONDED_IOBS" value="0"/> + </section> + <section stringID="XST_PARTITION_RESOURCE_SUMMARY"> + <section stringID="XST_NO_PARTITIONS_WERE_FOUND_IN_THIS_DESIGN"/> + </section> + <section stringID="XST_ERRORS_STATISTICS"> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_ERRORS" value="0"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="73"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="10"/> + </section> + </application> + +</document> diff --git a/coregen/fifo_xlnx_16x19_2clk_flist.txt b/coregen/fifo_xlnx_16x19_2clk_flist.txt new file mode 100644 index 000000000..5e1a6ed35 --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk_flist.txt @@ -0,0 +1,8 @@ +# Output products list for <fifo_xlnx_16x19_2clk> +fifo_xlnx_16x19_2clk.ngc +fifo_xlnx_16x19_2clk.v +fifo_xlnx_16x19_2clk.veo +fifo_xlnx_16x19_2clk.xco +fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_16x19_2clk_flist.txt +fifo_xlnx_16x19_2clk_xmdf.tcl diff --git a/coregen/fifo_xlnx_16x19_2clk_readme.txt b/coregen/fifo_xlnx_16x19_2clk_readme.txt new file mode 100644 index 000000000..1b5976555 --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk_readme.txt @@ -0,0 +1,39 @@ +The following files were generated for 'fifo_xlnx_16x19_2clk' in directory +/home/matt/gnuradio.git/usrp2/fpga/coregen/: + +fifo_xlnx_16x19_2clk.ngc: + Binary Xilinx implementation netlist file containing the information + required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_16x19_2clk.v: + Verilog wrapper file provided to support functional simulation. + This file contains simulation model customization data that is + passed to a parameterized simulation model for the core. + +fifo_xlnx_16x19_2clk.veo: + VEO template file containing code that can be used as a model for + instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_16x19_2clk.xco: + CORE Generator input file containing the parameters used to + regenerate a core. + +fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: + Please see the core data sheet. + +fifo_xlnx_16x19_2clk_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + +fifo_xlnx_16x19_2clk_readme.txt: + Text file indicating the files generated and how they are used. + +fifo_xlnx_16x19_2clk_xmdf.tcl: + ISE Project Navigator interface file. ISE uses this file to determine + how the files output by CORE Generator for the core can be integrated + into your ISE project. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/coregen/fifo_xlnx_16x19_2clk_xmdf.tcl b/coregen/fifo_xlnx_16x19_2clk_xmdf.tcl new file mode 100644 index 000000000..8d633e9c2 --- /dev/null +++ b/coregen/fifo_xlnx_16x19_2clk_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is <core_name>_xmdf +package provide fifo_xlnx_16x19_2clk_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is <core_name>_xmdf +namespace eval ::fifo_xlnx_16x19_2clk_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_16x19_2clk_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: <module_name> +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_16x19_2clk +} +# ::fifo_xlnx_16x19_2clk_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_16x19_2clk_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x19_2clk.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x19_2clk.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x19_2clk.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x19_2clk.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x19_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x19_2clk_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_16x19_2clk +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/coregen/fifo_xlnx_2Kx36_2clk.asy b/coregen/fifo_xlnx_2Kx36_2clk.asy index 364ce6e1e..a87aa2f84 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.asy +++ b/coregen/fifo_xlnx_2Kx36_2clk.asy @@ -36,7 +36,7 @@ PINATTR PinName full PINATTR Polarity OUT LINE Wide 576 368 544 368 PIN 576 368 RIGHT 36 -PINATTR PinName wr_data_count[10:0] +PINATTR PinName wr_data_count[11:0] PINATTR Polarity OUT LINE Normal 576 432 544 432 PIN 576 432 RIGHT 36 @@ -44,6 +44,6 @@ PINATTR PinName empty PINATTR Polarity OUT LINE Wide 576 592 544 592 PIN 576 592 RIGHT 36 -PINATTR PinName rd_data_count[10:0] +PINATTR PinName rd_data_count[11:0] PINATTR Polarity OUT diff --git a/coregen/fifo_xlnx_2Kx36_2clk.ngc b/coregen/fifo_xlnx_2Kx36_2clk.ngc index 321f44d7d..684eb74f4 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.ngc +++ b/coregen/fifo_xlnx_2Kx36_2clk.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII XILINX-XDM V1.4e -$4`g4d<,[o}e~g`n;"2*413&;$?"<>!1!&2?55<89:?<6>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=?41292*57338;1EC^ZT;CG@WG;990;2<:4108JJUSS2HNO^O2>0;2=65=693CE\XZ5psmd[`kw|pUdk|h=33>585?2;:6D@_UU8svjaXmdzuRzgrdqk[dutm{~7==4?>35854<NFY__6}|`g^gntqX|axneQaefcwa977294:j6?>:HLSQQ<wzfmTjxbc_ujqavn;990;2?84108JJUSS2yxdkRhzlm]wlwct`Vkxh|{<0294;4138;1EC^ZT;rqkbYa}efTxe|jsi]mabgsm5;;6=0>a:32>JSSX\^1hlzn_bmvjq:683:5=i5>1;MVPUSS2{nThlzn_bmvjq:683:5=i5>1;MVPUSS2~xThlzn_bmvjq:683:5=<5>:HLSQQ<CAYK7<7>11092>LHW]]0OE]L30;2=57=62F__\XZ5DNRB85<76880=7AZTQWW>AIWJ5:1<3?425907756:29=6D@_UU8gmk:4=3:5=95<6;MVPUSS2me~x1=::1<1?6>c3:y9<=>ig575)07<<81=>6864:4:=32<>0K:>68J4::76477310BB][[:EKB82<768:047GAPTV9@LD;?3:5=<57:NWWTPR=LFK7;7>1109;>JSSX\^1HBL37;2=5>?330:;5?56659:23??3HNO^L2?>c9B@ATF48:1<374AEFQE977611JHI\N<0<;?DBCZH69255NDEPB868?3HNO^L2;>99B@ATF4<437LJKR@>5:==FLMXJ0:07;@FGVD:?611JHI\N<8<;?DBCZK6;2o5NDEPA846=8730MIJ]B=33:==FLMXI0<07;@FGVG:5611JHI\M<2<;?DBCZK6?255NDEPA808?3HNO^O29>99B@ATE4>437LJKRC>;:==FLMXI0406;@QZJFYUMN90NX<7;CWP[LHAG81H86MN8@08G@753JBNOFQCIBGMW@YSQYO97NG;;BNHE1=DDBH87NB]9:ALIHOS\LN:86M@RD]DAKCUI]CDBRGAFN58GWCF\LN:7I<4DH48@LG;87<0HDO31?48@LG;:7<0HDO33?48@LG;<7<0HDO35?48@LG;>720HDO37;2=2>BNI5=5:6JFB=2=2>BNJ5;5:6JFB=0=2>BNJ595:6JFB=6=2>BNJ5?5:6JFB=4=<>BNJ5=1<384DH@?3;?<L@ZJ0=4?>69GMUG;8730HD^M<183:2=CAYH7<384DNC?4;0<LFK7=384DNC?6;0<LFK7?384DNC?0;0<LFK79384DNC?2;><LFK7;7>16:FLE919>2NDN1>16:FLF979>2NDN1<16:FLF959>2NDN1:16:FLF939>2NDN1818:FLF91=87<0HBL37?;8@JVF490;2:5KOQC?4;?<LFZI0=4?>69GKUD;8790ICO<;DLA0>@5N980J5<4FE18BAE33ONHI>5IDD18BAV33ON[I85Iamqf5>A43NDO>6G?2:K26>O5:2C846GAIUR\45><AGC_\R>>8:KMMQVX8;20ECG[P^20<>OIA]ZT<964IOKWTZ6202CEEY^P07:8MKOSXV:<56GAIUQWEQC03@DBXR>?7:KMMQY79>1BBDZP0358MKOSW99<7D@FT^273>OIA]U;9:5FNHV\431<AGC_S=98;HLJPZ6??2CEEYQ?969JJLRX8H=0ECG[_1@4?LHN\V:H;6GAIU]3@2=NF@^T<H94IOKW[5@03@DBXR??7:KMMQY69>1BBDZP1358MKOSW89<7D@FT^373>OIA]U:9:5FNHV\531<AGC_S<98;HLJPZ7??2CEEYQ>969JJLRX9H=0ECG[_0@4?LHN\V;H;6GAIU]2@2=NF@^T=H94IOKW[4@03@DBXR<?7:KMMQY59>1BBDZP2358MKOSW;9<7D@FT^073>OIA]U99:5FNHV\631<AGC_S?98;HLJPZ4??2CEEYQ=969JJLRX:H=0ECG[_3@4?LHN\V8H;6GAIU]1@2=NF@^T>H94IOKW[7@03@DBXR=?7:KMMQY49>1BBDZP3358MKOSW:9<7D@FT^173>OIA]U89:5FNHV\731<AGC_S>98;HLJPZ5??2CEEYQ<969JJLRX;H=0ECG[_2@4?LHN\V9H;6GAIU]0@2=NF@^T?H94IOKW[6@13@DBXRO9;HLJPZD43@EI>6BF2:NL2>JHIMOO;6B@GHABH1=K]];?7A[[279OQQ4XD=1GYY=;;MWW03=K]]>T@85BSFMM1>KRPJSh7@oeosTfvvohfj1Feca}Vdppmjh53G;87C??4:L24=2<F8:2?6@>159M54733G;:?95A1060?K75<2D:>4=4N017?K748=1E=>?;;O3061=I9:9?7C?<459M56333G;8:95A1257?K740=1E=>7<;O370>H6<9>0B<:>4:L2072<F8>886@>4568J422<2D:8;:4N0640>H6<1>0B<:63:L211=I9<:?7C?:159M50433G;>?95A1467?K72==1E=88;;O3631=I9<2?7C?:929M532<F8<;86@>6068J405<2D::>:4N0470>H6><>0B<893:L231=I9>;?7C?8259M52533G;<895A1677?K70>=1E=:9;;O34<1=I9>387C?74:L2<52<F82:86@>8568J4>2<2D:4;:4N0:40>H601>0B<663:L2=1=I90:?7C?6159M5<433G;2?95A1860?K47;2D9=>5A2318J7543G8??6@=529M635<F;=87C<73:L1=6=I;990B>?<;O117>H4;:1E?9=4N270?K51;2D8;>5A3918J6?43G>;?6@;129M075<F=>87C:92:L56>H0:2D3>6@6f:LA[GSTX@DT\_A_S69MAQQHZB>0BB@J1:M1?JM63Y>0\L\[a:RJJZDR[@NSn6^FN^@VWKGJM:1[^H?4Qb9QEHD6>VY2S^7>;R30?VOJWJEG@D]FOO]@L@EL>2YDY_MJ7:QQRDJXI>1X^[OC_C68WVTF<2YX^O:4TXRF76=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwYeagUsc>?01]Qavsk|8987X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySoga_ymq4566W[oxyaz>329V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]amkYg{:;<?Q]erwop4543\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWkceSua}0120[Wct}e~:?>5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQmio]{kw678=UYi~{ct010?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[goiWqey<=>:_Sgpqir6;>1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UiecQwos2340YUmzgx<Q\W110?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[goiWqey<=>9_Sgpqir6;:1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UiecQwos2342YUmzgx<=8;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_ckm[}iu89:<S_k|umv2[VQ7;:1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UiecQwos234=YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_fa\|jt789:T^h}zlu306>S7'nxm"h gbz-gim'Drd~R|k_qlwvZadWqey<=>>_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UloRv`r1236ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw678:UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=:PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0126[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567>VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<:Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?01:\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq456>W[oxyaz>359V4*aun'xm#jmw.bnh|*Kg{Ua}Qyamwf4Z6Xpfx;<=>Pxn>2:774<2_;#j|i.sd,cf~)keas#@v`r^vntZpfd|o;S=Qwos2345Yg595?<=<;T2,cw`)zo%lou lljz,I}iuW}g{S{ocud2\4Z~hz9:;<Rv`<5<271=R8&myj#|i/fa{*fjlp&GscQ{mq]ueisb8V:Ttb|?012\|j:368;8;6[?/fpe*w`(ojr%oaew/LzlvZrjxV|j`xk?_1]{kw6789Usc1:11^QT462<]9%l~k }f.e`|+ekcq%Ftb|Ptlr\rdjrm;U;Sua}0123[Wct}e~:?>5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQmio]{kw6789UYi~{ct010?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[goiWqey<=>>_Sgpqir6;:1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UiecQwos2346YUmzgx<=<;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_ckm[}iu89:?S_k|umv276=R8&myj#|i/fa{*fjlp&GscQxr^rmpwYeagUsc>?04]Qavsk|8987X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySoga_ymq4561W[oxyaz>329V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]amkYg{:;<:Q]erwop4543\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWkceSua}012;[Wct}e~:?>5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQmio]{kw6780UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp345>XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89:2S_k|umv250=R8&myj#|i/fa{*fjlp&D8=85Z0.eqb+ta'nis"nbdx.L750=R8&myj#|i/fa{*fjlp&D>><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1>1239V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=33:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:66;;0Y=!hrg,qb*adp'iggu!}d^rmpwYeag692??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec2<>338Q5)`zo$yj"ilx/aoo})ulVzexQmio>7:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:26;;0Y=!hrg,qb*adp'iggu!}d^rmpwYeag6=2??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec28>338Q5)`zo$yj"ilx/aoo})ulVzexQmio>;:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:>6;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU;>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR?=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga_0214>S7'nxm"h gbz-gim'{nT|cz}_ckm[7473\:$kh!rg-dg}(ddbr$~iQnup\flhX;;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_703?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\376<]9%l~k }f.e`|+ekcq%yhR~ats]amkY?:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012363=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos2347413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<===6:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4563:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?5348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?8=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01512>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:3>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0=0=1:W3+bta&{l$knv!cmi{+wbXxg~ySjm311<14>S7'nxm"h gbz-gim'{nT|cz}_fa?5;473\:$kh!rg-dg}(ddbr$~iQnup\cf:56;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k595>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh090=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm35?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>5:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg919:91^<"i}f/pe+be&jf`t"|k_qlwvZad4149<6[?/fpe*w`(ojr%oaew/sf\tkruWni753?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ?1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_003?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]244`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ46n2_;#j|i.sd,cf~)keas#jPpovq[beX;8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV>:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT9<h4U1-dvc(un&mht#mcky-q`Zvi|{UloR8>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP70d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^:2b>S7'nxm"h gbz-gim'{nT|cz}_fa\=70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm7<3<8;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8469:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2>>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;:78=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<2<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5>5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>6:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm7:3<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8285>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk161279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:>6;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP0378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX9;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP1106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W;8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_206?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W=8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_406?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W?8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_606?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W18>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_80:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;7<3<n;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;994956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2848512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><3<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0>0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64=4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2808512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><7<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0:0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6414956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f28<8502_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj>_10;?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;T=?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y68;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]16==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R==8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W=837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\17><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<Q9299V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9V=946[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2[=4?3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?P9378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv5678;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?1378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567:;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?3378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567<;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?5378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567>;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?7378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv5670;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?9358Q5)`zo$yj"ilx/aoo})seyU}ma{j0^2\|jt789:9;6[?/fpe*w`(ojr%oaew/uos[sgk}l8T<Rv`r123477<]9%l~k }f.e`|+ekcq%|~R~ats]amk:76;80Y=!hrg,qb*adp'iggu!xr^rmpwYeag6:<3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`31?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?6;463\:$kh!rg-dg}(ddbr${Qnup\flh;;78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d783<>;T2,cw`)zo%lou lljz,swYwf}xTnd`35?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?2;463\:$kh!rg-dg}(ddbr${Qnup\flh;?78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d743<>;T2,cw`)zo%lou lljz,swYwf}xTnd`39?03?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\476<]9%l~k }f.e`|+ekcq%|~R~ats]amkY6:81^<"i}f/pe+be&jf`t"y}_qlwvZdnfV;;>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_203?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\076<]9%l~k }f.e`|+ekcq%|~R~ats]amkY2:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS:<?;T2,cw`)zo%lou lljz,swYwf}xTnd`P8328Q5)`zo$yj"ilx/aoo})pzVzexQmio]:63=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;<?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2344413\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<===6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4563:?1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?5348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?8=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01512>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:3>;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123=76<]9%l~k }f.e`|+ekcq%|~R~ats]dg969:81^<"i}f/pe+be&jf`t"y}_qlwvZad48:5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0<0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm32?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>0:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg929:91^<"i}f/pe+be&jf`t"y}_qlwvZad4<49<6[?/fpe*w`(ojr%oaew/vp\tkruWni7:3<?;T2,cw`)zo%lou lljz,swYwf}xTkn28>328Q5)`zo$yj"ilx/aoo})pzVzexQhc=:=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`8<86n2_;#j|i.sd,cf~)keas#z|Ppovq[beX88l0Y=!hrg,qb*adp'iggu!xr^rmpwY`kV;9<6[?/fpe*w`(ojr%oaew/vp\tkruWniT==?i;T2,cw`)zo%lou lljz,swYwf}xTknQ=1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_23e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]75c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[07a3\:$kh!rg-dg}(ddbr${Qnup\cfY19o1^<"i}f/pe+be&jf`t"y}_qlwvZadW>;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS4<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8585?2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1??>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk191279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:?6;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi39?06?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W98>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_005?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W8:996[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^611>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboV?996[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^411>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboV=996[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^:11>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboV3956[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f28585i2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj><02=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1?1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9585>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5959:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=6=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1;1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95<5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5919:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=:=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=171299V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9V:946[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2[44>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?P110;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T>?64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y4:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^61<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S8<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X>;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]46==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R6=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W08>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0106?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw67888>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0306?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw678:8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0506?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw678<8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0706?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw678>8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0906?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw67808j7X> gsd-vc)`d9$yh"i}1/pescr(ZHGT^IQJN^DTBQ7512_;#j|i.sd,ci6)zm%l~< }fvdw+WGJW[OLCXZPEO307>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c9:<0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`YA[DUMJi?"Io1;?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPFRO\BCb6%@d:=>=4U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe002>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c:$Ce?55Z0.eqb+ta'nf;"j gs3-vcqa|&i~~Qiwgv\wqgsmVLXARHId3/Jj47502_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPfc04?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}Ub>h5Z0.eqb+ta'nf;"j gs3-vcqa|&of|ywPfvdw[lYhz9:;<?h4U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZoXg{:;<=?<a:W3+bta&{l$ka>!re-dvdu)o{nh=#|kc.OpqgYulVnhSdQ|uc2345Ydq5:5?l5Z0.eqb+ta'nf;"j gscp*btck8$yhn!Bst`\vaYckVcTxl?012\g|:66:k0Y=!hrg,qb*ak8'xo#j|ns/eq`f7)zmi$A~{m_sf\`fYnWzi<=>?_b{?6;5f3\:$kh!rg-dh5(ul&mym~ hrea2*wbd'Dy~nR|k_ea\mZurj9:;<Rmv<2<0e>S7'nxm"h gm2-va)`zhy%kjl1/pgg*Kt}kUyhRjl_h]pqg6789Uhu1:13`9V4*aun'xm#jb?.sf,cwgt&nxoo< }db-NwpdXzmUooRgPst`3456Xkp6>2>o4U1-dvc(un&mg<#|k/fpbw+aulj;%~im Mrwa[wbXljUbS~{m0123[f;>79j7X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#@}zb^pg[aeXaVy~n=>?0^az8284i2_;#j|i.sd,ci6)zm%l~l}!gsf`5+tck&GxyoQ}d^f`[lYt}k:;<=Qly=:=7d=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)J{|hT~iQkc^k\wpd789:Tot26>2`8Q5)`zo$yj"ic0/pg+btf{'myhn?!rea,IvseW{nThnQf_rwa4567We0=0<c:W3+bta&{l$ka>!re-dvdu)o{nh=#|kc.OpqgYulVnhSdQ|uc2345Yk}}6:<3=m;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/LqvfZtcWmiTeR}zb1234Zjr|5;5?o5Z0.eqb+ta'nf;"j gscp*btck8$yhn!Bst`\vaYckVcTxl?012\hpr;:79i7X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#@}zb^pg[aeXaVy~n=>?0^nvp959;k1^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%FxlPre]ggZoX{|h;<=>Pltv?0;5e3\:$kh!rg-dh5(ul&mym~ hrea2*wbd'Dy~nR|k_ea\mZurj9:;<Rbzt=7=7g=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)J{|hT~iQkc^k\wpd789:T`xz36?1a?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+HurjVxoSimPi^qvf5678Vf~x1913c9V4*aun'xm#jb?.sf,cwgt&nxoo< }db-NwpdXzmUooRgPst`3456Xd|~743=m;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/LqvfZtcWmiTeR}zb1234Zjr|535?o5Z0.eqb+ta'nf;"j gscp*btck8$yhn!Bst`\vaYckVcTxl?012\|jt;879h7X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#@}zb^pg[aeXaVy~n=>?0^zlv9776:h0Y=!hrg,qb*ak8'xo#j|ns/eq`f7)zmi$A~{m_sf\`fYnWzi<=>?_ymq8484j2_;#j|i.sd,ci6)zm%l~l}!gsf`5+tck&GxyoQ}d^f`[lYt}k:;<=Qwos>1:6d<]9%l~k }f.eo4+tc'nxj#i}db3-vae(EziSjPdb]j[vse89:;Sua}<2<0f>S7'nxm"h gm2-va)`zhy%kjl1/pgg*Kt}kUyhRjl_h]pqg6789Usc2;>2`8Q5)`zo$yj"ic0/pg+btf{'myhn?!rea,IvseW{nThnQf_rwa4567Wqey080<b:W3+bta&{l$ka>!re-dvdu)o{nh=#|kc.OpqgYulVnhSdQ|uc2345Yg{6=2>l4U1-dvc(un&mg<#|k/fpbw+aulj;%~im Mrwa[wbXljUbS~{m0123[}iu4>48n6[?/fpe*w`(oe:%~i!hr`q-cwbd9'xoo"C|uc]q`ZbdW`Uxyo>?01]{kw:?6:h0Y=!hrg,qb*ak8'xo#j|ns/eq`f7)zmi$A~{m_sf\`fYnWzi<=>?_ymq8<8512_;#j|i.sd,ci6)zm%l~l}!gsf`5+tck&xoSimPi^21=>S7'nxm"h gm2-va)`zhy%kjl1/pgg*tcWmiTeR?=a:W3+bta&{l$ka>!re-dvdu)o{nh=#|kc.pg[aeXaV;;>45Z0.eqb+ta'nf;"j gscp*btck8$yhn!}d^f`[lY5:01^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%yhRjl_h]06<=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)ulVnhSdQ;289V4*aun'xm#jb?.sf,cwgt&nxoo< }db-q`ZbdW`U>>45Z0.eqb+ta'nf;"j gscp*btck8$yhn!}d^f`[lY1:01^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%yhRjl_h]46<=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)ulVnhSdQ7289V4*aun'xm#jb?.sf,cwgt&nxoo< }db-q`ZbdW`U2??5Z0.eqb+ta'nf;"j gscp*btck8$yhn!}d^f`[lYt}k:;<=2?>218Q5)`zo$yj"ic0/pg+btf{'myhn?!rea,vaYckVcTxl?012?5584:2_;#j|i.sd,ci6)zm%l~l}!gsf`5+tck&xoSimPi^qvf56785;5??5Z0.eqb+ta'nf;"j gscp*btck8$yhn!}d^f`[lYt}k:;<=2=>208Q5)`zo$yj"ic0/pg+btf{'myhn?!rea,vaYckVcTxl?012?7;553\:$kh!rg-dh5(ul&mym~ hrea2*wbd'{nThnQf_rwa45674=48>6[?/fpe*w`(oe:%~i!hr`q-cwbd9'xoo"|k_ea\mZurj9:;<1;1339V4*aun'xm#jb?.sf,cwgt&nxoo< }db-q`ZbdW`Uxyo>?01>5:64<]9%l~k }f.eo4+tc'nxj#i}db3-vae(zmUooRgPst`3456;?7997X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#jPdb]j[vse89:;050<2:W3+bta&{l$ka>!re-dvdu)o{nh=#|kc.pg[aeXaVy~n=>?0=;=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a3+fguzpdnx1>1289V4*aun'xm#jb?.sf,cwgt&{y"m?/bcqv|hb|5;5>45Z0.eqb+ta'nf;"j gscp*wus{&i;#no}rxlfp949:01^<"i}f/pe+bj7&{n$ko|.sqww*e7'jky~t`jt=1=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a3+fguzpdnx1:12g9V4*aun'xm#jb?.sf,cwgt&{y"m?/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g5)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e7'ng~t#ib[5_-chu)ez8m7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%laxv!glY6Y+aj{'gx>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?30?00?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5979::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7>3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=1=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;<7887X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=1;12c9V4*aun'xm#jb?.sf,cwgt&{y"m?/w3\4Zgil9:;<<<m;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1^3\ekb789::>o5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?P2^cm`567888i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R=Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e7';T8Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V?Tbbz?01226<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1>1289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|5;5>45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp949:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=1=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1:12g9V4*aun'xm#jb?.sf,cwgt&{y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[5_-chu)ez8m7X> gsd-vc)`d9$yh"i}ar,qwqu(k8%laxv!glY6Y+aj{'gx>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?30?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5979::1^<"i}f/pe+bj7&{n$ko|.sqww*e6';7>3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o<!y1=1=66=R8&myj#|i/fn3*wb(o{kx"}{s.a2+s7;<7887X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1;12c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\4Zgil9:;<<<m;T2,cw`)zo%l`= }d.eqev(u{}y$o<!y1^3\ekb789::>o5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?P2^cm`567888i7X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=R=Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T8Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g4)q9V?Tbbz?012265=R8&myj#|i/fn3*wb(o{kx"}{s.aliu6582_;#j|i.sd,ci6)zm%l~l}!rrvp+fijx8827X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[l573\:$kh!rg-dh5(ul&mym~ }suq,vdkXmdzuRhm_h]lv5678:;0Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;=?=4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov10>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|88>7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{1107?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs:;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz<259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq25<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex8<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw272<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~<>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu:10>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|0827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?4;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw30?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2>>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6:2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq585>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}949W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8685k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<2<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw34?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs783Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6>2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:26Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}909:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=4=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<6<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0:0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs743<l;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;07Uyx?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:>6;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>::Zts:h1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>3:7d<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|311<1a>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1??>^pw6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2>>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7>3<n;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[}iu4:49m6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^zlv929:h1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>6:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|36?0b?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey0:0=a:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZ~hz525>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:>68l0Y=!hrg,qb*ak8'xo#~ats-`kphs4949<6[?/fpe*w`(oe:%~i!}povq+firf}6:<3?i;T2,cw`)zo%l`= }d.psjqt(kfex1?11g9V4*aun'xm#jb?.sf,vuhsz&idycz32?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=1=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?0;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9399o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;>7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5=5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~743?i;T2,cw`)zo%l`= }d.psjqt(kfex1711d9V4*aun'xm#jb?.sf,vuhsz&idyczP00g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_03e?P6(o{l%~k!hl1,q`*twf}x$ob{at^335`=R8&myj#|i/fn3*wb(zyd~"m`uov\64c<]9%l~k }f.eo4+tc'{zex!lotlw[67b3\:$kh!rg-dh5(ul&x{by| cnwmpZ26m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY29l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX>8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW>;n7X> gsd-vc)`d9$yh"|nup,gjsi|V2:i6[?/fpe*w`(oe:%~i!}povq+firf}U2>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2?>318Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?5585:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95;5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2=>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?7;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64=49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1;1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>5:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;?7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:050=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=;=64=R8&myj#|i/fn3*wb(zyd~"m`uov\`4Y7:81^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8U:>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<Q>0338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\677<]9%l~k }f.eo4+tc'{zex!lotlw[a7X;;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T8??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P5338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\277<]9%l~k }f.eo4+tc'{zex!lotlw[a7X?;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T4??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P9508Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,IvseW~xThlzn_bmvjqYnWzi<=>?_b{?4;253\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'Dy~nRy}_ecweZeh}g~TeR}zb1234Ze~484?>6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"C|uc]tvZbf|hUhcx`{_h]pqg6789Uhu1<1439V4*aun'xm#jb?.vp,crgt&n}oo= xdb-NwpdX{UomyoPcnwmpZoX{|h;<=>Pcx>0:14<]9%l~k }f.eo4+qu'n}j#ixdb2-sae(EziSz|Pd`vb[firf}UbS~{m0123[f;<7>97X> gsd-vc)`d9$|~"ixar,dsae7&~nh#@}zb^uq[agsiVidyczPi^qvf5678Vir080;2:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.OpqgYpzVnjxlQlotlw[lYt}k:;<=Qly=4=07=R8&myj#|i/fn3*rt(o~kx"jykc1,t`f)J{|hT{Qkauc\gjsi|VcTxl?012\g|:06=80Y=!hrg,qb*ak8'}y#jyns/et`f6)mi$A~{m_vp\`drfWje~byQf_rwa4567Wjs743:=;T2,cw`)zo%l`= xr.etev(`mi;"zjl/LqvfZquWmkmRm`uov\mZurj9:;<Rmv<8<77>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*Kt}kU|~Rjnt`]`kphsW`Uxyo>?01]oqq:76=>0Y=!hrg,qb*ak8'}y#jyns/et`f6)mi$A~{m_vp\`drfWje~byQf_rwa4567We0<>1429V4*aun'xm#jb?.vp,crgt&n}oo= xdb-NwpdX{UomyoPcnwmpZoX{|h;<=>Pltv?5;243\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'Dy~nRy}_ecweZeh}g~TeR}zb1234Zjr|5858>5Z0.eqb+ta'nf;"z| gvcp*bqck9$|hn!Bst`\swYci}kTob{at^k\wpd789:T`xz33?60?P6(o{l%~k!hl1,tv*apiz$l{im?.vf`+HurjV}ySio{a^alqkrXaVy~n=>?0^nvp929<:1^<"i}f/pe+bj7&~x$kzo|.fugg5(plj%FxlPws]geqgXkfexRgPst`3456Xd|~793:<;T2,cw`)zo%l`= xr.etev(`mi;"zjl/LqvfZquWmkmRm`uov\mZurj9:;<Rbzt=4=06=R8&myj#|i/fn3*rt(o~kx"jykc1,t`f)J{|hT{Qkauc\gjsi|VcTxl?012\hpr;?7>87X> gsd-vc)`d9$|~"ixar,dsae7&~nh#@}zb^uq[agsiVidyczPi^qvf5678Vf~x161429V4*aun'xm#jb?.vp,crgt&n}oo= xdb-NwpdX{UomyoPcnwmpZoX{|h;<=>Pltv?=;243\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'Dy~nRy}_ecweZeh}g~TeR}zb1234Z~hz5:5895Z0.eqb+ta'nf;"z| gvcp*bqck9$|hn!Bst`\swYci}kTob{at^k\wpd789:Ttb|311<77>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*Kt}kU|~Rjnt`]`kphsW`Uxyo>?01]{kw:66=90Y=!hrg,qb*ak8'}y#jyns/et`f6)mi$A~{m_vp\`drfWje~byQf_rwa4567Wqey0?0;3:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.OpqgYpzVnjxlQlotlw[lYt}k:;<=Qwos>0:15<]9%l~k }f.eo4+qu'n}j#ixdb2-sae(EziSz|Pd`vb[firf}UbS~{m0123[}iu4=4??6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"C|uc]tvZbf|hUhcx`{_h]pqg6789Usc2:>518Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,IvseW~xThlzn_bmvjqYnWzi<=>?_ymq8383;2_;#j|i.sd,ci6){%l{l}!gvf`4+qck&GxyoQxr^fbpdYdg|dSdQ|uc2345Yg{6<29=4U1-dvc(un&mg<#y}/fubw+aplj:%{im Mrwa[rtXlh~jSnaznu]j[vse89:;Sua}<9<77>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*Kt}kU|~Rjnt`]`kphsW`Uxyo>?01]{kw:>6:;0Y=!hrg,qb*ak8'}y#jyns/et`f6)mi${Qkauc\gjsi|VcT<>?4U1-dvc(un&mg<#y}/fubw+aplj:%{im ws]geqgXkfexRgP1208Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,swYci}kTob{at^k\55563\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'~xThlzn_bmvjqYnW;9:7X> gsd-vc)`d9$|~"ixar,dsae7&~nh#z|Pd`vb[firf}UbS>=>;T2,cw`)zo%l`= xr.etev(`mi;"zjl/vp\`drfWje~byQf_512?P6(o{l%~k!hl1,tv*apiz$l{im?.vf`+rtXlh~jSnaznu]j[0563\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'~xThlzn_bmvjqYnW?9:7X> gsd-vc)`d9$|~"ixar,dsae7&~nh#z|Pd`vb[firf}UbS:=>;T2,cw`)zo%l`= xr.etev(`mi;"zjl/vp\`drfWje~byQf_912?P6(o{l%~k!hl1,tv*apiz$l{im?.vf`+rtXlh~jSnaznu]j[<5f3\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'~xThlzn_bmvjqYnWzi<=>?<1<0f>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*quWmkmRm`uov\mZurj9:;<1??>2c8Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,swYci}kTob{at^k\wpd789:7=3=n;T2,cw`)zo%l`= xr.etev(`mi;"zjl/vp\`drfWje~byQf_rwa45674;48m6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"y}_ecweZeh}g~TeR}zb1234959;h1^<"i}f/pe+bj7&~x$kzo|.fugg5(plj%|~Rjnt`]`kphsW`Uxyo>?01>7:6g<]9%l~k }f.eo4+qu'n}j#ixdb2-sae({UomyoPcnwmpZoX{|h;<=>35?1b?P6(o{l%~k!hl1,tv*apiz$l{im?.vf`+rtXlh~jSnaznu]j[vse89:;0;0<a:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.uq[agsiVidyczPi^qvf56785=5?l5Z0.eqb+ta'nf;"z| gvcp*bqck9$|hn!xr^fbpdYdg|dSdQ|uc2345:?6:k0Y=!hrg,qb*ak8'}y#jyns/et`f6)mi${Qkauc\gjsi|VcTxl?012?=;4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)di{xrbhz30?0:?P6(o{l%~k!hl1,tv*apiz$|y} c0-`ewt~fl~7=3<6;T2,cw`)zo%l`= xr.etev(p{}y$o<!laspzj`r;:7827X> gsd-vc)`d9$|~"ixar,twqu(k8%hm|vndv?7;4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)di{xrbhz34?0e?P6(o{l%~k!hl1,tv*apiz$|y} c0-dip~)odQ;Q#ib1/o26c=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+bkrp'mfW<S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)`e|r%k`U=]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e6'ng~t#ib[2_-chu)ez8m7X> gsd-vc)`d9$|~"ixar,twqu(k8%laxv!glY7Y+aj{'gx>k5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#jczx/en_0[)ody%a~<<;T2,cw`)zo%l`= xr.etev(p{}y$o<!y1=2=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+s7;97887X> gsd-vc)`d9$|~"ixar,twqu(k8%}=1<1229V4*aun'xm#jb?.vp,crgt&~y"m>/w3?7;443\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q95>5>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?35?0a?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5Z6Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m>/w3\5Zgil9:;<<<m;T2,cw`)zo%l`= xr.etev(p{}y$o<!y1^0\ekb789::>o5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?P3^cm`567888i7X> gsd-vc)`d9$|~"ixar,twqu(k8%}=R:Paof34566:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e6';T9R``t123444>3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)di{xrbhz30?0:?P6(o{l%~k!hl1,tv*apiz$|y} c3-`ewt~fl~7=3<6;T2,cw`)zo%l`= xr.etev(p{}y$o?!laspzj`r;:7827X> gsd-vc)`d9$|~"ixar,twqu(k;%hm|vndv?7;4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)di{xrbhz34?0e?P6(o{l%~k!hl1,tv*apiz$|y} c3-dip~)odQ;Q#ib1/o26c=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+bkrp'mfW<S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)`e|r%k`U=]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e5'ng~t#ib[2_-chu)ez8m7X> gsd-vc)`d9$|~"ixar,twqu(k;%laxv!glY7Y+aj{'gx>k5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#jczx/en_0[)ody%a~<<;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1=2=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7;97887X> gsd-vc)`d9$|~"ixar,twqu(k;%}=1<1229V4*aun'xm#jb?.vp,crgt&~y"m=/w3?7;443\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q95>5>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#{?35?0a?P6(o{l%~k!hl1,tv*apiz$|y} c3-u5Z6Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m=/w3\5Zgil9:;<<<m;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1^0\ekb789::>o5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#{?P3^cm`567888i7X> gsd-vc)`d9$|~"ixar,twqu(k;%}=R:Paof34566:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e5';T9R``t12344473\:$kh!rg-dh5(pz&m|m~ xsuq,gjkw9;:0Y=!hrg,qb*ak8'}y#jyns/uppv)dgdz9>55Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]efZo5=2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`Rg=c:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXg{:;<=<k;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[lYhz9:;<<?k;T2,cw`)zo%l`= xr.pbiZquWldTe<<<;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw61=R8&myj#|i/fn3*rt(yd~"Clotlw[firf};996[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at0210>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{3368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr3:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by;=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp3433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d;?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov;61=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}3956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8585k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw31?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp692?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:56Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}959:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<5<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs793<l;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;=7Uyx?74U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:16;i0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>5:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=5=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu191_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir050=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~414T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;178h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?=;Yu|;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?4;4e3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<02=6`=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2>0?]qp7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|31?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey0?0=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz595>l5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:36;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?1;4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<7<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1912`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{632?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;17;m7X> gsd-vc)`d9$|~"ynup,gjsi|5:5>=5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7==0>f:W3+bta&{l$ka>!ws-ttkru'je~by2>>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<3<2b>S7'nxm"h gm2-sw)pxg~y#naznu>0:4`<]9%l~k }f.eo4+qu'~zex!lotlw8186n2_;#j|i.sd,ci6){%||cz}/bmvjq:268l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4?4:j6[?/fpe*w`(oe:%{!xpovq+firf}6<2<h4U1-dvc(un&mg<#y}/vrmpw)dg|d050>f:W3+bta&{l$ka>!ws-ttkru'je~by26>0g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_13f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^32b>S7'nxm"h gm2-sw)pxg~y#naznu]244c<]9%l~k }f.eo4+qu'~zex!lotlw[77b3\:$kh!rg-dh5(pz&}{by| cnwmpZ56m2_;#j|i.sd,ci6){%||cz}/bmvjqY39l1^<"i}f/pe+bj7&~x${}`{r.alqkrX=8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW?;n7X> gsd-vc)`d9$|~"ynup,gjsi|V=:i6[?/fpe*w`(oe:%{!xpovq+firf}U3=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T5?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?30?00?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28469:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86:2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?32?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28685:2_;#j|i.sd,ci6){%||cz}/bmvjqYc95>5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2:>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?2;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64>49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=161239V4*aun'xm#jb?.vp,suhsz&idyczPd0>::77<]9%l~k }f.eo4+qu'~zex!lotlw[a7X8;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;T=?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P1102?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S5<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_801?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18585;2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5;;2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<31?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18785:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:595>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2;>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?1;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54?49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>191239V4*aun'xm#jb?.vp,suhsz&idyczPd3>;:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;178:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_001?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[46592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V89=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R==1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^615>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z3592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V<9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R9=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^:15>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z?6>2_;#j|i.sd,i`k(lfSdQ?179V4*aun'xm#`kb/emvpZoX98=0Y=!hrg,qb*kbe&ndyyQf_0223>S7'nxm"h mdo,`jssW`U:=<94U1-dvc(un&gna"j`uu]j[446?2_;#j|i.sd,i`k(lfSdQ>3058Q5)`zo$yj"cjm.flqqYnW8>:;6[?/fpe*w`(elg$hb{{_h]2141<]9%l~k }f.ofi*bh}}UbS<8>7:W3+bta&{l$ahc dnww[lY6?8=0Y=!hrg,qb*kbe&ndyyQf_0:23>S7'nxm"h mdo,`jssW`U:5<84U1-dvc(un&gna"j`uu]j[7703\:$kh!rg-nah)cg|~TeR<?169V4*aun'xm#`kb/emvpZoX:8;<7X> gsd-vc)jmd%ocxzPi^0152=R8&myj#|i/lgn+air|VcT>>?8;T2,cw`)zo%fi`!kotv\mZ439>1^<"i}f/pe+hcj'me~xRgP2434?P6(o{l%~k!bel-gkprXaV8==:5Z0.eqb+ta'dof#iazt^k\62703\:$kh!rg-nah)cg|~TeR<7169V4*aun'xm#`kb/emvpZoX:0;=7X> gsd-vc)jmd%ocxzPi^123>S7'nxm"h mdo,`jssW`U8<<94U1-dvc(un&gna"j`uu]j[676?2_;#j|i.sd,i`k(lfSdQ<2058Q5)`zo$yj"cjm.flqqYnW:9:;6[?/fpe*w`(elg$hb{{_h]0041<]9%l~k }f.ofi*bh}}UbS>;>6:W3+bta&{l$ahc dnww[lY39?1^<"i}f/pe+hcj'me~xRgP5048Q5)`zo$yj"cjm.flqqYnW?;=7X> gsd-vc)jmd%ocxzPi^522>S7'nxm"h mdo,`jssW`U3=;5Z0.eqb+ta'dof#iazt^k\=4?<]9%l~k }f.ofi*bh}}Ufi`2?>0c8Q5)`zo$yj"cjm.flqqYjmd6:<3?n;T2,cw`)zo%fi`!kotv\i`k;984:m6[?/fpe*w`(elg$hb{{_lgn84499h1^<"i}f/pe+hcj'me~xRcjm=30:4g<]9%l~k }f.ofi*bh}}Ufi`2>4?3b?P6(o{l%~k!bel-gkprXelg7=80>a:W3+bta&{l$ahc dnww[hcj48<5=l5Z0.eqb+ta'dof#iazt^ofi97068k0Y=!hrg,qb*kbe&ndyyQbel>2<;7f3\:$kh!rg-nah)cg|~Tahc318<2=>S7'nxm"h mdo,`jssWdof0<0>a:W3+bta&{l$ahc dnww[hcj4;:5=l5Z0.eqb+ta'dof#iazt^ofi94668k0Y=!hrg,qb*kbe&ndyyQbel>16;7f3\:$kh!rg-nah)cg|~Tahc322<2e>S7'nxm"h mdo,`jssWdof0?:11`9V4*aun'xm#`kb/emvpZkbe58>2<o4U1-dvc(un&gna"j`uu]nah:5>7;j7X> gsd-vc)jmd%ocxzPmdo?6286i2_;#j|i.sd,i`k(lfS`kb<3:=5d=R8&myj#|i/lgn+air|Vgna1<6>0;8Q5)`zo$yj"cjm.flqqYjmd692<o4U1-dvc(un&gna"j`uu]nah:487;j7X> gsd-vc)jmd%ocxzPmdo?7486i2_;#j|i.sd,i`k(lfS`kb<20=5d=R8&myj#|i/lgn+air|Vgna1=<>0c8Q5)`zo$yj"cjm.flqqYjmd6883?n;T2,cw`)zo%fi`!kotv\i`k;;<4:56[?/fpe*w`(elg$hb{{_lgn868612_;#j|i.sd,i`k(lfS`kb<5<2=>S7'nxm"h mdo,`jssWdof080>9:W3+bta&{l$ahc dnww[hcj4?4:56[?/fpe*w`(elg$hb{{_lgn828612_;#j|i.sd,i`k(lfS`kb<9<2=>S7'nxm"h mdo,`jssWdof0409c:W3+bta&{l$ahc gco-cgk`&nhfkl agda`*gk`'kf`S`kb_fgmawgsg{%}magk.bqwv*tfeeed|V>R.scn*w)q:Vddecg{.scn+av>p0$ym`8l;T2,cw`)zo%fi`!hbl,dfha)okglm#`heba-fha(jeaTahcPgdlfvdrhz&|j`dj!crvq+wgjdfe{W<S!r`o-v*p5Wgebbdz!r`o,`u?1'xja;m4U1-dvc(un&gna"imm/eaib(`jdmj"cijcb,aib)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP>P }al,q+s4Xffceey }al-gt<~>&{kf:n5Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ8Q#|nm/p,r7Yig`dbx#|nm.fs=}?)zhg:?6[?/fpe*w`(zhgT~iQjn058Q5)`zo$yj"|nm^pfcjssWld:?6[?/fpe*w`(zhgT{Qjn0f8Q5)`zo$yj"||tcnh+wbXzz~Tm~|jg328Q5)`zo$yj"||tcnh+wbXzz~Tm~|jg^f265=R8&myj#|i/sqwfim(zmUyyQnssgd[a46k2_;#j|i.sd,vvredb%yhR||t^alig7c3\:$kh!rg-qwqdkc&xoS}{_bmnf47b3\:$kh!rg-qwqdkc&xoS}{_sgd8486m2_;#j|i.sd,vvredb%yhR||t^pfc9499m1^<"i}f/pe+wusjea$~iQ}su]qabY69m1^<"i}f/pe+wusjea$~iQ}su]qabY59m1^<"i}f/pe+wusjea${Q}su]bwwc`:91^<"i}f/pe+wusjea${Q}su]bwwc`Wm;9<6[?/fpe*w`(zz~i`f!xr^pppZgtzlmTh??l;T2,cw`)zo%yylck.uq[wusWjefn<j4U1-dvc(un&xxxobd/vp\vvrXkfgi=<k4U1-dvc(un&xxxobd/vp\vvrXzlm7<3?j;T2,cw`)zo%yylck.uq[wusW{ol0<0>d:W3+bta&{l$~~zmlj-tvZtt|VxnkR>>d:W3+bta&{l$~~zmlj-tvZtt|VxnkR?n;TQFVZGKAHYh7X]JR^TJWLDKM:1]ON74VHGT[Q_WM:1\IL=4WD@a?RTN\LUME_][c:UQMQCXEFNNSLm4WSKWAZKHLLUI=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB96V@RB[5?]USD@H<7U][_FLG3>^T\V\HOo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohfj1j``a|t^gntqe3hffc~zPftno2>dfkb{h6lncjws[hguclx87nbdd:fbpdYdg|d$='k;ecweZeh}g~#=$k4d`vb[firf}":<$j4d`vb[firf}"9%i5kauc\gjsi|!9"h6jnt`]`kphs =#o7io{a^alqkr/= n0hlzn_bmvjq.1!m1omyoPcnwmp-1.l2njxlQlotlw,=/c3mkmRm`uov+=,b<lh~jSnaznu>3:46<lh~jSnaznu>24?69?2nieyk}r79gmk.7!?1oec&>)69gmk.68 =0hd`'10+4?aoi 88";6jfn)30-2=cag":8$94dhl+50/03mce$<8&7:fjj-70!>1oec&>8(58`lh/90#=7iga(3+4?aoi ;:";6jfn)02-2=cag"9>$94dhl+66/03mce$?:&7:fjj-42!>1oec&=6(58`lh/:>#<7iga(3:*3>bnf!82%;5kio*0-2=cag"8<$94dhl+74/03mce$><&7:fjj-54!>1oec&<4(58`lh/;<#=7iga(5+5?aoi <#=7iga(7+5?aoi >#=7iga(9+5?aoi 0#=7iga<1<4?aoi48:5;6jfn=32:2=cag6:>394dhl?56803mce0<:17:fjj9726>1oec2>6?58`lh;9>4<7iga<0:=3>bnf5;22;5kio>2:2=cag69<394dhl?64803mce0?<17:fjj9446>1oec2=4?58`lh;:<4<7iga<34=3>bnf58<2:5kio>1<;1<l`d7>409;ekm87803mce0>>17:fjj9566>1oec2<2?58`lh;;:4<7iga<26==>bnf59>6=08;ekm8639>2nbb1=16:fjj929>2nbb1;16:fjj909>2nbb1916:fjj9>9>2nbb1717:flqq.7!>1ocxz'1(:8`jss 8:"46j`uu*25,><lf$<<&8:flqq.6; 20hb{{(06*<>bh}}":9$64dnww,40.02ndyy&>7(:8`jss 82"46j`uu*2=,1<lf$?'7;emvp-47!11ocxz'20+;?air|!89%55kotv+66/?3me~x%<;)99gkpr/:<#37iazt)05-==cg|~#>:'7;emvp-4?!11ocxz'28+4?air|!9"46j`uu*04,><lf$>?&8:flqq.4: 20hb{{(21*<>bh}}"88$64dnww,63.?2ndyy&;)69gkpr/= =0hb{{(7+4?air|!=";6j`uu*;-2=cg|~#5$94dnww858?3me~x1??>99gkpr;98437iazt=31:==cg|~7=>07;emvp973611ocxz314<;?air|5;=255kotv?528?3me~x1?7>99gkpr;904<7iazt=3=<>bh}}69<364dnww877902ndyy2=2?:8`jss4;9546j`uu>10;><lf0?;18:flqq:5>720hb{{<35=<>bh}}694364dnww87?9?2ndyy2=>99gkpr;;9437iazt=12:==cg|~7??07;emvp954611ocxz335<b?air|59>6=07;emvp9526>1ocxz33?58`jss4=4<7iazt=7=3>bh}}6=2:5kotv?3;1<lf0508;emvp9?902ooek<age78ahvsq:80jdh`_fgmawgsg{U}8R=# Ykomk~'KFXN,Jkaescwkw&68';%<??;;gkekZ~kfqU9Gu=9_3aoo64<n`ldSubax^0H|60X:jf` kgio^efj`tf|fxTz9Q<,OMMA)HHFL9h56hffn]{hk~X:Br8:R<llj.emciXoldn~lz`r^t7[6*|kVbjRgat^aoo86+kVbjR}}su?3(fYulVlyi|3>,b]kevYulVnjxlQlotlw94*dWmceSzgkti?02)eX`hyT{Qkauc\gjsi|4;'oRhzlm]ehdatW{yS{oc=0.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7; nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=24/gZktofdTzlb21-a\vaYcmy~c1?>;8-a\lduX}gnn~kb`w<2/gZnf{Vkgab}{_gwoh86+kVbjR||t<3/gZbf|hUhcx`{_vkgpm;69%iTdl}Pws]bgn;7$jU~hQjcb?3(fYdgdgdbRmcobi>4)eX{UjofQcov?3(fYulVzexQxievk947+kVxiRhxfu]geqgXkfex0>#c^jbwZgkefyShctx?3(fYulVnjxlQlotlw[roc|a7:=!mPowgqbiipWee|1="l_vp\tkruW~coxe3>1-a\twi`Wlg{xtQ{yqg>4)eX{UomyoPcnwmpZqnl}b6=<"l_qpfhjgcW{ol0?#c^flqqYu{}U}ma3?,b]kevYci}kTob{at<2/gZvugnUmyabPtipfwmYimnkiRxnl<0303*dW~xThh~{h<030=*dWyxdkRkbpu{\pmtb{aUeijo{e^tbh83+kVzycjQjmqvz[qnumzbTm~}jru]uei;3$jUcm~Qyamkg95*dWyxdkRhzlm]wlwct`Vkxh|{_wco9763?%ida}aaeov\jdkb5ocmcRvcny]1O}51W;igg!mPv`nj`Zjh4:'oR~}il]emciX|pzn1?ew19.`[uthoVl~`aQ{yqg>4)eXelgd~tQ{yqg>5){5m2lbjbQwloz\6N~4>V8h`fQiigm\c`hbzh~d~Rx;_2]{wqY6<2l~`a94iov\gim?3gmhnxgcd99lr`tadf}j7}|`g^gntq6<2zycjQjmqvz[qnumzb#<$?;;qplcZcjx}sTxe|jsi*2-43<x{elShctx]wlwct`!;;%<:4psmd[`kw|pUdk|h)0*51=wzfmTi`~{y^vkv`uo :#:86~}of]fiur~W}byi~f'4(37?uthoVof|ywPtipfwm.2!8>0|ah_dosp|Ys`{oxd%8&159svjaXmdzuRzgrdqk,2/6<2zycjQjmqvz[qnumzb#4$?;;qplcZcjx}sTxe|jsi*:-41<x{elShctx]wlwct`5;;6=0>b:rqkbYbey~rSyf}erj\evubz}";%<l4psmd[`kw|pUdk|h^cpw`ts 8#:o6~}of]fiur~W}byi~fParqfvq.68 ;i7}|`g^gntqX|axneQnsrgqp-4.9k1{~biPelrw}ZrozlycSl}|esv+7,7e3yxdkRkbpu{\pmtb{aUj~k}t)6*5g=wzfmTi`~{y^vkv`uoWhyxiz'5(3a?uthoVof|ywPtipfwmYf{zoyx%8&1c9svjaXmdzuRzgrdqk[dutm{~#;$?m;qplcZcjx}sTxe|jsi]bwvcu|!2"=o5rne\ahvsqV~c~h}g_`qpawr/1 ;n7}|`g^gntqX|axneQnsrgqp977294:n6~}of]fiur~W}byi~fPndebp`.7!8h0|ah_dosp|Ys`{oxdR`jg`vf,4/6k2zycjQjmqvz[qnumzbTbhintd*24,7e3yxdkRkbpu{\pmtb{aUeijo{e)0*5g=wzfmTi`~{y^vkv`uoWgolmyk'3(3a?uthoVof|ywPtipfwmYimnki%:&1c9svjaXmdzuRzgrdqk[kc`i}o#9$?m;qplcZcjx}sTxe|jsi]mabgsm!<"=o5rne\ahvsqV~c~h}g_ogdeqc/? ;i7}|`g^gntqX|axneQaefcwa->.9k1{~biPelrw}ZrozlycSckhaug+=,7b3yxdkRkbpu{\pmtb{aUeijo{e=33>58>3yxdkRhzlm30?uthoVl~`aQ{hsgpl-6.9:1{~biPftno[qnumzb#=$?;;qplcZ`rdeUdk|h)33-45<x{elSk{cl^vkv`uo ;#:?6~}of]eqijX|axne&<)018twi`Wog`Rzgrdqk,1/6;2zycjQiumn\pmtb{a">%<=4psmd[cskdV~c~h}g(7+27>vugnUmyabPtipfwm.0!890|ah_gwohZrozlyc$5'>3:rqkbYa}efTxe|jsi*:-40<x{elSk{cl^vkv`uo48:1<3?n;qplcZ`rdeUdk|h^cpw`ts 9#:m6~}of]eqijX|axneQnsrgqp-7.9k1{~biPftno[qnumzbTm~}jru*24,7f3yxdkRhzlm]wlwct`Vkxh|{(3+2e>vugnUmyabPtipfwmYf{zoyx%=&1`9svjaXn|fgSyf}erj\evubz}"?%<o4psmd[cskdV~c~h}g_`qpawr/= ;j7}|`g^dvhiYs`{oxdRo|sdpw,3/6i2zycjQiumn\pmtb{aUj~k}t)5*5d=wzfmTjxbc_ujqavnXizyn~y&7)0c8twi`Wog`Rzgrdqk[dutm{~#5$?k;qplcZ`rdeUdk|h^cpw`ts48:1<3?n;qplcZ`rdeUdk|h^lfcdrb 9#:m6~}of]eqijX|axneQaefcwa-7.9k1{~biPftno[qnumzbTbhintd*24,7f3yxdkRhzlm]wlwct`Vdnklzj(3+2e>vugnUmyabPtipfwmYimnki%=&1`9svjaXn|fgSyf}erj\j`af|l"?%<o4psmd[cskdV~c~h}g_ogdeqc/= ;j7}|`g^dvhiYs`{oxdR`jg`vf,3/6i2zycjQiumn\pmtb{aUeijo{e)5*5d=wzfmTjxbc_ujqavnXflmjxh&7)0c8twi`Wog`Rzgrdqk[kc`i}o#5$?k;qplcZ`rdeUdk|h^lfcdrb48:1<384re]`hn773{nThlzn_bmvjq.7!8:0~iQkauc\gjsi|!;"=<5}d^fbpdYdg|d$<>&119q`Zbf|hUhcx`{(3+24>tcWmkmRm`uov+7,773{nThlzn_bmvjq.3!8:0~iQkauc\gjsi|!?"==5}d^fbpdYdg|d$;'>0:pg[agsiVidycz'7(33?wbXlh~jSnaznu*;-46<zmUomyoPcnwmp-?.991yhRjnt`]`kphs494:?6|k_ecweZeh}g~7==4?>038vaYci}kTob{at=33:46<zmUomyoPcnwmp979991yhRjnt`]`kphs4;4:<6|k_ecweZeh}g~7?3??;sf\`drfWje~by2;>028vaYci}kTob{at=7=55=ulVnjxlQlotlw838682xoSio{a^alqkr;?7;;7jPd`vb[firf}632<>4re]geqgXkfex1715:pg[`h13{nT~~z<;sqw3>uea}oy~95|rrv14>rjx&Uhk"hffn]{hk~X:Br8:R<llj,mcj2<|{n56{addpehjq23kgei84ws]bgn0<{Uh`f??;vp\`drfWje~by&?)028swYci}kTob{at)3*54=pzVnjxlQlotlw,46.991|~Rjnt`]`kphs ;#:<6y}_ecweZeh}g~#?$??;vp\`drfWje~by&;)028swYci}kTob{at)7*55=pzVnjxlQlotlw,3/682}ySio{a^alqkr/? ;;7z|Pd`vb[firf}"3%<>4ws]geqgXkfex%7&119tvZbf|hUhcx`{<1<27>quWmkmRm`uov?55<768;0{Qkauc\gjsi|5;;2<>4ws]geqgXkfex1?1119tvZbf|hUhcx`{<3<24>quWmkmRm`uov?7;773~xThlzn_bmvjq:368:0{Qkauc\gjsi|5?5==5xr^fbpdYdg|d0;0>0:uq[agsiVidycz37?33?rtXlh~jSnaznu>;:46<{UomyoPcnwmp9?9=2}ySh`9;vp\vvrzHIzm:<5O@y7:a?@=<3;p_9h553a91?74:?2?m7=640dxj1>2281e85854:&7<6<3?m1v_9j553a91?74:?2?m7=640d8Wab==:?1<7?<27:7e?5><;:0_9j552794?74:?2?m7=64328`04a290:6<u\4g866f<22899:5:n:2;75c=q\8<;6=4>:08154}T<o0>>n4::0112=2f2:3?=k5+4659``=Q<1>1>v{j7;38q`>=82w/=8651`9a17`=83<>6>495zJ730=]<=0?w<>5f;3;>41=u-;=97;=f:&7<7<2:l1b94750;9l1d0=83.:9l4:b19m50?=821d9lk50;&21d<2j91e=8751:9l1db=83.:9l4:b19m50?=:21d9lm50;&21d<2j91e=8753:9l1dd=83.:9l4:b19m50?=<21d9lo50;&21d<2j91e=8755:9l1d?=83.:9l4:b19m50?=>21d9l650;&21d<2j91e=8757:9l1d1=83.:9l4:b19m50?=021d9l;50;&21d<2j91e=8759:9l1d2=83.:9l4:b19m50?=i21d95:50;&21d<20l1e=8750:9l1=e=83.:9l4:8d9m50?=921d95l50;&21d<20l1e=8752:9l1=g=83.:9l4:8d9m50?=;21d95750;&21d<20l1e=8754:9l1=>=83.:9l4:8d9m50?==21d95950;&21d<20l1e=8756:9l1=0=83.:9l4:8d9m50?=?21d95;50;&21d<20l1e=8758:9l1=5=83.:9l4:8d9m50?=121d95<50;&21d<20l1e=875a:9j1gd=831d9>=50;9l17b=831b9l=50;9j1<d=831d9=>50;&21d<2::1e=8750:9l0c`=83.:9l4:229m50?=921d8kk50;&21d<2::1e=8752:9l0cb=83.:9l4:229m50?=;21d8km50;&21d<2::1e=8754:9l0cd=83.:9l4:229m50?==21d8k750;&21d<2::1e=8756:9l0c>=83.:9l4:229m50?=?21d8k950;&21d<2::1e=8758:9l0c0=83.:9l4:229m50?=121d8k;50;&21d<2::1e=875a:9l0c2=83.:9l4:229m50?=j21d8k=50;&21d<2::1e=875c:9l0c4=83.:9l4:229m50?=l21d8k?50;&21d<2::1e=875e:9l0c6=83.:9l4:229m50?=n21d8hk50;&21d<2::1e=8751198k1cc290/=8o55318j43>28;07b:jc;29 43f2<887c?:9;31?>i3mk0;6)?:a;717>h6=00:?65`4dc94?"6=h0>>>5a14;951=<g=o26=4+14c9175<f8?26<;4;n6f<?6=,8?j68<<;o36=?7132e?i:4?:%36e?35;2d:944>7:9l0`0=83.:9l4:229m50?=9110c9k::18'50g==;90b<;6:0;8?j37>3:1(<;n:400?k7213;j76a:0483>!72i3?9?6`>5882f>=h=9>1<7*>5`8666=i9<31=n54o420>5<#9<k19?=4n07:>4b<3f?;>7>5$07b>0443g;>57?j;:m644<72-;>m7;=3:l21<<6n21d8ko50;&21d<2::1e=8752198k1ca290/=8o55318j43>2;;07b:j4;29 43f2<887c?:9;01?>i3m:0;6)?:a;717>h6=009?65f4c594?"6=h0?hl5a14;94>=n<k<1<7*>5`87`d=i9<31=65f4c794?"6=h0?hl5a14;96>=n<k>1<7*>5`87`d=i9<31?65f4c194?"6=h0?hl5a14;90>=n<k81<7*>5`87`d=i9<31965f4c294?"6=h0?hl5a14;92>=n<hl1<7*>5`87`d=i9<31;65f4`g94?"6=h0?hl5a14;9<>=n<hn1<7*>5`87`d=i9<31565f4`a94?"6=h0?hl5a14;9e>=n<hh1<7*>5`87`d=i9<31n65f4`c94?"6=h0?hl5a14;9g>=n<h31<7*>5`87`d=i9<31h65f4`:94?"6=h0?hl5a14;9a>=n<h=1<7*>5`87`d=i9<31j65f4`794?"6=h0?hl5a14;955=<a=k?6=4+14c90ag<f8?26<?4;h6b7?6=,8?j69jn;o36=?7532c?m?4?:%36e?2ci2d:944>3:9j0d7=83.:9l4;d`9m50?=9=10e9o?:18'50g=<mk0b<;6:078?l2>n3:1(<;n:5fb?k7213;=76g;9d83>!72i3>om6`>58823>=n<0n1<7*>5`87`d=i9<31=554i5;`>5<#9<k18io4n07:>4?<3`>ih7>5$07b>1bf3g;>57?n;:k7ff<72-;>m7:ka:l21<<6j21b8ol50;&21d<3lh1e=8751b98m1df290/=8o54ec8j43>28n07d:m9;29 43f2=nj7c?:9;3f?>o3j10;6)?:a;6ge>h6=00:j65f4c394?"6=h0?hl5a14;965=<a=k=6=4+14c90ag<f8?26??4;h6:f?6=,8?j69jn;o36=?4532c?5l4?:%36e?2ci2d:944=3:9j1=7=831i8:850;394?6|@==>7)?95;642>i6=>0;66sm8`83>4<729qC8:;4$046>=g<g131<75rb5194?e428i36??>{I641>\3<3;=w44>0;d9`?c=j3;3654>7;a9e?c=990:47h59;34>a<d2k0j654r$046>0553-nj6564$5:9166<,=o19>?4$071>4313`?2m7>5;n76g?6=3`?2h7>5;n6;3?6=3f?j=7>5;h6;e?6=3`??:7>5$07b>02a3g;>57>4;h77a?6=,8?j68:i;o36=?7<3`??h7>5$07b>02a3g;>57<4;h77g?6=,8?j68:i;o36=?5<3`??n7>5$07b>02a3g;>57:4;h77e?6=,8?j68:i;o36=?3<3`??57>5$07b>02a3g;>5784;h77<?6=,8?j68:i;o36=?1<3`??;7>5$07b>02a3g;>5764;h771?6=,8?j68:i;o36=??<3`??87>5$07b>02a3g;>57o4;h7:=?6=3f?8:7>5;n7b2?6=,8?j68l?;o36=?6<3f?ji7>5$07b>0d73g;>57?4;n7b`?6=,8?j68l?;o36=?4<3f?jo7>5$07b>0d73g;>57=4;n7bf?6=,8?j68l?;o36=?2<3f?jm7>5$07b>0d73g;>57;4;n7b=?6=,8?j68l?;o36=?0<3f?j47>5$07b>0d73g;>5794;n7b3?6=,8?j68l?;o36=?><3f?j97>5$07b>0d73g;>5774;n7b0?6=,8?j68l?;o36=?g<3f?387>5$07b>0>b3g;>57>4;n7;g?6=,8?j686j;o36=?7<3f?3n7>5$07b>0>b3g;>57<4;n7;e?6=,8?j686j;o36=?5<3f?357>5$07b>0>b3g;>57:4;n7;<?6=,8?j686j;o36=?3<3f?3;7>5$07b>0>b3g;>5784;n7;2?6=,8?j686j;o36=?1<3f?397>5$07b>0>b3g;>5764;n7;7?6=,8?j686j;o36=??<3f?3>7>5$07b>0>b3g;>57o4;h743?6=,8?j686?;o36=?6<3`?<j7>5$07b>0>73g;>57?4;h74a?6=,8?j686?;o36=?4<3`?<h7>5$07b>0>73g;>57=4;h74g?6=,8?j686?;o36=?2<3`?<n7>5$07b>0>73g;>57;4;h74e?6=,8?j686?;o36=?0<3`?<57>5$07b>0>73g;>5794;h74<?6=,8?j686?;o36=?><3`?<:7>5$07b>0>73g;>5774;h741?6=,8?j686?;o36=?g<3`?in7>5;n6;a?6=,8?j6977;o36=?6<3f>2:7>5$07b>1??3g;>57?4;n6:1?6=,8?j6977;o36=?4<3f>287>5$07b>1??3g;>57=4;n6:7?6=,8?j6977;o36=?2<3f>2>7>5$07b>1??3g;>57;4;n6:5?6=,8?j6977;o36=?0<3f>2<7>5$07b>1??3g;>5794;n6;b?6=,8?j6977;o36=?><3f>3h7>5$07b>1??3g;>5774;n6;g?6=,8?j6977;o36=?g<3f?8?7>5;n71`?6=3`?>j7>5$07b>00?3g;>57>4;h753?6=,8?j6887;o36=?7<3`?=:7>5$07b>00?3g;>57<4;h751?6=,8?j6887;o36=?5<3`?=87>5$07b>00?3g;>57:4;h757?6=,8?j6887;o36=?3<3`?=>7>5$07b>00?3g;>5784;h755?6=,8?j6887;o36=?1<3`?=<7>5$07b>00?3g;>5764;h76a?6=,8?j6887;o36=??<3`?>h7>5$07b>00?3g;>57o4;h7b7?6=3`?887>5;h6;f?6=3`?io7>5;n7:g?6=3f?j>7>5;n6;<?6=3f?j<7>5;h7:f?6=3f?;<7>5$07b>0443g;>57>4;n6eb?6=,8?j68<<;o36=?7<3f>mi7>5$07b>0443g;>57<4;n6e`?6=,8?j68<<;o36=?5<3f>mo7>5$07b>0443g;>57:4;n6ef?6=,8?j68<<;o36=?3<3f>m57>5$07b>0443g;>5784;n6e<?6=,8?j68<<;o36=?1<3f>m;7>5$07b>0443g;>5764;n6e2?6=,8?j68<<;o36=??<3f>m97>5$07b>0443g;>57o4;n6e0?6=,8?j68<<;o36=?d<3f>m?7>5$07b>0443g;>57m4;n6e6?6=,8?j68<<;o36=?b<3f>m=7>5$07b>0443g;>57k4;n6e4?6=,8?j68<<;o36=?`<3f>ni7>5$07b>0443g;>57??;:m7aa<72-;>m7;=3:l21<<6921d8hm50;&21d<2::1e=8751398k1ce290/=8o55318j43>28907b:ja;29 43f2<887c?:9;37?>i3m00;6)?:a;717>h6=00:965`4d:94?"6=h0>>>5a14;953=<g=o<6=4+14c9175<f8?26<94;n6f2?6=,8?j68<<;o36=?7?32e?i84?:%36e?35;2d:944>9:9l150=83.:9l4:229m50?=9h10c8>::18'50g==;90b<;6:0`8?j37<3:1(<;n:400?k7213;h76a:0283>!72i3?9?6`>5882`>=h=981<7*>5`8666=i9<31=h54o422>5<#9<k19?=4n07:>4`<3f>mm7>5$07b>0443g;>57<?;:m7ac<72-;>m7;=3:l21<<5921d8h:50;&21d<2::1e=8752398k1c4290/=8o55318j43>2;907d;<a;29 43f2<>87c?:9;28?l33:3:1(<;n:460?k7213;07d;;1;29 43f2<>87c?:9;08?l3383:1(<;n:460?k7213907d;<f;29 43f2<>87c?:9;68?l34m3:1(<;n:460?k7213?07d;<d;29 43f2<>87c?:9;48?l34k3:1(<;n:460?k7213=07d;<b;29 43f2<>87c?:9;:8?l3413:1(<;n:460?k7213307d;<8;29 43f2<>87c?:9;c8?l2e?3:1(<;n:5fb?k7213:07d:m6;29 43f2=nj7c?:9;38?l2e=3:1(<;n:5fb?k7213807d:m4;29 43f2=nj7c?:9;18?l2e;3:1(<;n:5fb?k7213>07d:m2;29 43f2=nj7c?:9;78?l2e83:1(<;n:5fb?k7213<07d:nf;29 43f2=nj7c?:9;58?l2fm3:1(<;n:5fb?k7213207d:nd;29 43f2=nj7c?:9;;8?l2fk3:1(<;n:5fb?k7213k07d:nb;29 43f2=nj7c?:9;`8?l2fi3:1(<;n:5fb?k7213i07d:n9;29 43f2=nj7c?:9;f8?l2f03:1(<;n:5fb?k7213o07d:n7;29 43f2=nj7c?:9;d8?l2f=3:1(<;n:5fb?k7213;;76g;a583>!72i3>om6`>58825>=n<h91<7*>5`87`d=i9<31=?54i5c1>5<#9<k18io4n07:>45<3`>j=7>5$07b>1bf3g;>57?;;:k7e5<72-;>m7:ka:l21<<6=21b84h50;&21d<3lh1e=8751798m1?b290/=8o54ec8j43>28=07d:6d;29 43f2=nj7c?:9;3;?>o31j0;6)?:a;6ge>h6=00:565f4cf94?"6=h0?hl5a14;95d=<a=hh6=4+14c90ag<f8?26<l4;h6af?6=,8?j69jn;o36=?7d32c?nl4?:%36e?2ci2d:944>d:9j0g?=83.:9l4;d`9m50?=9l10e9l7:18'50g=<mk0b<;6:0d8?l2e93:1(<;n:5fb?k72138;76g;a783>!72i3>om6`>58815>=n<0h1<7*>5`87`d=i9<31>?54i5;b>5<#9<k18io4n07:>75<3`>357>5;h75f?6=,8?j689;;o36=?6<3`?<?7>5$07b>0133g;>57?4;h746?6=,8?j689;;o36=?4<3`?<=7>5$07b>0133g;>57=4;h744?6=,8?j689;;o36=?2<3`?=j7>5$07b>0133g;>57;4;h75a?6=,8?j689;;o36=?0<3`?=h7>5$07b>0133g;>5794;h75g?6=,8?j689;;o36=?><3`?=m7>5$07b>0133g;>5774;h75=?6=,8?j689;;o36=?g<3`?>>7>5$07b>03e3g;>57>4;h76e?6=,8?j68;m;o36=?7<3`?>57>5$07b>03e3g;>57<4;h76<?6=,8?j68;m;o36=?5<3`?>;7>5$07b>03e3g;>57:4;h762?6=,8?j68;m;o36=?3<3`?>97>5$07b>03e3g;>5784;h760?6=,8?j68;m;o36=?1<3`?>?7>5$07b>03e3g;>5764;h765?6=,8?j68;m;o36=??<3`?><7>5$07b>03e3g;>57o4;n703?6=3f>257>5;h7;5?6=3k>3<7>51;294~"6><03m6F;7g9K023<g131<75rb5:2>5<6290;w)?95;642>N3?o1C8:;4o074>5<<uk>=87>53;294~"6><03>6F;7g9K023<@=80(h;558d8 <1=92c?97>5;h73>5<<g8?h6=44}c65`?6=;3:1<v*>648;6>N3?o1C8:;4H508 `3==0l0(4951:k71?6=3`?;6=44o07`>5<<uk>=?7>53;294~"6><03>6F;7g9K023<@=80(h;558d8 <1=92c?97>5;h73>5<<g8?h6=44}c65f?6==3:1<v*>648;3>N3?o1C8:;4H508 `3==0l0(4951:k71?6=3`><6=44i4294?=n9<h1<75`14a94?=zj=<h6=4<:183!71=3297E:8f:J730=O<;1/i84:9g9'=2<63`>>6=44i4294?=h9<i1<75rb541>5<2290;w)?95;:4?M20n2B?;85G439'a0<21o1/5:4>;h66>5<<a==1<75f5183>>o6=k0;66a>5b83>>{e<?k1<7:50;2x 40221<0D99i;I641>">?3;0e9;50;9j15<722c:9o4?::m21f<722wi8;750;694?6|,8<>6584H55e?M20=2.2;7?4i5794?=n=90;66g>5c83>>i6=j0;66sm46194?2=83:p(<8::948L11a3A><96*67;38m13=831b9=4?::k21g<722e:9n4?::a024=83>1<7>t$046>=0<@==m7E:85:&:3?7<a=?1<75f5183>>o6=k0;66a>5b83>>{e:l;1<7:50;2x 40221<0D99i;I641>">?3>0e9;50;9j15<722c:9o4?::m21f<722wi>4l50;694?6|,8<>65=4H55e?M20=2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl=9b83>1<729q/=;;5829K02`<@==>7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c0:a?6=<3:1<v*>648;7>N3?o1C8:;4$8595>o3=3:17d:l:188m06=831d=8m50;9~f7?a290?6=4?{%351?>43A><j6F;749'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e:h:1<7:50;2x 4022190D99i;I641>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th9m<4?:583>5}#9??14>5G46d8L1123-3<6<5f4483>>o3k3:17d;?:188k43d2900qo<n2;290?6=8r.::8473:J73c=O<>?0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb3c0>5<3290;w)?95;:0?M20n2B?;85+9682?l222900e9m50;9j15<722e:9n4?::a6d2=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd5i<0;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk82h7>54;294~"6><03?6F;7g9K023<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn>o=:187>5<7s-;=9769;I64b>N3?<1/5:4>;h66>5<<a<:1<75f14`94?=h9<i1<75rb2c2>5<3290;w)?95;:5?M20n2B?;85+9682?l222900e8>50;9j50d=831d=8m50;9~f63e290?6=4?{%351?>43A><j6F;749'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e;<i1<7:50;2x 4022190D99i;I641>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th89h4?:583>5}#9??14>5G46d8L1123-3<6<5f4483>>o3k3:17d;?:188k43d2900qo=:f;290?6=8r.::8473:J73c=O<>?0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb243>5<3290;w)?95;:0?M20n2B?;85+9682?l222900e9m50;9j15<722e:9n4?::a737=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd4>;0;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk9=?7>54;294~"6><03?6F;7g9K023<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn>8;:187>5<7s-;=976<;I64b>N3?<1/5:4>;h66>5<<a=i1<75f5183>>i6=j0;66sm37794?2=83:p(<8::918L11a3A><96*67;38m13=831b8n4?::k64?6=3f;>o7>5;|`01a<72=0;6=u+1779<6=O<>l0D99:;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg4?=3:1?7>50z&220<b82B?;k5G4678 <1=:?1b4o4?::k;g?6=3f;>97>5;|`13g<72=0;6=u+1779a3=O<>l0D99:;h6:>5<<a<;1<75f14g94?=h9<?1<75rb3;3>5<4290;w)?95;64a>N3?o1C8:;4i5;94?=nlk0;66a>5483>>{e:1=1<7=50;2x 4022l:0D99i;I641>">?38=7d6m:188m=e=831d=8;50;9~f71d290?6=4?{%351?c13A><j6F;749j0<<722c>=7>5;h36a?6=3f;>97>5;|`1=7<72:0;6=u+177902c<@==m7E:85:k7=?6=3`ni6=44o076>5<<uk8347>53;294~"6><0n<6F;7g9K023<,0=1>;5f8c83>>o?k3:17b?:5;29?xd5?m0;694?:1y'533=m?1C8:h4H556?l2>2900e8?50;9j50c=831d=8;50;9~f7?429086=4?{%351?20m2B?;k5G4678m1?=831bho4?::m210<722wi>5750;194?6|,8<>6h>4H55e?M20=2.2;7<9;h:a>5<<a1i1<75`14794?=zj;=n6=4;:183!71=3o=7E:8f:J730=n<00;66g:1;29?l72m3:17b?:5;29?xd51=0;6>4?:1y'533=<>o0D99i;I641>o313:17djm:188k4322900qo<7a;297?6=8r.::84j0:J73c=O<>?0(495279j<g<722c3o7>5;n361?6=3th9;k4?:583>5}#9??1i;5G46d8L1123`>26=44i4394?=n9<o1<75`14794?=zj;3>6=4<:183!71=3><i6F;7g9K023<a=31<75fdc83>>i6=<0;66sm29`94?5=83:p(<8::d28L11a3A><96*67;05?l>e2900e5m50;9l503=831vn?6?:187>5<7s-;=97k9;I64b>N3?<1b844?::k65?6=3`;>i7>5;n361?6=3th95;4?:283>5}#9??18:k4H55e?M20=2c?57>5;hfa>5<<g8?>6=44}c0;g?6=;3:1<v*>648f4>N3?o1C8:;4$85963=n0k0;66g7c;29?j72=3:17pl=8083>1<729q/=;;5e79K02`<@==>7d:6:188m07=831b=8k50;9l503=831vn?78:180>5<7s-;=97:8e:J73c=O<>?0e9750;9j`g<722e:984?::a6=b=8391<7>t$046>`6<@==m7E:85:&:3?413`2i6=44i9a94?=h9<?1<75rb3:1>5<3290;w)?95;g5?M20n2B?;85f4883>>o293:17d?:e;29?j72=3:17pl=9983>6<729q/=;;546g8L11a3A><96g;9;29?lbe2900c<;::188yg4?m3:1?7>50z&220<b82B?;k5G4678 <1=:?1b4o4?::k;g?6=3f;>97>5;|`1<6<72=0;6=u+1779a3=O<>l0D99:;h6:>5<<a<;1<75f14g94?=h9<?1<75rb3;:>5<4290;w)?95;64a>N3?o1C8:;4i5;94?=nlk0;66a>5483>>{e:1l1<7=50;2x 4022l:0D99i;I641>">?38=7d6m:188m=e=831d=8;50;9~f7>3290?6=4?{%351?c13A><j6F;749j0<<722c>=7>5;h36a?6=3f;>97>5;|`1=d<72:0;6=u+177902c<@==m7E:85:k7=?6=3`ni6=44o076>5<<uk83:7>53;294~"6><0n<6F;7g9K023<,0=1>;5f8c83>>o?k3:17b?:5;29?xd5180;6>4?:1y'533=<>o0D99i;I641>o313:17djm:188k4322900qo=;5;297?6=8r.::84j0:J73c=O<>?0(495279j<g<722c3o7>5;n361?6=3th8?o4?:583>5}#9??1i;5G46d8L1123`>26=44i4394?=n9<o1<75`14794?=zj:?;6=4<:183!71=3><i6F;7g9K023<a=31<75fdc83>>i6=<0;66sm35594?5=83:p(<8::d28L11a3A><96*67;05?l>e2900e5m50;9l503=831vn>=l:187>5<7s-;=97k9;I64b>N3?<1b844?::k65?6=3`;>i7>5;n361?6=3th89?4?:283>5}#9??18:k4H55e?M20=2c?57>5;hfa>5<<g8?>6=44}c17<?6=;3:1<v*>648f4>N3?o1C8:;4$85963=n0k0;66g7c;29?j72=3:17pl<3e83>1<729q/=;;5e79K02`<@==>7d:6:188m07=831b=8k50;9l503=831vn>;<:180>5<7s-;=97:8e:J73c=O<>?0e9750;9j`g<722e:984?::a71?=8391<7>t$046>`6<@==m7E:85:&:3?413`2i6=44i9a94?=h9<?1<75rb21f>5<3290;w)?95;g5?M20n2B?;85f4883>>o293:17d?:e;29?j72=3:17pl<5583>6<729q/=;;546g8L11a3A><96g;9;29?lbe2900c<;::188yg53i3:1?7>50z&220<b82B?;k5G4678 <1=:?1b4o4?::k;g?6=3f;>97>5;|`07c<72=0;6=u+1779a3=O<>l0D99:;h6:>5<<a<;1<75f14g94?=h9<?1<75rb276>5<4290;w)?95;64a>N3?o1C8:;4i5;94?=nlk0;66a>5483>>{e;=h1<7=50;2x 4022l:0D99i;I641>">?38=7d6m:188m=e=831d=8;50;9~f627290?6=4?{%351?c13A><j6F;749j0<<722c>=7>5;h36a?6=3f;>97>5;|`013<72:0;6=u+177902c<@==m7E:85:k7=?6=3`ni6=44o076>5<<uk9?o7>53;294~"6><0n<6F;7g9K023<,0=1>;5f8c83>>o?k3:17b?:5;29?xd4<80;694?:1y'533=m?1C8:h4H556?l2>2900e8?50;9j50c=831d=8;50;9~f63029086=4?{%351?20m2B?;k5G4678m1?=831bho4?::m210<722wi?9j50;194?6|,8<>6h>4H55e?M20=2.2;7<9;h:a>5<<a1i1<75`14794?=zj:>96=4;:183!71=3o=7E:8f:J730=n<00;66g:1;29?l72m3:17b?:5;29?xd4=10;6>4?:1y'533=<>o0D99i;I641>o313:17djm:188k4322900qo=;e;297?6=8r.::84j0:J73c=O<>?0(495279j<g<722c3o7>5;n361?6=3th88>4?:583>5}#9??1i;5G46d8L1123`>26=44i4394?=n9<o1<75`14794?=zj:?26=4<:183!71=3><i6F;7g9K023<a=31<75fdc83>>i6=<0;66sm35d94?5=83:p(<8::d28L11a3A><96*67;05?l>e2900e5m50;9l503=831vn>:;:187>5<7s-;=97k9;I64b>N3?<1b844?::k65?6=3`;>i7>5;n361?6=3th89l4?:283>5}#9??18:k4H55e?M20=2c?57>5;hfa>5<<g8?>6=44}c172?6=;3:1<v*>648f4>N3?o1C8:;4$85963=n0k0;66g7c;29?j72=3:17pl<5083>6<729q/=;;546g8L11a3A><96g;9;29?lbe2900c<;::188yg4ej3:187>50z&220<b>2B?;k5G4678m1?=831b9<4?::k21`<722e:984?::a6gg=83>1<7>t$046>`0<@==m7E:85:k7=?6=3`?:6=44i07f>5<<g8?>6=44}c0a=?6=<3:1<v*>648f2>N3?o1C8:;4i5;94?=n=80;66g>5d83>>i6=<0;66sm2c:94?2=83:p(<8::d48L11a3A><96g;9;29?l362900e<;j:188k4322900qo<m7;290?6=8r.::84j6:J73c=O<>?0e9750;9j14<722c:9h4?::m210<722wi>o850;694?6|,8<>6h84H55e?M20=2c?57>5;h72>5<<a8?n6=44o076>5<<uk8o>7>54;294~"6><0n:6F;7g9K023<a=31<75f5083>>o6=l0;66a>5483>>{e:m;1<7:50;2x 4022l<0D99i;I641>o313:17d;>:188m43b2900c<;::188yg4c83:187>50z&220<b>2B?;k5G4678m1?=831b9<4?::k21`<722e:984?::a6f`=83>1<7>t$046>`0<@==m7E:85:k7=?6=3`?:6=44i07f>5<<g8?>6=44}c0`a?6=<3:1<v*>648f2>N3?o1C8:;4i5;94?=n=80;66g>5d83>>i6=<0;66sm2bf94?2=83:p(<8::d48L11a3A><96g;9;29?l362900e<;j:188k4322900qo=8b;290?6=8r.::84j6:J73c=O<>?0e9750;9j14<722c:9h4?::m210<722wi?:o50;694?6|,8<>6h84H55e?M20=2c?57>5;h72>5<<a8?n6=44o076>5<<uk9<57>54;294~"6><0n:6F;7g9K023<a=31<75f5083>>o6=l0;66a>5483>>{e;>21<7:50;2x 4022l<0D99i;I641>o313:17d;>:188m43b2900c<;::188yg50?3:187>50z&220<b>2B?;k5G4678m1?=831b9<4?::k21`<722e:984?::a720=83>1<7>t$046>`0<@==m7E:85:k7=?6=3`?:6=44i07f>5<<g8?>6=44}c1:6?6=<3:1<v*>648f2>N3?o1C8:;4i5;94?=n=80;66g>5d83>>i6=<0;66sm38394?2=83:p(<8::d48L11a3A><96g;9;29?l362900e<;j:188k4322900qo=60;290?6=8r.::84j6:J73c=O<>?0e9750;9j14<722c:9h4?::m210<722wi?5h50;694?6|,8<>6h84H55e?M20=2c?57>5;h72>5<<a8?n6=44o076>5<<uk93i7>54;294~"6><0n:6F;7g9K023<a=31<75f5083>>o6=l0;66a>5483>>{e;1n1<7:50;2x 4022l<0D99i;I641>o313:17d;>:188m43b2900c<;::188yg7f<3:187>50z&220<?;2B?;k5G4678 <1=92c?97>5;h6`>5<<a<:1<75`14a94?=zj8kh6=4;:183!71=3287E:8f:J730=#1>0:7d:::188m1e=831b9=4?::m21f<722wi=ll50;694?6|,8<>65=4H55e?M20=2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl>a`83>1<729q/=;;5829K02`<@==>7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c3b=?6=<3:1<v*>648;7>N3?o1C8:;4$8595>o3=3:17d:l:188m06=831d=8m50;9~f4g?290?6=4?{%351?>43A><j6F;749'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e9h=1<7:50;2x 4022190D99i;I641>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th:m;4?:583>5}#9??14>5G46d8L1123-3<6<5f4483>>o3k3:17d;?:188k43d2900qo?n5;290?6=8r.::8473:J73c=O<>?0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb0c0>5<3290;w)?95;:0?M20n2B?;85+9682?l222900e9m50;9j15<722e:9n4?::a5d4=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd5980;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk8:57>54;294~"6><03?6F;7g9K023<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn??7:187>5<7s-;=976<;I64b>N3?<1/5:4>;h66>5<<a=i1<75f5183>>i6=j0;66sm20594?2=83:p(<8::918L11a3A><96*67;38m13=831b8n4?::k64?6=3f;>o7>5;|`153<72=0;6=u+1779<6=O<>l0D99:;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg46=3:187>50z&220<?;2B?;k5G4678 <1=92c?97>5;h6`>5<<a<:1<75`14a94?=zj;;?6=4;:183!71=3287E:8f:J730=#1>0:7d:::188m1e=831b9=4?::m21f<722wi><=50;694?6|,8<>65=4H55e?M20=2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl=1383>1<729q/=;;5829K02`<@==>7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c024?6=<3:1<v*>648;7>N3?o1C8:;4$8595>o3=3:17d:l:188m06=831d=8m50;9~f76a290?6=4?{%351?>43A><j6F;749'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e:<i1<7:50;2x 4022190D99i;I641>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th9:94?:583>5}#9??14>5G46d8L1123-3<6<5f4483>>o3k3:17d;?:188k43d2900qo<93;290?6=8r.::8473:J73c=O<>?0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb341>5<3290;w)?95;:0?M20n2B?;85+9682?l222900e9m50;9j15<722e:9n4?::a637=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd5>90;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk8>j7>54;294~"6><03?6F;7g9K023<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn?;j:187>5<7s-;=976<;I64b>N3?<1/5:4>;h66>5<<a=i1<75f5183>>i6=j0;66sm24f94?2=83:p(<8::918L11a3A><96*67;38m13=831b8n4?::k64?6=3f;>o7>5;|`11g<72=0;6=u+1779<6=O<>l0D99:;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg42i3:187>50z&220<?;2B?;k5G4678 <1=92c?97>5;h6`>5<<a<:1<75`14a94?=zj8om6=4;:183!71=3287E:8f:J730=#1>0:7d:::188m1e=831b9=4?::m21f<722wi=k950;694?6|,8<>65=4H55e?M20=2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl>f783>1<729q/=;;5829K02`<@==>7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c3e1?6=<3:1<v*>648;7>N3?o1C8:;4$8595>o3=3:17d:l:188m06=831d=8m50;9~f4`3290?6=4?{%351?>43A><j6F;749'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e9o91<7:50;2x 4022190D99i;I641>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th:j?4?:583>5}#9??14>5G46d8L1123-3<6<5f4483>>o3k3:17d;?:188k43d2900qo?i1;290?6=8r.::8473:J73c=O<>?0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb0d3>5<3290;w)?95;:0?M20n2B?;85+9682?l222900e9m50;9j15<722e:9n4?::a5`c=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd6mm0;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk8?:7>54;294~"6><03?6F;7g9K023<@=80(h;558d8 <1=92c?97>5;h6`>5<<a<:1<75`14a94?=zj;>n6=4;:183!71=3287E:8f:J730=O<;1/i84:9g9'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e:=n1<7:50;2x 4022190D99i;I641>N3:2.n97;6f:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd5<j0;694?:1y'533=0:1C8:h4H556?M253-o>687i;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg43j3:187>50z&220<?;2B?;k5G4678L14<,l?194h4$8595>o3=3:17d:l:188m06=831d=8m50;9~f72f290?6=4?{%351?>43A><j6F;749K07=#m<0>5k5+9682?l222900e9m50;9j15<722e:9n4?::a61?=83>1<7>t$046>=5<@==m7E:85:J76>"b=3?2j6*67;38m13=831b8n4?::k64?6=3f;>o7>5;|`10=<72=0;6=u+1779<6=O<>l0D99:;I61?!c22<3m7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c073?6=<3:1<v*>648;7>N3?o1C8:;4H508 `3==0l0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb366>5<3290;w)?95;:0?M20n2B?;85G439'a0<21o1/5:4>;h66>5<<a=i1<75f5183>>i6=j0;66sm25694?2=83:p(<8::918L11a3A><96F;2:&f1?3>n2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl>d883>1<729q/=;;5829K02`<@==>7E:=;%g6>0?a3-3<6<5f4483>>o3k3:17d;?:188k43d2900qo?j1;290?6=8r.::8473:J73c=O<>?0D9<4$d791<`<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn<k?:187>5<7s-;=976<;I64b>N3?<1C8?5+e486=c=#1>0:7d:::188m1e=831b9=4?::m21f<722wi=ih50;694?6|,8<>65=4H55e?M20=2B?>6*j5;7:b>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th:hh4?:583>5}#9??14>5G46d8L1123A>97)k::4;e?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk;oh7>54;294~"6><03?6F;7g9K023<@=80(h;558d8 <1=92c?97>5;h6`>5<<a<:1<75`14a94?=zj8nh6=4;:183!71=3287E:8f:J730=O<;1/i84:9g9'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e9mh1<7:50;2x 4022190D99i;I641>N3:2.n97;6f:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd6lh0;694?:1y'533=0:1C8:h4H556?M253-o>687i;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg7c03:187>50z&220<?;2B?;k5G4678L14<,l?194h4$8595>o3=3:17d:l:188m06=831d=8m50;9~f4b0290?6=4?{%351?>43A><j6F;749K07=#m<0>5k5+9682?l222900e9m50;9j15<722e:9n4?::a5f5=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd6kk0;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk;hm7>54;294~"6><03?6F;7g9K023<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn<m6:187>5<7s-;=976<;I64b>N3?<1/5:4>;h66>5<<a=i1<75f5183>>i6=j0;66sm1b:94?2=83:p(<8::918L11a3A><96*67;38m13=831b8n4?::k64?6=3f;>o7>5;|`2g2<72=0;6=u+1779<6=O<>l0D99:;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg7d>3:187>50z&220<?;2B?;k5G4678 <1=92c?97>5;h6`>5<<a<:1<75`14a94?=zj8i>6=4;:183!71=3287E:8f:J730=#1>0:7d:::188m1e=831b9=4?::m21f<722wi=n:50;694?6|,8<>65=4H55e?M20=2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl>c383>1<729q/=;;5829K02`<@==>7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c3`5?6=<3:1<v*>648;7>N3?o1C8:;4$8595>o3=3:17d:l:188m06=831d=8m50;9~f757290?6=4?{%351?>43A><j6F;749'=2<63`>>6=44i5a94?=n=90;66a>5b83>>{e::21<7:50;2x 4022190D99i;I641>">?3;0e9;50;9j0f<722c><7>5;n36g?6=3th9?:4?:583>5}#9??14>5G46d8L1123-3<6<5f4483>>o3k3:17d;?:188k43d2900qo<<6;290?6=8r.::8473:J73c=O<>?0(4951:k71?6=3`>h6=44i4294?=h9<i1<75rb316>5<3290;w)?95;:0?M20n2B?;85+9682?l222900e9m50;9j15<722e:9n4?::a662=83>1<7>t$046>=5<@==m7E:85:&:3?7<a=?1<75f4b83>>o283:17b?:c;29?xd5;:0;694?:1y'533=0:1C8:h4H556?!?0281b884?::k7g?6=3`?;6=44o07`>5<<uk88>7>54;294~"6><03?6F;7g9K023<,0=1=6g;5;29?l2d2900e8>50;9l50e=831vn?=>:187>5<7s-;=976<;I64b>N3?<1/5:4>;h66>5<<a=i1<75f5183>>i6=j0;66sm23d94?2=83:p(<8::918L11a3A><96*67;38m13=831b8n4?::k64?6=3f;>o7>5;|`16`<72=0;6=u+1779<6=O<>l0D99:;%;4>4=n<<0;66g;c;29?l372900c<;l:188yg56k3:197>50z&220<?<2B?;k5G4678 <1=92c?97>5;h64>5<<a=i1<75f5183>>i6=j0;66sm33694?3=83:p(<8::968L11a3A><96*67;38m13=831b8:4?::k7g?6=3`?;6=44o07`>5<<uk99>7>55;294~"6><0386F;7g9K023<,0=1=6g;5;29?l202900e9m50;9j15<722e:9n4?::a777=83?1<7>t$046>=2<@==m7E:85:&:3?7<a=?1<75f4683>>o3k3:17d;?:188k43d2900qo==3;291?6=8r.::8474:J73c=O<>?0(4951:k71?6=3`><6=44i5a94?=n=90;66a>5b83>>{e;8l1<7;50;2x 40221>0D99i;I641>">?3;0e9;50;9j02<722c?o7>5;h73>5<<g8?h6=44}c12a?6==3:1<v*>648;0>N3?o1C8:;4$8595>o3=3:17d:8:188m1e=831b9=4?::m21f<722wi??>50;794?6|,8<>65:4H55e?M20=2.2;7?4i5794?=n<>0;66g;c;29?l372900c<;l:188yg56j3:197>50z&220<?<2B?;k5G4678 <1=92c?97>5;h64>5<<a=i1<75f5183>>i6=j0;66sm30c94?3=83:p(<8::958L11a3A><96*67;68m13=831b8:4?::k64?6=3`;>n7>5;n36g?6=3th8=i4?:483>5}#9??1495G46d8L1123-3<6<5f4483>>o3?3:17d:l:188m06=831d=8m50;9~f66329086=4?{%351?20m2B?;k5G4678m1?=831bho4?::m210<722wi?=k50;194?6|,8<>699j;I64b>N3?<1b844?::kgf?6=3f;>97>5;|`044<72=0;6=u+1779a3=O<>l0D99:;h6:>5<<a<;1<75f14g94?=h9<?1<75rb22g>5<4290;w)?95;64a>N3?o1C8:;4i5;94?=nlk0;66a>5483>>{e:ol1<7:50;2x 4022l<0D99i;I641>o313:17d;>:188m43b2900c<;::188yg57k3:1?7>50z&220<3?l1C8:h4H556?l2>2900eil50;9l503=831vn?hk:187>5<7s-;=97k9;I64b>N3?<1b844?::k65?6=3`;>i7>5;n361?6=3th8<o4?:283>5}#9??18:k4H55e?M20=2c?57>5;hfa>5<<g8?>6=44}c0ef?6=<3:1<v*>648f2>N3?o1C8:;4i5;94?=n=80;66g>5d83>>i6=<0;66sm31c94?5=83:p(<8::55f?M20n2B?;85f4883>>ocj3:17b?:5;29?xd5n00;694?:1y'533=m?1C8:h4H556?l2>2900e8?50;9j50c=831d=8;50;9~f66>29086=4?{%351?20m2B?;k5G4678m1?=831bho4?::m210<722wi>k950;694?6|,8<>6h84H55e?M20=2c?57>5;h72>5<<a8?n6=44o076>5<<uk9;47>53;294~"6><0?;h5G46d8L1123`>26=44ie`94?=h9<?1<75rb3d6>5<3290;w)?95;g5?M20n2B?;85f4883>>o293:17d?:e;29?j72=3:17pl<0683>6<729q/=;;546g8L11a3A><96g;9;29?lbe2900c<;::188yg4a;3:187>50z&220<b>2B?;k5G4678m1?=831b9<4?::k21`<722e:984?::a750=8391<7>t$046>11b3A><j6F;749j0<<722con7>5;n361?6=3th9j<4?:583>5}#9??1i;5G46d8L1123`>26=44i4394?=n9<o1<75`14794?=zj::86=4<:183!71=3><i6F;7g9K023<a=31<75fdc83>>i6=<0;66sm2dd94?2=83:p(<8::d48L11a3A><96g;9;29?l362900e<;j:188k4322900qo=<2;291?6=8r.::8474:J73c=O<>?0(4951:k71?6=3`><6=44i5a94?=n=90;66a>5b83>>{e;:k1<7;50;2x 40221>0D99i;I641>">?3;0e9;50;9j02<722c?o7>5;h73>5<<g8?h6=44}c10=?6==3:1<v*>648;0>N3?o1C8:;4$8595>o3=3:17d:8:188m1e=831b9=4?::m21f<722wi?>650;794?6|,8<>65:4H55e?M20=2.2;7?4i5794?=n<>0;66g;c;29?l372900c<;l:188yg54?3:197>50z&220<?<2B?;k5G4678 <1=92c?97>5;h64>5<<a=i1<75f5183>>i6=j0;66sm32494?3=83:p(<8::968L11a3A><96*67;38m13=831b8:4?::k7g?6=3`?;6=44o07`>5<<uk9897>55;294~"6><0386F;7g9K023<,0=1=6g;5;29?l202900e9m50;9j15<722e:9n4?::a762=83?1<7>t$046>=2<@==m7E:85:&:3?7<a=?1<75f4683>>o3k3:17d;?:188k43d2900qo=<3;291?6=8r.::8474:J73c=O<>?0(4951:k71?6=3`><6=44i5a94?=n=90;66a>5b83>>{e;:;1<7;50;2x 40221>0D99i;I641>">?3;0e9;50;9j02<722c?o7>5;h73>5<<g8?h6=44}c104?6==3:1<v*>648;0>N3?o1C8:;4$8595>o3=3:17d:8:188m1e=831b9=4?::m21f<722wi>::50;694?6|,8<>65=4H55e?M20=2.2;7?4i5794?=n<j0;66g:0;29?j72k3:17pl=7083>1<729q/=;;5829K02`<@==>7)78:09j00<722c?o7>5;h73>5<<g8?h6=44}c04<?6=<3:1<v*>648;2>N3?o1C8:;4$8590>o3=3:17d;?:188m43e2900c<;l:188yg40?3:187>50z&220<?>2B?;k5G4678 <1=<2c?97>5;h73>5<<a8?i6=44o07`>5<<uk9oi7>55;294~"6><0386F;7g9K023<,0=1=6g;5;29?l202900e9m50;9j15<722e:9n4?::a7`0=83?1<7>t$046>=2<@==m7E:85:&:3?7<a=?1<75f4683>>o3k3:17d;?:188k43d2900qo=j4;291?6=8r.::8474:J73c=O<>?0(4951:k71?6=3`><6=44i5a94?=n=90;66a>5b83>>{e;l91<7;50;2x 40221>0D99i;I641>">?3;0e9;50;9j02<722c?o7>5;h73>5<<g8?h6=44}c1f1?6==3:1<v*>648;0>N3?o1C8:;4$8595>o3=3:17d:8:188m1e=831b9=4?::m21f<722wi?h?50;794?6|,8<>65:4H55e?M20=2.2;7?4i5794?=n<>0;66g;c;29?l372900c<;l:188yg5b83:197>50z&220<?<2B?;k5G4678 <1=92c?97>5;h64>5<<a=i1<75f5183>>i6=j0;66sm3d094?3=83:p(<8::968L11a3A><96*67;38m13=831b8:4?::k7g?6=3`?;6=44o07`>5<<uk9oh7>55;294~"6><03;6F;7g9K023<,0=186g;5;29?l202900e8>50;9j50d=831d=8m50;9~f6bd290>6=4?{%351?>33A><j6F;749'=2<63`>>6=44i5594?=n<j0;66g:0;29?j72k3:17pl<dg83>0<729q/=;;5859K02`<@==>7)78:09j00<722c?;7>5;h6`>5<<a<:1<75`14a94?=zj:i=6=4<:183!71=3><i6F;7g9K023<a=31<75fdc83>>i6=<0;66sm3e294?5=83:p(<8::55f?M20n2B?;85f4883>>ocj3:17b?:5;29?xd4k:0;694?:1y'533=m?1C8:h4H556?l2>2900e8?50;9j50c=831d=8;50;9~f6ea29086=4?{%351?20m2B?;k5G4678m1?=831bho4?::m210<722wi?n?50;694?6|,8<>6h84H55e?M20=2c?57>5;h72>5<<a8?n6=44o076>5<<uk9hi7>53;294~"6><0?;h5G46d8L1123`>26=44ie`94?=h9<?1<75rb2`e>5<3290;w)?95;g5?M20n2B?;85f4883>>o293:17d?:e;29?j72=3:17pl<ce83>6<729q/=;;546g8L11a3A><96g;9;29?lbe2900c<;::188yg5el3:187>50z&220<b>2B?;k5G4678m1?=831b9<4?::k21`<722e:984?::a7fe=8391<7>t$046>11b3A><j6F;749j0<<722con7>5;n361?6=3th8no4?:583>5}#9??1i;5G46d8L1123`>26=44i4394?=n9<o1<75`14794?=zj:ii6=4<:183!71=3><i6F;7g9K023<a=31<75fdc83>>i6=<0;66sm3c;94?2=83:p(<8::d48L11a3A><96g;9;29?l362900e<;j:188k4322900qo=la;297?6=8r.::84;7d9K02`<@==>7d:6:188mad=831d=8;50;9~f6d0290?6=4?{%351?c13A><j6F;749j0<<722c>=7>5;h36a?6=3f;>97>5;|`0g<<72:0;6=u+177902c<@==m7E:85:k7=?6=3`ni6=44o076>5<<uk9i97>54;294~"6><0n:6F;7g9K023<a=31<75f5083>>o6=l0;66a>5483>>{e;j21<7=50;2x 4022==n7E:8f:J730=n<00;66gkb;29?j72=3:17pl<b283>1<729q/=;;5e79K02`<@==>7d:6:188m07=831b=8k50;9l503=831vn>m::180>5<7s-;=97:8e:J73c=O<>?0e9750;9j`g<722e:984?::a7g7=83>1<7>t$046>`0<@==m7E:85:k7=?6=3`?:6=44i07f>5<<g8?>6=44}c1e1?6==3:1<v*>648;0>N3?o1C8:;4$8595>o3=3:17d:8:188m1e=831b9=4?::m21f<722wi?k<50;794?6|,8<>6594H55e?M20=2.2;7:4i5794?=n<>0;66g:0;29?l72j3:17b?:c;29?xd4n:0;684?:1y'533=0=1C8:h4H556?!?0281b884?::k73?6=3`>h6=44i4294?=h9<i1<75rb2d;>5<2290;w)?95;:7?M20n2B?;85+9682?l222900e9950;9j0f<722c><7>5;n36g?6=3th8j;4?:483>5}#9??1495G46d8L1123-3<6<5f4483>>o3?3:17d:l:188m06=831d=8m50;9~f6`0290>6=4?{%351?>33A><j6F;749'=2<63`>>6=44i5594?=n<j0;66g:0;29?j72k3:17pl<fc83>0<729q/=;;5859K02`<@==>7)78:09j00<722c?;7>5;h6`>5<<a<:1<75`14a94?=zj:l26=4::183!71=32?7E:8f:J730=#1>0:7d:::188m11=831b8n4?::k64?6=3f;>o7>5;|`0bd<72<0;6=u+1779<1=O<>l0D99:;%;4>4=n<<0;66g;7;29?l2d2900e8>50;9l50e=831vn>hl:186>5<7s-;=976;;I64b>N3?<1/5:4>;h66>5<<a==1<75f4b83>>o283:17b?:c;29?xd4n=0;684?:1y'533=0=1C8:h4H556?!?0281b884?::k73?6=3`>h6=44i4294?=h9<i1<75rb52b>5<2290;w)?95;:7?M20n2B?;85+9682?l222900e9950;9j0f<722c><7>5;n36g?6=3th?=?4?:483>5}#9??1495G46d8L1123-3<6<5f4483>>o3?3:17d:l:188m06=831d=8m50;9~f176290>6=4?{%351?>33A><j6F;749'=2<63`>>6=44i5594?=n<j0;66g:0;29?j72k3:17pl;1183>0<729q/=;;5859K02`<@==>7)78:09j00<722c?;7>5;h6`>5<<a<:1<75`14a94?=zj=:m6=4::183!71=32?7E:8f:J730=#1>0:7d:::188m11=831b8n4?::k64?6=3f;>o7>5;|`74`<72<0;6=u+1779<1=O<>l0D99:;%;4>4=n<<0;66g;7;29?l2d2900e8>50;9l50e=831vn9>k:186>5<7s-;=976;;I64b>N3?<1/5:4>;h66>5<<a==1<75f4b83>>o283:17b?:c;29?xd38j0;684?:1y'533=0=1C8:h4H556?!?0281b884?::k73?6=3`>h6=44i4294?=h9<i1<75rb52a>5<2290;w)?95;:7?M20n2B?;85+9682?l222900e9950;9j0f<722c><7>5;n36g?6=3th?<44?:483>5}#9??1495G46d8L1123-3<6<5f4483>>o3?3:17d:l:188m06=831d=8m50;9~f16?290>6=4?{%351?>33A><j6F;749'=2<63`>>6=44i5594?=n<j0;66g:0;29?j72k3:17pl;3183>1<729q/=;;5849K02`<@==>7)78:09j00<722c?;7>5;h73>5<<g8?h6=44}c61b?6=<3:1<v*>648;1>N3?o1C8:;4$8595>o3=3:17d:8:188m06=831d=8m50;9~f14b290?6=4?{%351?>23A><j6F;749'=2<63`>>6=44i5594?=n=90;66a>5b83>>{e<;n1<7:50;2x 40221?0D99i;I641>">?3;0e9;50;9j02<722c><7>5;n36g?6=3th?>n4?:583>5}#9??1485G46d8L1123-3<6<5f4483>>o3?3:17d;?:188k43d2900qo:=b;290?6=8r.::8475:J73c=O<>?0(4951:k71?6=3`><6=44i4294?=h9<i1<75rb50:>5<3290;w)?95;:6?M20n2B?;85+9682?l222900e9950;9j15<722e:9n4?::a07>=83>1<7>t$046>=3<@==m7E:85:&:3?7<a=?1<75f4683>>o283:17b?:c;29?xd3:>0;694?:1y'533=0<1C8:h4H556?!?0281b884?::k73?6=3`?;6=44o07`>5<<uk>9:7>54;294~"6><0396F;7g9K023<,0=1=6g;5;29?l202900e8>50;9l50e=831vn9<::187>5<7s-;=976:;I64b>N3?<1/5:4>;h66>5<<a==1<75f5183>>i6=j0;66sm43694?2=83:p(<8::978L11a3A><96*67;38m13=831b8:4?::k64?6=3f;>o7>5;|`766<72=0;6=u+1779<0=O<>l0D99:;%;4>4=n<<0;66g;7;29?l372900c<;l:188yg25:3:187>50z&220<?=2B?;k5G4678 <1=92c?97>5;h64>5<<a<:1<75`14a94?=zj=8:6=4;:183!71=32>7E:8f:J730=#1>0:7d:::188m11=831b9=4?::m21f<722wi8?>50;694?6|,8<>65;4H55e?M20=2.2;7?4i5794?=n<>0;66g:0;29?j72k3:17pl;1d83>1<729q/=;;5849K02`<@==>7)78:09j00<722c?;7>5;h73>5<<g8?h6=44}c62`?6=<3:1<v*>648;1>N3?o1C8:;4$8595>o3=3:17d:8:188m06=831d=8m50;9~f17d290?6=4?{%351?>23A><j6F;749'=2<63`>>6=44i5594?=n=90;66a>5b83>>{e<8h1<7:50;2x 40221?0D99i;I641>">?3;0e9;50;9j02<722c><7>5;n36g?6=3th?=l4?:583>5}#9??1485G46d8L1123-3<6<5f4483>>o3?3:17d;?:188k43d2900qo:>9;290?6=8r.::8475:J73c=O<>?0(4951:k71?6=3`><6=44i4294?=h9<i1<75rb53;>5<3290;w)?95;:6?M20n2B?;85+9682?l222900e9950;9j15<722e:9n4?::a041=83>1<7>t$046>=3<@==m7E:85:&:3?7<a=?1<75f4683>>o283:17b?:c;29?xd39?0;694?:1y'533=0<1C8:h4H556?!?0281b884?::k73?6=3`?;6=44o07`>5<<uk>:97>54;294~"6><0396F;7g9K023<,0=1=6g;5;29?l202900e8>50;9l50e=831vn9=9:187>5<7s-;=976:;I64b>N3?<1/5:4>;h66>5<<a==1<75f5183>>i6=j0;66sm42794?2=83:p(<8::978L11a3A><96*67;38m13=831b8:4?::k64?6=3f;>o7>5;|`771<72=0;6=u+1779<0=O<>l0D99:;%;4>4=n<<0;66g;7;29?l372900c<;l:188yg24;3:187>50z&220<?=2B?;k5G4678 <1=92c?97>5;h64>5<<a<:1<75`14a94?=zj=996=4;:183!71=32>7E:8f:J730=#1>0:7d:::188m11=831b9=4?::m21f<722wi8>?50;694?6|,8<>65;4H55e?M20=2.2;7?4i5794?=n<>0;66g:0;29?j72k3:17pl;2`83>1<729q/=;;5849K02`<@==>7)78:09j00<722c?;7>5;h73>5<<g8?h6=44}c62b?6=<3:1<v*>648;1>N3?o1C8:;4$8595>o3=3:17d:8:188m06=831d=8m50;9~f173290?6=4?{%351?>23A><j6F;749'=2<63`>>6=44i5594?=n=90;66a>5b83>>{e<891<7:50;2x 40221?0D99i;I641>">?3;0e9;50;9j02<722c><7>5;n36g?6=3th?:k4?:283>5}#9??1i=5G46d8L1123-3<6<l4i9`94?=n0j0;66a>5483>>{e<?<1<7=50;2x 4022l:0D99i;I641>">?3;i7d6m:188m=e=831d=8;50;9~f4?429086=4?{%351?c73A><j6F;749'=2<6k2c3n7>5;h:`>5<<g8?>6=44}c3:6?6=;3:1<v*>648f4>N3?o1C8:;4$8595f=n0k0;66g7c;29?j72=3:17pl>9083>6<729q/=;;5e19K02`<@==>7)78:0a8m=d=831b4n4?::m210<722wi=4>50;194?6|,8<>6h>4H55e?M20=2.2;7?l;h:a>5<<a1i1<75`14794?=zj82m6=4<:183!71=3o;7E:8f:J730=#1>0:o6g7b;29?l>d2900c<;::188yg7?m3:1?7>50z&220<b82B?;k5G4678 <1=9j1b4o4?::k;g?6=3f;>97>5;|`2<a<72:0;6=u+1779a5=O<>l0D99:;%;4>4e<a1h1<75f8b83>>i6=<0;66sm19a94?5=83:p(<8::d28L11a3A><96*67;3`?l>e2900e5m50;9l503=831vn<6m:180>5<7s-;=97k?;I64b>N3?<1/5:4>c:k;f?6=3`2h6=44o076>5<<uk;3m7>53;294~"6><0n<6F;7g9K023<,0=1=n5f8c83>>o?k3:17b?:5;29?xd6?h0;6>4?:1y'533=m91C8:h4H556?!?028i0e5l50;9j<f<722e:984?::a52?=8391<7>t$046>`6<@==m7E:85:&:3?7d3`2i6=44i9a94?=h9<?1<75rb05;>5<4290;w)?95;g3?M20n2B?;85+9682g>o?j3:17d6l:188k4322900qo?87;297?6=8r.::84j0:J73c=O<>?0(4951b9j<g<722c3o7>5;n361?6=3th:;;4?:283>5}#9??1i=5G46d8L1123-3<6<m4i9`94?=n0j0;66a>5483>>{e9>?1<7=50;2x 4022l:0D99i;I641>">?3;h7d6m:188m=e=831d=8;50;9~f41329086=4?{%351?c73A><j6F;749'=2<6k2c3n7>5;h:`>5<<g8?>6=44}c347?6=;3:1<v*>648f4>N3?o1C8:;4$8595f=n0k0;66g7c;29?j72=3:17pl>7383>6<729q/=;;5e19K02`<@==>7)78:0a8m=d=831b4n4?::m210<722wi=:?50;194?6|,8<>6h>4H55e?M20=2.2;7?l;h:a>5<<a1i1<75`14794?=zj;=86=4;:183!71=3o97E:8f:J730=#1>09<6g7b;29?l>d2900e5j50;9l503=831vn?9n:186>5<7s-;=97k<;I64b>N3?<1/5:4;6:k;f?6=3`2h6=44i9f94?=n0l0;66a>5483>>{e:><1<7;50;2x 4022l90D99i;I641>">?3;m7d6m:188m=e=831b4i4?::k;a?6=3f;>97>5;|`0e0<72:0;6=u+1779a5=O<>l0D99:;%;4>43<a1h1<75f8b83>>i6=<0;66sm26294?2=83:p(<8::d08L11a3A><96*67;3:?l>e2900e5m50;9j<a<722e:984?::a63`=83?1<7>t$046>`5<@==m7E:85:&:3?713`2i6=44i9a94?=n0m0;66g7e;29?j72=3:17pl<9d83>6<729q/=;;5e19K02`<@==>7)78:348m=d=831b4n4?::m210<722wi?5950;194?6|,8<>6h>4H55e?M20=2.2;7<9;h:a>5<<a1i1<75`14794?=zj;nn6=4<:183!71=3o;7E:8f:J730=#1>09:6g7b;29?l>d2900c<;::188yg4d?3:1?7>50z&220<b82B?;k5G4678 <1=:?1b4o4?::k;g?6=3f;>97>5;|`0=a<72<0;6=u+1779a6=O<>l0D99:;%;4>71<a1h1<75f8b83>>o?l3:17d6j:188k4322900qo=76;291?6=8r.::84j3:J73c=O<>?0(495269j<g<722c3o7>5;h:g>5<<a1o1<75`14794?=zj;no6=4::183!71=3o87E:8f:J730=#1>09;6g7b;29?l>d2900e5j50;9j<`<722e:984?::a6f0=83?1<7>t$046>`5<@==m7E:85:&:3?463`2i6=44i9a94?=n0m0;66g7e;29?j72=3:17pl<9b83>0<729q/=;;5e29K02`<@==>7)78:358m=d=831b4n4?::k;`?6=3`2n6=44o076>5<<uk9397>55;294~"6><0n?6F;7g9K023<,0=1>:5f8c83>>o?k3:17d6k:188m=c=831d=8;50;9~f7bd290>6=4?{%351?c43A><j6F;749'=2<5?2c3n7>5;h:`>5<<a1n1<75f8d83>>i6=<0;66sm2b794?3=83:p(<8::d18L11a3A><96*67;02?l>e2900e5m50;9j<a<722c3i7>5;n361?6=3th85o4?:483>5}#9??1i>5G46d8L1123-3<6?94i9`94?=n0j0;66g7d;29?l>b2900c<;::188yg5?<3:197>50z&220<b;2B?;k5G4678 <1=:>1b4o4?::k;g?6=3`2o6=44i9g94?=h9<?1<75rb3fa>5<2290;w)?95;g0?M20n2B?;85+96813>o?j3:17d6l:188m=b=831b4h4?::m210<722wi>n:50;794?6|,8<>6h=4H55e?M20=2.2;7<>;h:a>5<<a1i1<75f8e83>>o?m3:17b?:5;29?xd41h0;684?:1y'533=m:1C8:h4H556?!?02;=0e5l50;9j<f<722c3h7>5;h:f>5<<g8?>6=44}c1;7?6==3:1<v*>648f7>N3?o1C8:;4$85962=n0k0;66g7c;29?l>c2900e5k50;9l503=831vn?jn:186>5<7s-;=97k<;I64b>N3?<1/5:4=7:k;f?6=3`2h6=44i9f94?=n0l0;66a>5483>>{e:j91<7;50;2x 4022l90D99i;I641>">?38:7d6m:188m=e=831b4i4?::k;a?6=3f;>97>5;|`1a6<72=0;6=u+1779a7=O<>l0D99:;%;4>=7<a1h1<75f8b83>>o?l3:17b?:5;29?xd4i=0;684?:1y'533=m:1C8:h4H556?!?021:0e5l50;9j<f<722c3h7>5;h:f>5<<g8?>6=44}c1:=?6==3:1<v*>648f7>N3?o1C8:;4$85962=n0k0;66g7c;29?l>c2900e5k50;9l503=831vn>6=:186>5<7s-;=97k<;I64b>N3?<1/5:4=7:k;f?6=3`2h6=44i9f94?=n0l0;66a>5483>>{e:m31<7;50;2x 4022l90D99i;I641>">?38<7d6m:188m=e=831b4i4?::k;a?6=3f;>97>5;|`1g7<72<0;6=u+1779a6=O<>l0D99:;%;4>77<a1h1<75f8b83>>o?l3:17d6j:188k4322900qo?73;297?6=8r.::84j0:J73c=O<>?0(4951b9j<g<722c3o7>5;n361?6=3th:;o4?:283>5}#9??1i=5G46d8L1123-3<6?84i9`94?=n0j0;66a>5483>>{e91=1<7=50;2x 4022l:0D99i;I641>">?3;h7d6m:188m=e=831d=8;50;9~f4>629086=4?{%351?c73A><j6F;749'=2<6k2c3n7>5;h:`>5<<g8?>6=44}c3;0?6=<3:1<v*>648f6>N3?o1C8:;4$8596==n0k0;66g7c;29?l>c2900c<;::188yg71l3:1?7>50z&220<b82B?;k5G4678 <1=9j1b4o4?::k;g?6=3f;>97>5;|`223<72:0;6=u+1779a5=O<>l0D99:;%;4>4e<a1h1<75f8b83>>i6=<0;66sm31094?4=83:p(<8::ed8L11a3A><96*67;36?l>e2900c<;::188yg5783:1>7>50z&220<cn2B?;k5G4678 <1=9<1b4o4?::m210<722wi>kk50;094?6|,8<>6ih4H55e?M20=2.2;7?:;h:a>5<<g8?>6=44}c0eg?6=:3:1<v*>648gb>N3?o1C8:;4$85950=n0k0;66a>5483>>{e:ok1<7<50;2x 4022ml0D99i;I641>">?3;>7d6m:188k4322900qo<i8;296?6=8r.::84kf:J73c=O<>?0(495149j<g<722e:984?::a6c0=8381<7>t$046>a`<@==m7E:85:&:3?723`2i6=44o076>5<<uk8m87>52;294~"6><0oj6F;7g9K023<,0=1=85f8c83>>i6=<0;66sm2g094?4=83:p(<8::ed8L11a3A><96*67;36?l>e2900c<;::188yg4a83:1>7>50z&220<cn2B?;k5G4678 <1=9<1b4o4?::m210<722wi?n:50;094?6|,8<>6ih4H55e?M20=2.2;7?:;h:a>5<<g8?>6=44}c1`6?6=:3:1<v*>648gb>N3?o1C8:;4$85950=n0k0;66a>5483>>{e;j:1<7<50;2x 4022ml0D99i;I641>">?3;>7d6m:188k4322900qo=me;296?6=8r.::84kf:J73c=O<>?0(495149j<g<722e:984?::a7ge=8381<7>t$046>a`<@==m7E:85:&:3?723`2i6=44o076>5<<uk9im7>52;294~"6><0oj6F;7g9K023<,0=1=85f8c83>>i6=<0;66sm3c:94?4=83:p(<8::ed8L11a3A><96*67;36?l>e2900c<;::188yg5e>3:1>7>50z&220<cn2B?;k5G4678 <1=9<1b4o4?::m210<722wi?o:50;094?6|,8<>6ih4H55e?M20=2.2;7?:;h:a>5<<g8?>6=44}c1a6?6=:3:1<v*>648gb>N3?o1C8:;4$85950=n0k0;66a>5483>>{e;9?1<7<50;2x 4022ml0D99i;I641>">?3;>7d6m:188k4322900qo=l7;296?6=8r.::84kf:J73c=O<>?0(495149j<g<722e:984?::a531=83>1<7>t$046>`4<@==m7E:85:&:3?4?3`2i6=44i9a94?=n0m0;66a>5483>>{e9?31<7:50;2x 4022l80D99i;I641>">?3837d6m:188m=e=831b4i4?::m210<722wi=;k50;694?6|,8<>6h<4H55e?M20=2.2;7<7;h:a>5<<a1i1<75f8e83>>i6=<0;66sm19494?3=83:p(<8::d18L11a3A><96*67;0:?l>e2900e5m50;9j<a<722c3i7>5;n361?6=3th:444?:483>5}#9??1i>5G46d8L1123-3<6<k4i9`94?=n0j0;66g7d;29?l>b2900c<;::188yg7083:197>50z&220<b;2B?;k5G4678 <1=9l1b4o4?::k;g?6=3`2o6=44i9g94?=h9<?1<75rb0:3>5<2290;w)?95;g0?M20n2B?;85+9682a>o?j3:17d6l:188m=b=831b4h4?::m210<722wi=5650;694?6|,8<>6h<4H55e?M20=2.2;7<7;h:a>5<<a1i1<75f8e83>>i6=<0;66sm19794?3=83:p(<8::d18L11a3A><96*67;3f?l>e2900e5m50;9j<a<722c3i7>5;n361?6=3th::l4?:483>5}#9??1i>5G46d8L1123-3<6<k4i9`94?=n0j0;66g7d;29?l>b2900c<;::188yg70m3:187>50z&220<b:2B?;k5G4678 <1=9m1b4o4?::k;g?6=3`2o6=44o076>5<<uk;=n7>55;294~"6><0n?6F;7g9K023<,0=1=h5f8c83>>o?k3:17d6k:188m=c=831d=8;50;9~f4>5290?6=4?{%351?c53A><j6F;749'=2<502c3n7>5;h:`>5<<a1n1<75`14794?=zj8<36=4::183!71=3o87E:8f:J730=#1>0:i6g7b;29?l>d2900e5j50;9j<`<722e:984?::a52`=83>1<7>t$046>`4<@==m7E:85:&:3?7c3`2i6=44i9a94?=n0m0;66a>5483>>{e9>n1<7;50;2x 4022l90D99i;I641>">?3827d6m:188m=e=831b4i4?::k;a?6=3f;>97>5;|`71g<72=81<7>t$046>43c3A><j6F;749Y01<fs?0<6?<522825?752;>1=>4=5;37>x"c>390(i953:&;b?5<,0:1?6*61;18 <4=;2.2?7=4$8697>"6>8097)?92;08 <>=;2.257=4$8c97>">j390(4m53:&:`?5<,0o1?6*6f;18 d6=;2.j=7=4$`097>"f;390(l:53:&b1?5<,h<1?6*n7;18 d>=;2.j57=4$`c97>"fj390(lm53:&b`?5<,ho1?6*nf;18 g6=;2.i=7=4$c097>"e;390(o:53:&a1?5<,k<1?6*m7;18 g>=;2.i57=4$cc97>"ej390(om53:&a`?5<,ko1?6*mf;18 f6=;2.h=7=4$b097>"d;390(n:53:&`1?5<,j<1?6*l7;18 f>=;2.h57=4$bc97>"dj390(nm53:&``?5<,jo1?6*lf;18 a6=;2.o=7=4$e097>"c;390(i:53:&g1?5<,==h699n;%;6>6=#9<l1=8:4$e:96>"c1380(99m:55b?!?12:1b8l4?::k7f?6=3`=n6=44i6d94?=n9?91<75f17694?=n<>21<75f46;94?=n:j0;6)?:a;0a?k7213:07d=::18'50g=:k1e=8751:9j71<72-;>m7<m;o36=?4<3`986=4+14c96g=i9<31?65f3383>!72i38i7c?:9;68?l56290/=8o52c9m50?==21b?=4?:%36e?4e3g;>5784;h0e>5<#9<k1>o5a14;93>=n:l0;6)?:a;0a?k7213207d<k:18'50g=:k1e=8759:9j6d<72-;>m7<m;o36=?g<3`936=4+14c972=i9<31<65f4083>!72i39<7c?:9;38?l27290/=8o5369m50?=:21b?k4?:%36e?503g;>57=4;h1f>5<#9<k1?:5a14;90>=n;m0;6)?:a;14?k7213?07d=l:18'50g=;>1e=8756:9j7g<72-;>m7=8;o36=?1<3`9j6=4+14c972=i9<31465f3883>!72i39<7c?:9;;8?l51290/=8o5369m50?=i21b9l4?:%36e?3>3g;>57>4;h7;>5<#9<k1945a14;95>=n=>0;6)?:a;7:?k7213807d;9:18'50g==01e=8753:9j10<72-;>m7;6;o36=?2<3`??6=4+14c91<=i9<31965f5283>!72i3?27c?:9;48?l35290/=8o5589m50?=?21b:>4?:%36e?053g;>57>4;h42>5<#9<k1:?5a14;95>=n>90;6)?:a;41?k7213807d;i:18'50g=>;1e=8753:9j1`<72-;>m78=;o36=?2<3`?o6=4+14c927=i9<31965f5b83>!72i3<97c?:9;48?l3e290/=8o5639m50?=?21b:84?:%36e?033g;>57>4;h44>5<#9<k1:;5a14;94>=h?90;6)?:a;4e?k7213:07b8j:18'50g=>o1e=8751:9l2a<72-;>m78i;o36=?4<3f<h6=4+14c92c=i9<31?65`6c83>!72i3<m7c?:9;68?j0f290/=8o56g9m50?==21d:44?:%36e?0a3g;>5784;n4;>5<#9<k1:k5a14;93>=h?k0;6)?:a;5b?k7213:07b96:18'50g=?11e=8750:9l32<72-;>m797;o36=?7<3f==6=4+14c93==i9<31>65`7483>!72i3=37c?:9;18?j13290/=8o5799m50?=<21d;>4?:%36e?1?3g;>57;4;n51>5<#9<k1;55a14;92>=h?80;6)?:a;5;?k7213=07b9k:18'50g=?j1e=8750:9~f13d290?>7>50z&220<6=m1C8:h4H556?_232hq=6:4=2;00>47=9;0987?<:37951<z,m<1?6*k7;18 =`=;2.2<7=4$8397>">:390(4=53:&:0?5<,8<:6?5+17096>">0390(4753:&:e?5<,0h1?6*6c;18 <b=;2.2i7=4$8d97>"f8390(l?53:&b6?5<,h91?6*n4;18 d3=;2.j:7=4$`597>"f0390(l753:&be?5<,hh1?6*nc;18 db=;2.ji7=4$`d97>"e8390(o?53:&a6?5<,k91?6*m4;18 g3=;2.i:7=4$c597>"e0390(o753:&ae?5<,kh1?6*mc;18 gb=;2.ii7=4$cd97>"d8390(n?53:&`6?5<,j91?6*l4;18 f3=;2.h:7=4$b597>"d0390(n753:&`e?5<,jh1?6*lc;18 fb=;2.hi7=4$bd97>"c8390(i?53:&g6?5<,m91?6*k4;18 a3=;2.?;n4;7`9'=0<43-;>j7?:4:&g<?4<,m31>6*;7c873d=#1?087d:n:188m1d=831b;h4?::k4b?6=3`;=?7>5;h350?6=3`><47>5;h64=?6=3`8h6=4+14c96g=i9<31<65f3483>!72i38i7c?:9;38?l53290/=8o52c9m50?=:21b?>4?:%36e?4e3g;>57=4;h11>5<#9<k1>o5a14;90>=n;80;6)?:a;0a?k7213?07d=?:18'50g=:k1e=8756:9j6c<72-;>m7<m;o36=?1<3`8n6=4+14c96g=i9<31465f2e83>!72i38i7c?:9;;8?l4f290/=8o52c9m50?=i21b?54?:%36e?503g;>57>4;h62>5<#9<k1?:5a14;95>=n<90;6)?:a;14?k7213807d=i:18'50g=;>1e=8753:9j7`<72-;>m7=8;o36=?2<3`9o6=4+14c972=i9<31965f3b83>!72i39<7c?:9;48?l5e290/=8o5369m50?=?21b?l4?:%36e?503g;>5764;h1:>5<#9<k1?:5a14;9=>=n;?0;6)?:a;14?k7213k07d;n:18'50g==01e=8750:9j1=<72-;>m7;6;o36=?7<3`?<6=4+14c91<=i9<31>65f5783>!72i3?27c?:9;18?l32290/=8o5589m50?=<21b994?:%36e?3>3g;>57;4;h70>5<#9<k1945a14;92>=n=;0;6)?:a;7:?k7213=07d8<:18'50g=>;1e=8750:9j24<72-;>m78=;o36=?7<3`<;6=4+14c927=i9<31>65f5g83>!72i3<97c?:9;18?l3b290/=8o5639m50?=<21b9i4?:%36e?053g;>57;4;h7`>5<#9<k1:?5a14;92>=n=k0;6)?:a;41?k7213=07d8::18'50g=>=1e=8750:9j22<72-;>m789;o36=?6<3f=;6=4+14c92c=i9<31<65`6d83>!72i3<m7c?:9;38?j0c290/=8o56g9m50?=:21d:n4?:%36e?0a3g;>57=4;n4a>5<#9<k1:k5a14;90>=h>h0;6)?:a;4e?k7213?07b86:18'50g=>o1e=8756:9l2=<72-;>m78i;o36=?1<3f=i6=4+14c93d=i9<31<65`7883>!72i3=37c?:9;28?j10290/=8o5799m50?=921d;;4?:%36e?1?3g;>57<4;n56>5<#9<k1;55a14;97>=h?=0;6)?:a;5;?k7213>07b9<:18'50g=?11e=8755:9l37<72-;>m797;o36=?0<3f=:6=4+14c93==i9<31;65`7e83>!72i3=h7c?:9;28?xd3=m0;69<50;2x 40228?o7E:8f:J730=]<=0jw;48:30966<693;96?:512811?732t.o:7=4$e597>"?n390(4>53:&:5?5<,081?6*63;18 <2=;2.::<4=;%356?4<,021?6*69;18 <g=;2.2n7=4$8a97>">l390(4k53:&:b?5<,h:1?6*n1;18 d4=;2.j?7=4$`697>"f=390(l853:&b3?5<,h21?6*n9;18 dg=;2.jn7=4$`a97>"fl390(lk53:&bb?5<,k:1?6*m1;18 g4=;2.i?7=4$c697>"e=390(o853:&a3?5<,k21?6*m9;18 gg=;2.in7=4$ca97>"el390(ok53:&ab?5<,j:1?6*l1;18 f4=;2.h?7=4$b697>"d=390(n853:&`3?5<,j21?6*l9;18 fg=;2.hn7=4$ba97>"dl390(nk53:&`b?5<,m:1?6*k1;18 a4=;2.o?7=4$e697>"c=390(99l:55b?!?22:1/=8h51468 a>=:2.o57<4$55a>11f3-3=6>5f4`83>>o3j3:17d9j:188m2`=831b=;=50;9j532=831b8:650;9j02?=831b>n4?:%36e?4e3g;>57>4;h16>5<#9<k1>o5a14;95>=n;=0;6)?:a;0a?k7213807d=<:18'50g=:k1e=8753:9j77<72-;>m7<m;o36=?2<3`9:6=4+14c96g=i9<31965f3183>!72i38i7c?:9;48?l4a290/=8o52c9m50?=?21b>h4?:%36e?4e3g;>5764;h0g>5<#9<k1>o5a14;9=>=n:h0;6)?:a;0a?k7213k07d=7:18'50g=;>1e=8750:9j04<72-;>m7=8;o36=?7<3`>;6=4+14c972=i9<31>65f3g83>!72i39<7c?:9;18?l5b290/=8o5369m50?=<21b?i4?:%36e?503g;>57;4;h1`>5<#9<k1?:5a14;92>=n;k0;6)?:a;14?k7213=07d=n:18'50g=;>1e=8758:9j7<<72-;>m7=8;o36=??<3`9=6=4+14c972=i9<31m65f5`83>!72i3?27c?:9;28?l3?290/=8o5589m50?=921b9:4?:%36e?3>3g;>57<4;h75>5<#9<k1945a14;97>=n=<0;6)?:a;7:?k7213>07d;;:18'50g==01e=8755:9j16<72-;>m7;6;o36=?0<3`?96=4+14c91<=i9<31;65f6283>!72i3<97c?:9;28?l06290/=8o5639m50?=921b:=4?:%36e?053g;>57<4;h7e>5<#9<k1:?5a14;97>=n=l0;6)?:a;41?k7213>07d;k:18'50g=>;1e=8755:9j1f<72-;>m78=;o36=?0<3`?i6=4+14c927=i9<31;65f6483>!72i3<?7c?:9;28?l00290/=8o5679m50?=821d;=4?:%36e?0a3g;>57>4;n4f>5<#9<k1:k5a14;95>=h>m0;6)?:a;4e?k7213807b8l:18'50g=>o1e=8753:9l2g<72-;>m78i;o36=?2<3f<j6=4+14c92c=i9<31965`6883>!72i3<m7c?:9;48?j0?290/=8o56g9m50?=?21d;o4?:%36e?1f3g;>57>4;n5:>5<#9<k1;55a14;94>=h?>0;6)?:a;5;?k7213;07b99:18'50g=?11e=8752:9l30<72-;>m797;o36=?5<3f=?6=4+14c93==i9<31865`7283>!72i3=37c?:9;78?j15290/=8o5799m50?=>21d;<4?:%36e?1?3g;>5794;n5g>5<#9<k1;n5a14;94>=zj=?n6=4;2;294~"6><0:9i5G46d8L1123S>?6lu9:6816?4428;1=?4=4;30>73=9=0v(i853:&g3?5<,1l1?6*60;18 <7=;2.2>7=4$8197>"><390(<8>:39'534=:2.247=4$8;97>">i390(4l53:&:g?5<,0n1?6*6e;18 <`=;2.j<7=4$`397>"f:390(l=53:&b0?5<,h?1?6*n6;18 d1=;2.j47=4$`;97>"fi390(ll53:&bg?5<,hn1?6*ne;18 d`=;2.i<7=4$c397>"e:390(o=53:&a0?5<,k?1?6*m6;18 g1=;2.i47=4$c;97>"ei390(ol53:&ag?5<,kn1?6*me;18 g`=;2.h<7=4$b397>"d:390(n=53:&`0?5<,j?1?6*l6;18 f1=;2.h47=4$b;97>"di390(nl53:&`g?5<,jn1?6*le;18 f`=;2.o<7=4$e397>"c:390(i=53:&g0?5<,m?1?6*;7b873d=#1<087)?:f;360>"c0380(i752:&73g<3?h1/5;4<;h6b>5<<a=h1<75f7d83>>o0n3:17d?93;29?l71<3:17d:88;29?l2013:17d<l:18'50g=:k1e=8750:9j70<72-;>m7<m;o36=?7<3`9?6=4+14c96g=i9<31>65f3283>!72i38i7c?:9;18?l55290/=8o52c9m50?=<21b?<4?:%36e?4e3g;>57;4;h13>5<#9<k1>o5a14;92>=n:o0;6)?:a;0a?k7213=07d<j:18'50g=:k1e=8758:9j6a<72-;>m7<m;o36=??<3`8j6=4+14c96g=i9<31m65f3983>!72i39<7c?:9;28?l26290/=8o5369m50?=921b8=4?:%36e?503g;>57<4;h1e>5<#9<k1?:5a14;97>=n;l0;6)?:a;14?k7213>07d=k:18'50g=;>1e=8755:9j7f<72-;>m7=8;o36=?0<3`9i6=4+14c972=i9<31;65f3`83>!72i39<7c?:9;:8?l5>290/=8o5369m50?=121b?;4?:%36e?503g;>57o4;h7b>5<#9<k1945a14;94>=n=10;6)?:a;7:?k7213;07d;8:18'50g==01e=8752:9j13<72-;>m7;6;o36=?5<3`?>6=4+14c91<=i9<31865f5583>!72i3?27c?:9;78?l34290/=8o5589m50?=>21b9?4?:%36e?3>3g;>5794;h40>5<#9<k1:?5a14;94>=n>80;6)?:a;41?k7213;07d8?:18'50g=>;1e=8752:9j1c<72-;>m78=;o36=?5<3`?n6=4+14c927=i9<31865f5e83>!72i3<97c?:9;78?l3d290/=8o5639m50?=>21b9o4?:%36e?053g;>5794;h46>5<#9<k1:95a14;94>=n>>0;6)?:a;45?k7213:07b9?:18'50g=>o1e=8750:9l2`<72-;>m78i;o36=?7<3f<o6=4+14c92c=i9<31>65`6b83>!72i3<m7c?:9;18?j0e290/=8o56g9m50?=<21d:l4?:%36e?0a3g;>57;4;n4:>5<#9<k1:k5a14;92>=h>10;6)?:a;4e?k7213=07b9m:18'50g=?h1e=8750:9l3<<72-;>m797;o36=?6<3f=<6=4+14c93==i9<31=65`7783>!72i3=37c?:9;08?j12290/=8o5799m50?=;21d;94?:%36e?1?3g;>57:4;n50>5<#9<k1;55a14;91>=h?;0;6)?:a;5;?k7213<07b9>:18'50g=?11e=8757:9l3a<72-;>m79l;o36=?6<3th:;n4?:483>5}#9??1i95G46d8L1123-3<6?74i9`94?=n0j0;66g7d;29?l>b2900cim50;9~f40a29086=4?{%351?c63A><j6F;749'=2<6k2c3n7>5;h:`>5<<gmi1<75rb04`>5<2290;w)?95;g7?M20n2B?;85+9682a>o?j3:17d6l:188m=b=831b4h4?::mgg?6=3ty>544?:7y]1<?<5;=865j4=35b>=c<5;==65k4=353>=d<5;<m65l4}r6:3?6=?1qU8474^5:;?[3f:2T>m=5Q4958Z0?d3W?8:6P:a09]161<V<?h7S:7e:\7=3=Y<0?0R97;;_6:7>X31;1U84?4^5;3?[2?n2T?4i5Q49a891>72130198m:42891052<:0198n:428910>2<:0199<:42891152<:01?lm:43897df2<;01?l6:43897d?2<;01?l8:43897d12<;01?j=:43897b62<;01?j?:43897ea2<;01?mj:43897ec2<;01>9m:438961f2<;01>96:438961?2<;01>98:43896112<;01>7=:43896?62<;01>7?:43896>a2<;01>6j:43896>c2<;01>>>:43897`a2<;01?hk:43897`e2<;01?h6:43897`02<;01?h::43897`42<;01?h>:43897ca2<;01>m<:43896e62<;01>li:43896dc2<;01>lm:43896d>2<;01>l8:43896d22<;01>l<:43896d62<;019;m:040?822j3;=863;5c873<=:<<h1:>5244`924=:<<h1:=5244`91c=:<<h19h5244`91a=:<<h19n5244`91g=:<<h1::5244a9535<5=?h6<8;;<66g?20127?9n493:?71f<1927?9n490:?71f<2n27?9n4:e:?71f<2l27?9n4:c:?71f<2j27?9n497:?71a<6>:1688j51768913c2==270::d;40?822l3<:70::d;43?822l3?m70::d;7f?822l3?o70::d;7`?822l3?i70::d;44?822m3;=?63;5d8221=:<<o18:74=57f>35<5=?n6;?4=57f>36<5=?n68h4=57f>0c<5=?n68j4=57f>0e<5=?n68l4=57f>31<uz?2n7>53z\6=g=:<?h1=8l4=541>43e3ty>>i4?:3y]17b<5;=36<;l;|q6fg<72:qU9ol4=2c6>=d<5:k?65l4}r7;5?6=09qU95?4=547>13<5=<869;4=541>13<5=<j69;4=54:>13<5;o:69;4=3;a>13<5;3h69;4=3;f>13<5;3m69;4=3c3>13<5;k:69;4=3c1>13<5;k869;4=3c7>13<5;k>69;4=3;g>13<5;;:69;4=33:>13<5;;369;4=334>13<5;;=69;4=336>13<5;;?69;4=330>13<5;;969;4=333>13<5;:m69;4=37`>13<5;<?69;4=340>13<5;<969;4=342>13<5;<;69;4=37e>13<5;?n69;4=37g>13<5;?i69;4=37b>13<5;>=69;4=36f>13<5;>o69;4=36`>13<5;>i69;4=36b>13<5;>269;4=36;>13<5;><69;4=366>13<5;>?69;4=0a0>13<58ii69;4=0ab>13<58i269;4=0a;>13<58i<69;4=0a5>13<58i>69;4=0a7>13<58i969;4=0a2>13<5:;h69;4=207>13<5:8969;4=202>13<5:8869;4=23e>13<5:;n69;4=203>13<5:;i69;4=23b>13<5:;o69;4=211>13<5:9j69;4=21:>13<5:9369;4=214>13<5:9=69;4=216>13<5:9?69;4=210>13<5:9:69;4=213>13<5;=?69;4=352>13<5;=369;4=354>13<5=9;69;4=50e>13<5=8n69;4=50g>13<5=8h69;4=50a>13<5=8269;4=50;>13<5=8<69;4=505>13<5=8>69;4=507>13<5=8869;4=501>13<5=8:69;4=503>13<5=;n69;4=53g>13<5=;h69;4=53a>13<5=;j69;4=53:>13<5=;369;4=534>13<5=;=69;4=536>13<5=9=69;4=516>13<5=9?69;4=510>13<5=9969;4=512>13<5=8j69;4=53e>13<5=;?69;4=530>13<5=?i69l4=57`>1d<5=?o69l4=57f>1d<uz?8?7>52z\676=:;h81=8m4}r7b7?6=>=qU9l=4=54g>13<5=<i69;4=54`>13<5==869;4=551>13<5:k969;4=2c2>13<5:?i69;4=27`>13<5:?n69;4=27e>13<5:<;69;4=242>13<5:<969;4=240>13<5:<?69;4=246>13<5:?o69;4=0c7>13<58kh69;4=0ca>13<58kj69;4=0c:>13<58k369;4=0c4>13<58k=69;4=0c6>13<58k869;4=0c1>13<58om69;4=0d4>13<58l=69;4=0d6>13<58l?69;4=0d0>13<58l969;4=0d2>13<58l;69;4=0gf>13<58oo69;4=0f:>13<58o:69;4=0g3>13<58nm69;4=0ff>13<58no69;4=0f`>13<58ni69;4=0fb>13<58n369;4=0f4>13<5;9;69;4=31;>13<5;9<69;4=315>13<5;9>69;4=317>13<5;9869;4=311>13<5;9:69;4=30e>13<5;8n69;4=2ff>13<5:o=69;4=2g7>13<5:o869;4=2g6>13<5:o:69;4=2g3>13<5:o969;4=2fg>13<5:nh69;4=2fe>13<5:l>69;4=2d1>13<5:l869;4=2d;>13<5:l=69;4=2d4>13<5:li69;4=2d:>13<5:lj69;4=2d`>13<5:l?69;4=52b>13<5=;969;4=532>13<5=;;69;4=52e>13<5=:n69;4=52g>13<5=:h69;4=52a>13<5=:269;4=52;>13<5=?i69o4=57`>1g<5=?o69o4=57f>1g<uz?i=7>52z\6e3=:;<n1=8m4}r7ae?6=:rT>mh52377950e<uz?i57>52z\6ea=:;?>1=8m4}r7a<?6=:rT>mn52371950e<uz?i;7>52z\6eg=:;?81=8m4}r7a2?6=:rT>ml52373950e<uz?i97>52z\6e<=:;?:1=8m4}r7a0?6=:rT>m55234d950e<uz?i?7>52z\6e2=:;<o1=8m4}r7a6?6=:rT>m85234a950e<uz?jj7>52z\6e1=:;<h1=8m4}r710?6=:rT><=52422950e<uz?9>7>52z\7bc=:<;l1=8m4}r715?6=:rT?jh5243g950e<uz?9<7>52z\7ba=:<;n1=8m4}r72b?6=:rT?jn5243a950e<uz?:i7>52z\7bg=:<;h1=8m4}r72g?6=:rT?j45243;950e<uz?:n7>52z\7b==:<;21=8m4}r72e?6=:rT?j:52435950e<uz?:57>52z\7b3=:<;<1=8m4}r72<?6=:rT?j852437950e<uz?:;7>52z\7b1=:<;>1=8m4}r722?6=:rT?j>52431950e<uz?:97>52z\7b7=:<;81=8m4}r720?6=:rT?j<52433950e<uz?:?7>52z\7b5=:<;:1=8m4}r725?6=:rT?ih5240g950e<uz?:<7>52z\7aa=:<8n1=8m4}r73b?6=:rT?in5240a950e<uz?;i7>52z\7ag=:<8h1=8m4}r73`?6=:rT?il5240c950e<uz?;o7>52z\7a<=:<831=8m4}r73f?6=:rT?i55240:950e<uz?;m7>52z\7a2=:<8=1=8m4}r73=?6=:rT?i;52404950e<uz?;47>52z\7a0=:<8?1=8m4}r71f?6=:rT><;52424950e<uz?9m7>52z\640=:<:?1=8m4}r71=?6=:rT><952426950e<uz?947>52z\646=:<:91=8m4}r713?6=:rT><?52420950e<uz?9:7>52z\644=:<:;1=8m4}r711?6=:rT?jl5243c950e<uz?:h7>52z\7ac=:<8l1=8m4}r726?6=:rT?i952406950e<uz?;;7>52z\7a6=:<891=8m4}r7;b?6=:rT>495228f950e<uz?247>52z\6<f=::h?1=8m4}r7:3?6=:rT>4o522`6950e<uz?2:7>52z\6<d=::h91=8m4}r7:1?6=:rT>44522`0950e<uz?287>52z\6<==::h;1=8m4}r7:7?6=:rT>4:522`2950e<uz?2>7>52z\6<3=::0l1=8m4}r7:5?6=:rT>485228g950e<uz?2<7>52z\6<6=::0i1=8m4}r7;`?6=:rT>4?5228`950e<uz>on7>52z\7f2=:<<o1:85rs5f:>5<5sW>i:63;5d86e>{t<m21<7<t^5`6?822m3?37p};d683>7}Y<k>019;j:458yv2c>3:1>vP;b29>00c==?1v9j::181[2e:27?9h4:5:p0a5=838pR9l?;<66a?333ty?h?4?:3y]0d`<5=?n68=4}r6g5?6=:rT?mh5244g917=z{=n;6=4={_6b`>;3=m0=96s|4bd94?4|V=kh70::d;7b?xu3kl0;6?uQ4``8913c2<20q~:ld;296~X3ih1688j5569~w1ed2909wS:n9:?71a<2>2wx8nl50;0xZ1g?34>>h7;:;|q7gd<72;qU8l94=57g>02<uz>h47>52z\7e0=:<<n19>5rs5a4>5<5sW>j863;5e866>{t<j<1<7<t^5c0?822k3<>7p};c483>7}Y<h8019;l:4c8yv2d<3:1>vP;a09>00e==11v9m<:181[2f827?9n4:7:p0f4=838pR97i;<66g?313ty?o<4?:3y]0<c<5=?h68;4}r6`4?6=:rT?5i5244a911=z{=hm6=4={_6:g>;3=j0>?6s|4d094?4|V=ho70::c;71?xu3m80;6?uQ4ca8913e2??0q~:j0;296~X3jk1688l55`9~w1ba2909wS:ma:?71g<202wx8ik50;0xZ1d>34>>n7;8;|q7`a<72;qU8o64=57a>00<uz>oo7>52z\7f4=:<<h1985rs5f7>5<5sW>j:63;5c860>{t<j31<7<t^5;a?822j3?87p};bd83>7}Y<0k019;m:408yvc>290:=v3;808212=::>h1845228290<=:;:h1845234290<=::k<184522bf90<=:;><1845239f90<=:;99184522dd90<=:;j?184523c390<=:<<h1;h5244a93`=:<<n1;h5244g93`=z{=<86=4<{<650?3734>=?7?:c:?727<3?2wx8;:50;0x910328?h70:96;:a?xu3>j0;6>u247f915=:<?h18:5247a950e<uz>=h7>52z?72a<6=j168;h58c9~w1052908w0:93;73?821:3;>o63;678;g>{t<?h1<7=t=54a>43d34>=o7;?;<65b?>d3ty?:84?:2y>03g=9<h01986:07a?821>3;>96s|47:94?40s4>=m7?:c:?1a4<6=k16>4l54b9>6<e=<j16>4k54b9>6<`=<j16>l>54b9>6d7=<j16>l<54b9>6d5=<j16>l:54b9>6d3=<j16>4j54b9>74e=<j16??:54b9>774=<j16???54b9>775=<j16?<h54b9>74c=<j16??>54b9>74d=<j16?<o514`8967c2=i01>==:5a8965f2=i01>=6:5a8965?2=i01>=8:5a896512=i01>=::5a896532=i01>=<:5a896562=i01>=?:5a897132=i01?9>:5a8971?28?i70<87;36f>{t<?=1<7<k{<65=?72k279=<4;c:?15<<3k279=54;c:?152<3k279=;4;c:?150<3k279=94;c:?156<3k279=?4;c:?155<3k279<k4;c:?11f<3k279:94;c:?126<3k279:?4;c:?124<3k279:=4;c:?11c<3k2799h4;c:?11a<3k2799o4;c:?11d<3k2798;4;c:?10`<3k2798i4;c:?10f<3k2798o4;c:?10d<3k279844;c:?10=<3k2798:4;c:?100<3k279894;c:?2g6<3k27:oo4;c:?2gd<3k27:o44;c:?2g=<3k27:o:4;c:?2g3<3k27:o84;c:?2g1<3k27:o?4;c:?2g4<3k2wx8;k50;1x911428?i70:82;36f>;3>o0:985rs552>5<5nr7?;>4>5b9>7d4=9<h01>o>:07a?852j3>h70=:c;6`?852m3>h70=:f;6`?85183>h70=91;6`?851:3>h70=93;6`?851<3>h70=95;6`?852l3>h70=ke;6`?85b>3>h70=j4;6`?85b;3>h70=j5;6`?85b93>h70=j0;6`?85b:3>h70=kd;36f>;4lj0?o63<dg87g>;4n<0?o63<f3821g=:;o918n523g:90f=:;o<18n523g590f=:;oh18n523g;90f=:;ok18n523ga90f=:;o>18n5241c90f=:<8818n5240390f=:<8:18n5241d90f=:<9o18n5241f90f=:<9i18n5241`90f=:<9318n5241:90f=z{==;6=4=dz?737<6=j16=l:54b9>5de=<j16=ll54b9>5dg=<j16=l754b9>5d>=<j16=l954b9>5d0=<j16=l;54b9>5d5=<j16=l<54b9>5``=<j16=k954b9>5c0=<j16=k;54b9>5c2=<j16=k=54b9>5c4=<j16=k?54b9>5c6=<j16=hk54b9>5`b=<j16=i754b9>5`7=<j16=h>54b9>5a`=<j16=ik54b9>5ab=<j16=im54b9>5ad=<j16=io54b9>5a>=<j16=i954b9>666=<j16>>654b9>661=<j16>>854b9>663=<j16>>:54b9>665=<j16>><54b9>667=<j16>?h54b9>67c=<j1v?k=:18184b93?;70<j3;361>{t:l;1<7=t=3g2>43d348<:76m;<05b?>d3ty9m;4?:3y>6<d==916>4>51478yv4f03:1>v3=9b864>;51;0:985rs3c:>5<5s482i7;?;<0:7?72=2wx>lo50;0x97?a2<:01?7;:076?xu5ik0;6?u22`2915=::0?1=8;4}r0bg?6=:r79m<4:0:?1=3<6=<1v?ok:18184f:3?;70<67;361>{t:ho1<7<t=3c0>06<5;336<;:;|q1ec<72;q6>l:5519>6<?=9<?0q~<m0;296~;5i<0><63=9`8210=z{;k<6=4={<0:`?373482=7?:5:p7d5=839p1>o=:42896g62<:01>o;:076?xu4i80;6>u23`3950e<5:k>65m4=2c7>=e<uz9=:7>52z?01g<282789=4>549~w60?2909w0=:c;73?852:3;>96s|37;94?4|5:?n68>4=270>4323ty8:l4?:3y>70`==916?8:51478yv51j3:1>v3<61864>;4=<0:985rs24`>5<5s49==7;?;<162?72=2wx?;j50;0x96052<:01>;8:076?xu4>l0;6?u2371915=:;<21=8;4}r15b?6=:r78:94:0:?01<<6=<1v>9?:181851=3?;70=:a;361>{t;?=1<7<t=27g>06<5:?:6<;:;|q141<72<q6>5;58c9>62d==816>=h514a897b>21o01?m=:9`8yv55=3:14v3=848;g>;4;90:9n5216c9<f=::j814i5244`973=:<<i1?;5244f973=:<<o1?;5rs3:6>5<4s48397?:5:?13g<6=l16>4>5dc9~w71e2908w0<8b;361>;5?j0?563=9387=>{t:9<1<7;t=3:4>=d<5;=h68?4=333>43d348o576l;<0`6?>d3ty8>:4?:8y>6=1=0j16?>?514a8941f21h01<96:9a897e521o019;m:2;8913d2:3019;k:2;8913b2:30q~<77;297~;50>0:985226a950c<5;396il4}r04g?6=;r79;n4>549>62b=<016>4=5489~w760290>w0<78;:a?840l3?:70<>2;36g>;5lh03i63=c28;f>{t;;21<77t=3:;>=e<5:986<;l;<34=?>e34;<476l;<0`7?>c34>>n7=n;<66g?5f34>>h7=n;<66a?5f3ty9454?:2y>6=>=9<?01?9k:07f?84>;3ni7p}=7e83>6}::>n1=8;4=35f>1?<5;3?6974}r03<?6==r794447b:?13`<29279=>4>5b9>6ag=0j16>n=58b9~w64>2902w0<79;:`?854<3;>o63>798;f>;6?>03o63=c28;a>;3=k08n63;5b80f>;3=m08n63;5d80f>{t:131<7=t=3::>432348<i7?:e:?1=1<cj2wx>:k50;1x971b28?>70<8f;6:?84>=3>27p}=0883>0}::1k14o5226d914=::8>1=8m4=3fa>=c<5;i?65l4}r11e?6=1r794l47c:?070<6=j16=:958c9>520=0j16>n:58e9>00d=;j1688m53b9>00b=;j1688k53b9~w7>f2908w0<7a;361>;5?o0:9h522879`g=z{;=m6=4<{<04b?72=2794=4;9:?1=3<312wx>=o50;7x97>e21h01?6?:438977228?h70<kb;:`?84d<32h7p}<2c83><}::1h14n52324950e<58==65l4=056>=e<5;i?65k4=57a>6b<5=?h6>j4=57g>6b<5=?n6>j4}r0;f?6=;r794o4>549>6=6=9<o01?79:e`8yv4?83:1?v3=818210=::1;1845228590<=z{;:i6=4:{<0;g?>e3483=7;>;<022?72k279hn47e:?1g0<?j2wx??m50;;x97>d21i01>=8:07`?870=32i70?84;:`?84d=32o70::b;1f?822k39n70::d;1f?822m39n7p}=8b83>6}::1i1=8;4=3:2>43b3482;7jm;|q1<4<72:q6>5?5147897>52=301?77:5;8yv47k3:19v3=8e8;f>;50;0>=63=16821f=::mi14n522b79<f=z{:8o6=46{<0;`?>d349847?:c:?231<?j27:;>47c:?1g0<?m27?9o4<f:?71f<4n27?9i4<f:?71`<4n2wx>5j50;1x97>c28?>70<72;36a>;5110on6s|29094?5|5;296<;:;<0;7?2>348257:6;|q14a<72<q6>5k58c9>6=5==816><6514a897bc21o01?m9:9`8yv55m3:15v3=8d8;g>;4;00:9n521619<g=:9>814n522b49<a=:<<h18=5244a905=:<<n18=5244g905=z{;2n6=4<{<0;a?72=2794>4>5d9>6<?=lk1v?6<:18084?;3;>963=8587=>;51h0?56s|21g94?3|5;2m65l4=3:7>07<5;;26<;l;<0g`?>d348h:76l;|q06c<720q6>5h58b9>76g=9<i01<9=:9`8941621i01?m9:9g8913e2=;019;l:538913c2=;019;j:538yv4?n3:1?v3=8g8210=::1>1=8k4=3;b>ad<uz8387>52z?1<1<6=<16>4?5489~w762290?w0<76;:a?84693;>o63=dd8;f>;5k>03n6s|33494??|5;2=65m4=0a0>06<5:996<;l;<345?>e348h;76l;<66f?5?34>>o7=7;<66`?5?34>>i7=7;|q1<3<72;q6>585147897?62mh0q~?67;290~;4<<03n63>a3821f=:;0314h523909<`=z{:lo6=47{<171?>d3498n7;>;<63<?72k27:5>47c:?71g<5i27?9n4=a:?71a<5i27?9h4=a:p713=839p1>:::076?854j3;>i63<518gf>{t;:h1<7=t=21a>4323498o7:6;<166?2>3ty:544?:5y>711=0k16=l=514a896?>21i01>6=:9a8yv5an3:15v3<468;g>;4;j0>=63;08821f=:90914o521809<f=:<<h1>i5244a96a=:<<n1>i5244g96a=z{:><6=4<{<173?72=278?n4>5d9>704=lk1v>=l:180854k3;>963<3e87=>;4=:0?56s|18c94?2|5:>365l4=0c6>43d3492m76j;<1;7?>b3ty?<=4?:8y>71>=0j16?>j5509>05d=9<i01<7=:9`894?621i019;m:3g8913d2;o019;k:3g8913b2;o0q~=;8;297~;4<10:985232f950c<5:?86il4}r10`?6=;r78?i4>549>76c=<016?8:5489~w4?e290?w0=;9;:a?87f>3;>o63<9`8;g>;40:03o6s|41394??|5:>265m4=21f>07<5=:h6<;l;<3:5?>e34;2<76l;<66f?4a34>>o7<i;<66`?4a34>>i7<i;|q00<<72:q6?9751478965b28?n70=:4;fa?xu4;l0;6>u232g9503<5:9m6974=276>1?<uz>;>7>59z?00d<?j278?k4:1:?74a<6=j16=4>58c9>5=`=0j1688l5319>00e=;91688j5319>00c=;91v<7l:187853i32h70?n7;36g>;41k03i63<858;a>{t;=k1<7=t=26b>4323498j7?:e:?010<cj2wx?>h50;1x965a28?>70=;0;6:?852>3>27p};0283><}:;=h14o52352914=:<9o1=8m4=0:e>=d<582n65m4=57a>67<5=?h6>?4=57g>67<5=?n6>?4}r3:`?6=<r788o47c:?2e=<6=j16?4l58b9>7=2=0j1v>:m:180853j3;>963<41821`=:;<<1ho5rs263>5<4s49?<7?:5:?004<312789:4;9:p052=833p1>:l:9`896262<;019>i:07`?87?m32i70?7d;:`?822j39970::c;11?822l39970::e;11?xu61l0;69u235a9<f=:9h31=8m4=2;`>=c<5:2>65k4}r17g?6=;r788n4>549>717=9<o01>;8:e`8yv5393:1?v3<408210=:;=81845234:90<=z{=:>6=46{<17`?>e349?>7;>;<624?72k27:4i47b:?2<f<?k27?9o4<3:?71f<4;27?9i4<3:?71`<4;2wx=4h50;6x962c21i01<on:07`?85>k32h70=75;:`?xu4<m0;6>u235f9503<5:>96<;j;<16<?be3ty88?4?:2y>714=9<?01>:<:5;8963>2=30q~:?6;29=~;4<l03n63<42865>;3980:9n5219a9<g=:91h14n5244`971=:<<i1?95244f971=:<<o1?95rs0c3>5<3s49?i76l;<3bf?72k2785i47e:?0<3<?m2wx?9k50;1x962b28?>70=;3;36a>;4=00on6s|35194?5|5:>86<;:;<170?2>349>m7:6;|q742<720q6?9h58c9>712==8168<<514a894>e21h01<6n:9a8913e2:?019;l:278913c2:?019;j:278yv7f93:18v3<4g8;g>;6ij0:9n5238f9<f=:;1<14n5rs26e>5<4s49?j7?:5:?001<6=l16?8o5dc9~w6232909w0=;4;361>;4=80?56s|3gg94?>|5:>=65l4=313>06<5=:j6<;l;<3;e?>e34>>n7<l;<66g?4d34>>h7<l;<66a?4d3ty:554?:5y>710=0j16=l:514a896?b21i01>68:9a8yv53>3:1>v3<478210=:;<;1ho5rs3`6>5<5s48in7:6;<0ae?72=2wx>n?50;0x97de28?n70<l7;361>{t:ml1<7<t=3`a>432348n?76k;|q1f1<72;q6>oo5489>6g?=9<?0q~<l0;296~;5jh0:9h522b49503<uz8i?7>52z?1f<<31279n54>549~w7da2909w0<m9;36a>;5k<0:985rs3`1>5<5s48i47:6;<0a3?72=2wx>ok50;0x97d?28?n70<l4;361>{t:k;1<7<t=3`4>1?<5;h=6<;:;|q1fa<72;q6>o9514g897e428?>7p}=bb83>7}::k<1=8k4=3a1>4323ty9on4?:3y>6a4=<016>i?51478yv4c03:1>v3=d3821`=::mo1=8;4}r0f4?6=:r79h?4>549>6`5=0k1v?mm:18184c93>270<k0;361>{t:m=1<7<t=3f2>43b348oh7?:5:p6fg=838p1?j?:5;897ea28?>7p}=d783>7}::m:1=8k4=3f`>4323ty9o44?:3y>6f`=<016>nk51478yv4c=3:1>v3=cg821`=::mh1=8;4}r0`<?6=:r79oh4;9:?1ga<6=<1v?j;:18184dm3;>i63=d`8210=z{;n86=4={<0``?72m279h44>549~w6122909w0=8b;6:?850i3;>96s|39394?4|5:=i6<;j;<1;3?72=2wx?4h50;0x961e28?>70=n4;:g?xu4?=0;6?u236c90<=:;>31=8;4}r1;4?6=:r78;l4>5d9>7=0=9<?0q~=83;296~;4?00?563<798210=z{:=m6=4={<14=?72m278484>549~w6152909w0=88;6:?850?3;>96s|36g94?4|5:=36<;j;<1;0?72=2wx?:?50;0x96102=301>99:076?xu4?m0;6?u2365950c<5:286<;:;|q03f<72;q6?:8514g896>528?>7p}<8b83>7}:;08184523839503<uz9247>52z?0=7<6=l16?4k51478yv5f83:1>v3<938210=:;h>14h5rs2:a>5<5s492=7:6;<1:4?72=2wx?4950;0x96?628?n70=6d;361>{t;1k1<7<t=2;3>1?<5:2m6<;:;|q0=3<72;q6?4>514g896?d28?>7p}<8883>7}:;1l1845239g9503<uz9297>52z?0<c<6=l16?4l51478yv5?03:1>v3<8d87=>;40m0:985rs2;7>5<5s493i7?:e:?0=d<6=<1v>7<:18185?l3;>i63<988210=z{8o86=49{<3b0?3734;nj7?:c:?223<?k27:::47c:?22=<?k27::n47c:p5db=838p1<ol:428940128?>7p}>ad83>1}:9hh19=521759503<58<265l4=04b>=d<uz;jj7>52z?2ed<2827::54>549~w4d72909w0?n9;73?87113;>96s|1c394?4|58k368>4=04b>4323ty:n?4?:7y>5d1==916=;j58b9>53c=0m16=:>58d9>5=6=0l16=;l51478yv7e;3:1>v3>a7864>;6>m0:985rs0`7>5<5s4;j97;?;<35a?72=2wx=o;50;0x94g42<:01<9?:076?xu58:0;6?u21`0915=:91:1=8;4}r064?6=>r79=<4:0:?11f<6=j16=5?58b9>5=?=0l16=:k58b9>5=4=0j1v??n:18184613?;70?71;361>{t:8h1<7<t=33;>06<58296<;:;|q167<72?q6><95519>5=5=0k16=5:58e9>5=0=0l16=575147894>221n0q~<>c;296~;59?0><63>828210=z{;;o6=4={<021?3734;387?:5:p64c=838p1??;:42894>228?>7p}=1g83>1}::8919=521959<f=:91<1=8;4=0:;>=b<uz89<7>52z?157<2827:4:4>549~w7462909w0<>0;73?87?03;>96s|21094?4|5;:m68>4=05g>4323ty9?l4?:3y>60e==916>98514a8yv43;3:1>v3=65864>;5<l0:9n5rs37:>5<2s48=87?:c:?2<4<?j27:4447d:?23`<?j27:4?47b:p614=838p1?8<:428972c28?h7p}=5983>1}::?91=8m4=0::>=e<582965j4=05`>=e<uz8?=7>52z?127<282798n4>5b9~w7302908w0<92;36g>;60003n63>7b8;f>{t:=:1<7<t=342>06<5;>i6<;l;|q113<72?q6>;?514a894>421i01<6;:9a894>121i01<6::9a8941d21o0q~<<f;296~;5>90><63=4`821f=z{;?>6=4:{<054?72k27:4947b:?2<3<?j27:4847b:?23f<?l2wx>>k50;0x973a2<:01?:6:07`?xu5==0;69u224d950e<58=i65m4=0:6>=c<58=o65j4}r00`?6=:r799h4:0:?10=<6=j1v?;<:180842m3;>o63>7c8;f>;6?o03n6s|22a94?4|5;?o68>4=364>43d3ty99?4?:5y>60b=9<i01<68:9`894>?21i01<9i:9a8yv44j3:1>v3=5c864>;5<<0:9n5rs372>5<4s48>n7?:c:?2<=<?j27:;k47d:p66?=838p1?;n:428972328?h7p}=4g83>7}::<k1=8m4=05f>=b<uz;hh7>52z?2ac<2827:h44>5b9~w4b12909w0?i7;73?87b93;>o6s|1da94?3|58l<6<;l;<352?>e34;=;76m;<35f?>e34;=476m;|q2`0<72;q6=k85519>5`6=9<i0q~?jb;290~;6n?0:9n521759<a=:9?h14n5217:9<a=z{8n?6=4={<3e1?3734;oj7?:c:p5`g=83?p1<h::07`?871132h70?9a;:`?871032n70?9c;:g?xu6l:0;6?u21g6915=:9mo1=8m4}r3f=?6=<r7:j94>5b9>53?=0m16=;o58e9>53e=0l1v<j=:18187a;3?;70?kd;36g>{t9l21<7=t=0d0>43d34;=m76j;<35f?>c3ty:h<4?:3y>5c4==916=im514a8yv7b?3:1>v3>f3821f=:9?i14o5rs0f3>5<5s4;m=7;?;<3gf?72k2wx=h850;7x94`628?h70?9d;:a?871m32h70?80;:g?87?832h7p}>cg83>7}:9o:19=521ec950e<uz;n97>54z?2b5<6=j16=;k58c9>526=0j16=5>58c9~w4eb2909w0?je;73?87c03;>o6s|1d694?5|58on6<;l;<344?>e34;=j76m;|q2gf<72;q6=hj5519>5a1=9<i0q~?j2;296~;6mm0:9n5217d9<f=z{;8?6=4={<072?373488<7?:c:p67b=838p1?:j:428975?28?h7p}=2b83>7}::=n19=52225950e<uz89n7>52z?10f<28279?;4>5b9~w74f2909w0<;b;73?844=3;>o6s|23;94?4|5;>j68>4=317>43d3ty9>54?:3y>61?==916>>=514a8yv45?3:1>v3=49864>;5;;0:9n5rs305>5<5s48?;7;?;<005?72k2wx>?;50;0x97222<:01?<i:07`?xu5::0;6?u2256915=::;o1=8m4}r3a3?6=:r7:h44:0:?2g6<6=j1v<m?:18187b93?;70?lb;36g>{t9kl1<7<t=0g3>06<58ij6<;l;|q2f`<72;q6=ih5519>5f?=9<i0q~?md;296~;6ll0><63>c9821f=z{8hh6=4={<3g`?3734;h;7?:c:p5gd=838p1<jl:42894e128?h7p}>b`83>7}:9mh19=521b7950e<uz;i57>52z?2`d<2827:o94>5b9~w4d?2909w0?k8;73?87d:3;>o6s|1c494?4|58n<68>4=0a2>43d3ty:j54?:3y>5fd==916=:?51478yv7a13:1>v3>c`864>;6?;0:985rs0db>5<5s4;h57;?;<347?72=2wx=kl50;0x94e?2<:01<9;:076?xu6nj0;6?u21b5915=:9>?1=8;4}r3e`?6=:r7:o;4:0:?233<6=<1v<hj:18187d=3?;70?87;361>{t9ol1<7<t=0a7>06<58=36<;:;|q145<72;q6=n<5519>52?=9<?0q~<?1;296~;6k80><63>7`8210=z{;<>6=4={<00<?3734;3m7?:5:p630=838p1?=8:42894>e28?>7p}=6683>7}:::<19=5219a9503<uz8=47>52z?170<2827:4i4>549~w70>2909w0<<4;73?87?m3;>96s|27c94?4|5;9868>4=0:e>4323ty9:o4?:3y>664==916=4>51478yv41k3:1>v3=30864>;6180:985rs34g>5<5s489j7;?;<3:6?72=2wx>;k50;0x974b2<:01<7<:076?xu3=o0;6<mt=23`>11<5:8?6994=201>11<5:8:6994=200>11<5:;m6994=23f>11<5:8;6994=23a>11<5:;j6994=23g>11<5:996994=21b>11<5:926994=21;>11<5:9<6994=215>11<5:9>6994=217>11<5:986994=212>11<5:9;6994=34e>432348n?76l;<66f?1a34>>o79i;<66`?1a34>>i79i;|q1a3<72;q6?<m5519>752=9<?0q~=>0;290~;49j0:9n52320915=::mo14n523179<g=z{;on6=4={<110?37349;i7?:5:p74?=83>p1><;:07`?854i3?;70<kd;:a?857:32i7p}=eb83>7}:;;819=5231a9503<uz9:;7>54z?067<6=j16?>65519>6ae=0k16>kk58c9~w7ce2909w0==1;73?857j3;>96s|30494?2|5:8:6<;l;<103?37348oo76k;<0eg?>e3ty9ii4?:3y>775==916?=j51478yv5603:18v3<22821f=:;:319=522ef9<a=:;9:14o5rs3g:>5<5s49:j7;?;<13=?72=2wx?<:50;6x967a28?h70=<5;73?84cj32o70<i8;:a?xu5m10;6?u230g915=:;921=8;4}r127?6=<r78=h4>5b9>762==916>io58c9>6c0=0k1v?kn:18185583?;70=?a;361>{t;8?1<7:t=203>43d3498:7;?;<0gf?>e348mm76m;|q1a0<72;q6?<l5519>750=9<?0q~=>1;290~;49k0:9n52323915=::m314o522g09<g=z{;o?6=4={<12e?37349;?7?:5:p75`=83>p1>?n:07`?85483?;70<k9;:g?84a832i7p}=e683>7}:;8n19=523159503<uz9:>7>54z?05a<6=j16?>=5519>6ag=0m16>k:58c9~w6662909w0=?4;6:?85793;>96s|31794?4|5::?6il4=226>4323ty9jk4?:2y>75c=<016?=?5489>6c`=9<?0q~=?2;297~;48l0on63<00821`=:;981=8;4}r0e`?6=;r78<i4;9:?1bc<31279ji4>549~w6672908w0=?d;fa?84an3;>i63<018210=z{;li6=4<{<13g?2>348mh7:6;<0ef?72=2wx>kk50;1x966d2mh01?hk:07f?84am3;>96s|2g;94?5|5::i6974=3da>1?<5;l26<;:;|q1bf<72:q6?=l5dc9>6cd=9<o01?hl:076?xu5n>0;6>u231c90<=::o3184522g59503<uz8mm7>53z?04d<cj279j44>5d9>6cg=9<?0q~<i5;297~;4800?563=f687=>;5n<0:985rs3d;>5<4s49;57jm;<0e3?72m279j54>549~w7`42908w0=?8;6:?84a=3>270<i3;361>{t:o<1<7=t=22;>ad<5;l>6<;j;<0e2?72=2wx>k?50;1x96602=301?h<:5;897`628?>7p}=f583>6}:;9=1ho522g1950c<5;l?6<;:;|q1ac<72:q6?=85489>6c7=<016>hh51478yv4a:3:1?v3<078gf>;5n80:9h522g09503<uz8m<7>53z?046<cj279ik4>5d9>6c6=9<?0q~<85;296~;5?=0><63=778210=z{;=?6=49{<040?72k279;>47c:?13d<?l279;;47d:?135<?l279:k47e:p624=838p1?9>:428971428?>7p}=7083>3}::>;1=8m4=350>=d<5;=j65m4=355>=e<5;=;65m4=34e>=b<uz8<57>53z?13=<28279;:4:0:?13d<6=<1v?98:181840?3;>o63=7`8;f>{t<?;1<7<9{<1ga?20349n:7:8;<1f0?20349n?7:8;<1f1?20349n=7:8;<1f4?20349n>7:8;<1g`?20349oo7:8;<1gb?20349m97:8;<1e6?20349m?7:8;<1e<?20349m:7:8;<1e3?20349mn7:8;<1e=?20349mm7:8;<1eg?20349m87:8;<63e?2034>:>7:8;<625?2034>:<7:8;<63b?2034>;i7:8;<63`?2034>;o7:8;<63f?2034>;57:8;<63<?20349j97?:5:?71g<3?11688m546:8913c2==370::e;64<>{t;h21<7<t=2ff>06<5:i=6<;:;|q0`7<72=q6?ik514a896`32<:01>7j:9`896e021h0q~=m0;296~;4m?0><63<d18210=z{:ni6=4;{<1f2?72k278jn4:0:?0=a<?j278o947b:p7dc=838p1>k;:42896eb28?>7p}<d883>1}:;l>1=8m4=2db>06<5:3h65l4=2a3>=d<uz9jh7>52z?0a6<28278oi4>549~w6b?290?w0=j3;36g>;4n00><63<9b8;`>;4jl03n6s|3`d94?4|5:o>68>4=2ae>4323ty8hl4?:5y>7`3=9<i01>hm:42896?c21n01>m=:9`8yv5fj3:1>v3<e0864>;4kk0:985rs2f5>5<3s49n=7?:c:?0b2<282785o47d:?0fd<?j2wx?lo50;0x96c72<:01>mn:076?xu4l<0;69u23d2950e<5:l=68>4=2;b>=d<5:h365l4}r1bg?6=:r78i?4:0:?0gf<6=<1v>j8:18785b:3;>o63<f9864>;41k03n63<bb8;f>{t;h=1<7<t=2fg>06<5:i36<;:;|q0`6<72=q6?ij514a896`42<:01>76:9`896d321h0q~=n6;296~;4lj0><63<c48210=z{:n:6=4;{<1gg?72k278j?4:0:?0=<<?l278n?47b:p7d?=838p1>ji:42896e>28?>7p}<d583>1}:;ml1=8m4=2d6>06<5:3j65j4=2`5>=d<uz9h?7>52z?0g3<31278o>4>549~w6e02909w0=l6;fa?85d?3;>96s|3b394?5|5:n;6974=2a0>1?<5:i:6<;:;|q0g1<72:q6?i>5dc9>7f5=9<o01>m;:076?xu4jo0;6>u23bd90<=:;j;184523cd9503<uz9h>7>53z?0gc<cj278o<4>5d9>7f4=9<?0q~=md;297~;4kl0?563<bg87=>;4jm0:985rs2a3>5<4s49hi7jm;<1ab?72m278o=4>549~w6de2908w0=ld;6:?85el3>270=mb;361>{t;ko1<7=t=2ag>ad<5:ho6<;j;<1aa?72=2wx?o750;1x96ed2=301>lm:5;896d>28?>7p}<bb83>6}:;ji1ho523c`950c<5:hh6<;:;|q0f2<72:q6?nl5489>7g?=<016?o951478yv5ei3:1?v3<cc8gf>;4j00:9h523cc9503<uz9i97>53z?0gd<31278n:4;9:?0f0<6=<1v>l7:18085di3ni70=m7;36a>;4j10:985rs2`0>5<4s49h57:6;<1a1?2>349i?7?:5:p7g0=839p1>m6:e`896d228?n70=m6;361>{t;k;1<7=t=2a;>1?<5:h86974=2`2>4323ty8n94?:2y>7f>=lk16?o=514g896d328?>7p}<b383>6}:;j?1ho523c3950c<5:h96<;:;|q0ad<72:q6?k;514a8916e2<:01>6<:9f8yv5b?3:1?v3<f3821f=:<9219=523909<a=z{:o26=4<{<1e7?72k27?<44:0:?0<7<?j2wx?hj50;1x96`?28?h70:?e;73?85?<32i7p}<ec83>6}:;o<1=8m4=52`>06<5:2865l4}r1fg?6=;r78j:4>5b9>05b==916?5:58e9~w6`72908w0=ib;36g>;3980><63<878;`>{t;lo1<7=t=2d:>43d34>;j7;?;<1;1?>c3ty8ik4?:2y>7cg=9<i019??:42896>221h0q~=i1;297~;4nj0:9n52400915=:;1<14o5rs2g;>5<4s49m87?:c:?74d<282784:47b:p036=838>w0:<0;64?825n3><70:=e;64?825l3><70:=c;64?825j3><70:=9;64?82503><70:=7;64?825>3><70:=5;64?825<3><70:=3;64?825:3><70:=1;64?82583><70:>e;64?826l3><70:>c;64?826j3><70:>a;64?82613><70:>8;64?826?3><70:>6;64?826=3><70:<6;64?824=3><70:<4;64?824;3><70:<2;64?82493><70:=a;64?826n3><70:>4;64?826;3><70<80;361>{t<<91<7<t=513>06<5=?n6:j4}r666?6=:r7?>k4:0:?71`<012wx88?50;0x914b2<:019;j:658yv2283:1>v3;2e864>;3=l0<:6s|45d94?4|5=8h68>4=57f>23<uz>?i7>52z?76g<2827?9h484:p01e=838p19<6:428913b2>90q~:;b;296~;3:10><63;5d846>{t<=k1<7<t=504>06<5=?n6:?4}r67=?6=:r7?>;4:0:?71a<0l2wx89650;0x91422<:019;k:6;8yv23?3:1>v3;25864>;3=m0<;6s|45494?4|5=8868>4=57g>20<uz>?97>52z?767<2827?9i485:p012=838p19<>:428913c2>>0q~:;3;296~;3:90><63;5e847>{t<=;1<7<t=53f>06<5=?o6:<4}r674?6=:r7?=i4:0:?71a<092wx8>h50;0x917d2<:019;l:6f8yv24m3:1>v3;1c864>;3=j0<56s|42f94?4|5=;j68>4=57`>21<uz>8o7>52z?75<<2827?9n486:p06d=838p19?7:428913d2>?0q~:<a;296~;39>0><63;5b840>{t<:31<7<t=535>06<5=?h6:=4}r60<?6=:r7?=84:0:?71f<0:2wx88o50;0x91512<:019;l:638yv2213:1>v3;34864>;3=k0<h6s|44:94?4|5=9?68>4=57a>2?<uz>>;7>52z?776<2827?9o487:p000=838p19==:428913e2><0q~::5;296~;3;80><63;5c841>{t<<>1<7<t=50b>06<5=?i6::4}r67`?6=:r7?=k4:0:?71g<0;2wx89<50;0x91732<:019;m:608yv24?3:1>v3;12864>;3=k0<=6s|18694?4|58=i6<;:;<3;2?>c3ty:8o4?:3y>5=6=0m16=;h5db9~w4?22909w0?8e;361>;6?m03o6s|15a94?4|58<i65k4=04`>ae<uz;?h7>52z?23c<6=<16=:j58d9~w4?12909w0?8d;:a?870k3nh7ps|4e`94?4|V=h<70:<:5`4?!20<3;?i6s|4e;94?4|V=h=70:<:5`5?!20<3;?j6s|4e:94?4|V=h>70:<:5`6?!20<3;><6s|4e594?4|V=h?70:<:5`7?!20<3;>=6s|4e494?4|V=h870:<:5`0?!20<3oj7p};d483>7}Y<k8019=54c08 1132ln0q~:k3;296~X3j9168>4;b19'022=n81v9j=:181[2fn27??7:nf:&731<a;2wx8i?50;0xZ1gb34>869oj;%640?`b3ty?h=4?:3y]0db<5=918lj4$557>46>3ty?ok4?:3y]0de<5=918lm4$557>4733ty?oh4?:3y]0dd<5=918ll4$557>47d3ty?oi4?:3y]0dg<5=918lo4$557>4413ty?on4?:3y]0d?<5=918l74$557>44a3ty?oo4?:3y]0d><5=918l64$557>4523ty?ol4?:3y]0d1<5=918l94$557>4513ty?o54?:3y]0d3<5=918l;4$557>4503ty?o:4?:3y]0d2<5=918l:4$557>45?3ty?o;4?:3y]0d5<5=918l=4$557>45>3ty?o84?:3y]0d4<5=918l<4$557>45f3ty?o94?:3y]0d7<5=918l?4$557>45e3ty?o>4?:3y]0d6<5=918l>4$557>45d3ty?o?4?:3y]0<`<5=9184h4$557>45c3ty?o<4?:3y]0<c<5=9184k4$557>45b3ty?o=4?:3y]0<b<5=9184j4$557>45a3ty?nk4?:3y]0<e<5=9184m4$557>4273ty?i?4?:3y]0gb<5=918oj4$557>4263ty?i<4?:3y]0ge<5=918om4$557>4253ty?i=4?:3y]0gd<5=918ol4$557>4243ty?hk4?:3y]0gg<5=918oo4$557>4233ty?hh4?:3y]0g?<5=918o74$557>4223ty?hi4?:3y]0g><5=918o64$557>4213ty?hn4?:3y]0g7<5=918o?4$557>4203ty?h94?:3y]0d0<5=918l84$557>42?3ty?o44?:3y]0<d<5=9184l4$557>42>3ty?nh4?:3y]0<g<5=9184o4$557>42f3ty>4<4?:3y]1=7<5=9195?4$557>`d<uz?257>52z\6=<=:<:0>545+4669af=z{<3i6=4={_7:f>;3;3?2n6*;758fa>{t=h91<7<t^4c0?8242<k87):84;ge?xu2jk0;6?uQ5c`8915==kh0(99;:g28yv35<3:1>vP:019>06<2891/8::5f39~w0452909wS:if:?77?2an2.?;94i4:p177=838pR9hj;<60>1`b3-><87h:;|q665<72;qU8kj4=5190cb<,==?6k84}r72b?6=:rT?jn524287bf=#<>>1j:5rs43f>5<5sW>mn63;3;6ef>"3?=0m46s|50a94?4|V=l270:<:5d:?!20<3l27p}:1c83>7}Y<o2019=54g:8 1132ok0q~;>a;296~X3n>168>4;f69'022=nk1v8?6:181[2a>27??7:i6:&731<ak2wx9<650;0xZ1`234>869h:;%640?`c3ty>=:4?:3y]0c2<5=918k:4$557>c`<uz?::7>52z\7b6=:<:0?j>5+4669556<uz?:97>52z\7b7=:<:0?j?5+4669557<uz?:87>52z\7b4=:<:0?j<5+4669554<uz?:?7>52z\7b5=:<:0?j=5+4669555<uz?:=7>52z\7a`=:<:0?ih5+4669552<uz?:<7>52z\7aa=:<:0?ii5+4669553<uz?;j7>52z\7af=:<:0?in5+4669550<uz?;i7>52z\7ag=:<:0?io5+4669551<uz?;h7>52z\7ad=:<:0?il5+466955><uz?;o7>52z\7a<=:<:0?i45+466955g<uz?;n7>52z\7a==:<:0?i55+466955d<uz?;m7>52z\7a2=:<:0?i:5+466955e<uz?;57>52z\7a3=:<:0?i;5+466955b<uz?;47>52z\7a0=:<:0?i85+466955c<uz?9n7>52z\643=:<:0><;5+466955`<uz?9m7>52z\640=:<:0><85+4669546<uz?957>52z\641=:<:0><95+4669547<uz?947>52z\646=:<:0><>5+4669544<uz?9;7>52z\647=:<:0><?5+4669545<uz?9:7>52z\644=:<:0><<5+4669543<uz?997>52z\7bd=:<:0?jl5+4669540<uz?:h7>52z\7ac=:<:0?ik5+4669541<uz?:>7>52z\7a1=:<:0?i95+466954><uz?;;7>52z\7a6=:<:0?i>5+466954?<uz?9h7>52z\66a=:<:0>>i5+466954g<uz?8?7>52z\676=:<:0>?>5+466954d<uz?3j7>52z\6<1=:<:0>495+466954b<uz?247>52z\6<f=:<:0>4n5+466954c<uz?2;7>52z\6<g=:<:0>4o5+466954`<uz?2:7>52z\6<d=:<:0>4l5+4669576<uz?297>52z\6<<=:<:0>445+4669577<uz?287>52z\6<==:<:0>455+4669574<uz?2?7>52z\6<2=:<:0>4:5+4669575<uz?2>7>52z\6<3=:<:0>4;5+4669572<uz?2=7>52z\6<0=:<:0>485+4669573<uz?2<7>52z\6<6=:<:0>4>5+4669571<uz?3h7>52z\6<7=:<:0>4?5+466957><uz?i=7>52z\6e3=:<:0>m;5+466957?<uz?im7>52z\6e`=:<:0>mh5+466957g<uz?i57>52z\6ea=:<:0>mi5+466957d<uz?i47>52z\6ef=:<:0>mn5+466957e<uz?i;7>52z\6eg=:<:0>mo5+466957b<uz?i:7>52z\6ed=:<:0>ml5+466957c<uz?i97>52z\6e<=:<:0>m45+4669566<uz?i87>52z\6e==:<:0>m55+4669567<uz?i?7>52z\6e2=:<:0>m:5+4669564<uz?i>7>52z\6e0=:<:0>m85+4669565<uz?jj7>52z\6e1=:<:0>m95+4669562<utdhio4?:3yK023<ugino7>52zJ730=zfjoo6=4={I641>{iklo1<7<tH556?xhdmo0;6?uG4678ykea83:1>vF;749~jf`62909wE:85:mgc4=838pD99:;|l`b6<72;qC8:;4}oae0?6=:rB?;85rnbd6>5<5sA><96sacg494?4|@==>7p`lf683>7}O<>?0qcmi8;296~N3?<1vbnh6:181M20=2weoko50;0xL1123tdhjo4?:3yK023<ugimo7>52zJ730=zfjlo6=4={I641>{ikoo1<7<tH556?xhdno0;6?uG4678ykb783:1>vF;749~ja662909wE:85:m`54=838pD99:;|lg46<72;qC8:;4}of30?6=:rB?;85rne26>5<5sA><96sad1494?4|@==>7p`k0683>7}O<>?0qcj?8;296~N3?<1vbi>6:181M20=2weh=o50;0xL1123tdo<o4?:3yK023<ugn;o7>52zJ730=zfm:o6=4={I641>{il9o1<7<tH556?xhc8o0;6?uG4678ykb683:1>vF;749~ja762909wE:85:m`44=838pD99:;|lg56<72;qC8:;4}of20?6=:rB?;85rne36>5<5sA><96sad0494?4|@==>7p`k1683>7}O<>?0qcj>8;296~N3?<1vbi?6:181M20=2weh<o50;0xL1123tdo=o4?:3yK023<ugn:o7>52zJ730=zfm;o6=4={I641>{il8o1<7<tH556?xhc9o0;6?uG4678ykb583:1>vF;749~ja462909wE:85:m`74=838pD99:;|lg66<72;qC8:;4}of10?6=:rB?;85rne06>5<5sA><96sad3494?4|@==>7p`k2683>7}O<>?0qcj=8;296~N3?<1vbi<6:181M20=2weh?o50;0xL1123tdo>o4?:3yK023<ugn9o7>52zJ730=zfm8o6=4={I641>{il;o1<7<tH556?xhc:o0;6?uG4678ykb483:1>vF;749~ja562909wE:85:m`64=838pD99:;|lg76<72;qC8:;4}of00?6=:rB?;85rne16>5<5sA><96sad2494?4|@==>7p`k3683>7}O<>?0qcj<8;296~N3?<1vbi=6:181M20=2weh>o50;0xL1123tdo?o4?:3yK023<ugn8o7>52zJ730=zfm9o6=4={I641>{il:o1<7<tH556?xhc;o0;6?uG4678ykb383:1>vF;749~ja262909wE:85:m`14=838pD99:;|lg06<72;qC8:;4}of70?6=:rB?;85rne66>5<5sA><96sad5494?4|@==>7p`k4683>7}O<>?0qcj;8;296~N3?<1vbi:6:181M20=2weh9o50;0xL1123tdo8o4?:3yK023<ugn?o7>52zJ730=zfm>o6=4={I641>{il=o1<7<tH556?xhc<o0;6?uG4678ykgcj3:1=vF;749~jg27290:wE:85:mf17=83;pD99:;|la07<728qC8:;4}o`77?6=9rB?;85rnc67>5<6sA><96sab5794?7|@==>7p`m4783>4}O<>?0qcl;7;295~N3?<1vbo:7:182M20=2wen9750;3xL1123tdi8l4?:0yK023<ugh?n7>51zJ730=zfk>h6=4>{I641>{ij=n1<7?tH556?xhe<l0;6<uG4678ykd3n3:1=vF;749~jg37290:wE:85:mf07=83;pD99:;|la17<728qC8:;4}o`67?6=9rB?;85rnc77>5<6sA><96sab4794?7|@==>7p`m5783>4}O<>?0qcl:7;295~N3?<1vbo;7:182M20=2wen8750;3xL1123tdi9l4?:0yK023<ugh>n7>51zJ730=zfk?h6=4>{I641>{ij<n1<7?tH556?xhe=l0;6<uG4678ykd2n3:1=vF;749~jg07290:wE:85:mf37=83;pD99:;|la27<728qC8:;4}o`57?6=9rB?;85rnc47>5<6sA><96sab7794?7|@==>7p`m6783>4}O<>?0qcl97;295~N3?<1vbo87:182M20=2wen;750;3xL1123tdi:l4?:0yK023<ugh=n7>51zJ730=zfk<h6=4>{I641>{ij?n1<7?tH556?xhe>l0;6<uG4678ykd1n3:1=vF;749~jg17290:wE:85:mf27=83;pD99:;|la37<728qC8:;4}o`47?6=9rB?;85rnc57>5<6sA><96sab6794?7|@==>7p`m7783>4}O<>?0qcl87;295~N3?<1vbo97:182M20=2wen:750;3xL1123tdi;l4?:0yK023<ugh<n7>51zJ730=zfk=h6=4>{I641>{ij>n1<7?tH556?xhe?l0;6<uG4678ykd0n3:1=vF;749~jg>7290:wE:85:mf=7=83;pD99:;|la<7<728qC8:;4}o`;7?6=9rB?;85rnc:7>5<6sA><96sab9794?7|@==>7p`m8783>4}O<>?0qcl77;295~N3?<1vbo67:182M20=2wen5750;3xL1123tdi4l4?:0yK023<ugh3n7>51zJ730=zfk2h6=4>{I641>{ij1n1<7?tH556?xhe0l0;6<uG4678ykd?n3:1=vF;749~jg?7290:wE:85:mf<7=83;pD99:;|la=7<728qC8:;4}o`:7?6=9rB?;85rnc;7>5<6sA><96sab8794?7|@==>7p`m9783>4}O<>?0qcl67;295~N3?<1vbo77:182M20=2wen4750;3xL1123tdi5l4?:0yK023<ugh2n7>51zJ730=zfk3h6=4>{I641>{ij0n1<7?tH556?xhe1l0;6<uG4678ykd>n3:1=vF;749~jgg7290:wE:85:mfd7=83;pD99:;|lae7<728qC8:;4}o`b7?6=9rB?;85rncc7>5<6sA><96sab`794?7|@==>7p`ma783>4}O<>?0qcln7;295~N3?<1vboo7:182M20=2wenl750;3xL1123tdiml4?:0yK023<ughjn7>51zJ730=zfkkh6=4>{I641>{ijhn1<7?tH556?xheil0;6<uG4678ykdfn3:1=vF;749~jgd7290:wE:85:mfg7=83;pD99:;|laf7<728qC8:;4}o`a7?6=9rB?;85rnc`7>5<6sA><96sabc794?7|@==>7p`mb783>4}O<>?0qclm7;295~N3?<1vbol7:182M20=2weno750;3xL1123tdinl4?:0yK023<ughin7>51zJ730=zfkhh6=4>{I641>{ijkn1<7?tH556?xhejl0;6<uG4678ykden3:1=vF;749~jge7290:wE:85:mff7=83;pD99:;|lag7<728qC8:;4}o``7?6=9rB?;85rnca7>5<6sA><96sabb794?7|@==>7p`mc783>4}O<>?0qcll7;295~N3?<1vbom7:182M20=2wenn750;3xL1123tdiol4?:0yK023<ughhn7>51zJ730=zfkih6=4>{I641>{ijjn1<7?tH556?xhekl0;6<uG4678ykddn3:1=vF;749~jgb7290:wE:85:mfa7=83;pD99:;|la`7<728qC8:;4}o`g7?6=9rB?;85rncf7>5<6sA><96sabe794?7|@==>7p`md783>4}O<>?0qclk7;295~N3?<1vboj7:182M20=2weni750;3xL1123tdihl4?:0yK023<ughon7>51zJ730=zfknh6=4>{I641>{ijmn1<7?tH556?xhell0;6<uG4678ykdcn3:1=vF;749~jgc7290:wE:85:mf`7=83;pD99:;|laa7<728qC8:;4}o`f7?6=9rB?;85rncg7>5<6sA><96sabd794?7|@==>7p`me783>4}O<>?0qclj7;295~N3?<1vbok7:182M20=2wenh750;3xL1123tdiil4?:0yK023<ughnn7>51zJ730=zfkoh6=4>{I641>{ijln1<7?tH556?xheml0;6<uG4678ykdbn3:1=vF;749~jg`7290:wE:85:mfc7=83;pD99:;|lab7<728qC8:;4}o`e7?6=9rB?;85rncd7>5<6sA><96sabg794?7|@==>7p`mf783>4}O<>?0qcli7;295~N3?<1vboh7:182M20=2wenk750;3xL1123tdijl4?:0yK023<ughmn7>51zJ730=zfklh6=4>{I641>{ijon1<7?tH556?xhenl0;6<uG4678ykdan3:1=vF;749~jf67290:wE:85:mg57=83;pD99:;|l`47<728qC8:;4}oa37?6=9rB?;85rnb27>5<6sA><96sac1794?7|@==>7p`l0783>4}O<>?0qcm?7;295~N3?<1vbn>7:182M20=2weo=750;3xL1123tdh<l4?:0yK023<ugi;n7>51zJ730=zfj:h6=4>{I641>{ik9n1<7?tH556?xhd8l0;6<uG4678yke7n3:1=vF;749~jf77290:wE:85:mg47=83;pD99:;|l`57<728qC8:;4}oa27?6=9rB?;85rnb37>5<6sA><96sac0794?7|@==>7p`l1783>4}O<>?0qcm>7;295~N3?<1vbn?7:182M20=2weo<750;3xL1123tdh=l4?:0yK023<ugi:n7>51zJ730=zfj;h6=4>{I641>{ik8n1<7?tH556?xhd9l0;6<uG4678yke6n3:1=vF;749~jf47290:wE:85:mg77=83;pD99:;|l`67<728qC8:;4}oa17?6=9rB?;85rnb07>5<6sA><96sac3794?7|@==>7p`l2783>4}O<>?0qcm=7;295~N3?<1vbn<7:182M20=2weo?750;3xL1123tdh>l4?:0yK023<ugi9n7>51zJ730=zfj8h6=4>{I641>{ik;n1<7?tH556?xhd:l0;6<uG4678yke5n3:1=vF;749~jf57290:wE:85:mg67=83;pD99:;|l`77<728qC8:;4}oa07?6=9rB?;85rnb17>5<6sA><96sac2794?7|@==>7p`l3783>4}O<>?0qcm<7;295~N3?<1vbn=7:182M20=2weo>750;3xL1123tdh?l4?:0yK023<ugi8n7>51zJ730=zfj9h6=4>{I641>{ik:n1<7?tH556?xhd;l0;6<uG4678yke4n3:1=vF;749~jf27290:wE:85:mg17=83;pD99:;|l`07<728qC8:;4}oa77?6=9rB?;85rnb67>5<6sA><96sac5794?7|@==>7p`l4783>4}O<>?0qcm;7;295~N3?<1vbn:7:182M20=2weo9750;3xL1123tdh8l4?:0yK023<ugi?n7>51zJ730=zfj>h6=4>{I641>{ik=n1<7?tH556?xhd<l0;6<uG4678yke3n3:1=vF;749~jf37290:wE:85:mg07=83;pD99:;|l`17<728qC8:;4}oa67?6=9rB?;85rnb77>5<6sA><96sac4794?7|@==>7p`l5783>4}O<>?0qcm:7;295~N3?<1vbn;7:182M20=2weo8750;3xL1123tdh9l4?:0yK023<ugi>n7>51zJ730=zfj?h6=4>{I641>{ik<n1<7?tH556?xhd=l0;6<uG4678yke2n3:1=vF;749~jf07290:wE:85:mg37=83;pD99:;|l`27<728qC8:;4}oa57?6=9rB?;85rnb47>5<6sA><96sac7794?7|@==>7p`l6783>4}O<>?0qcm97;295~N3?<1vbn87:182M20=2weo;750;3xL1123tdh:l4?:0yK023<ugi=n7>51zJ730=zfj<h6=4>{I641>{ik?n1<7?tH556?xhd>l0;6<uG4678yke1n3:1=vF;749~jf17290:wE:85:mg27=83;pD99:;|l`37<728qC8:;4}oa47?6=9rB?;85rnb57>5<6sA><96sac6794?7|@==>7p`l7783>4}O<>?0qcm87;295~N3?<1vbn97:182M20=2weo:750;3xL1123tdh;l4?:0yK023<ugi<n7>51zJ730=zfj=h6=4>{I641>{ik>n1<7?tH556?xhd?l0;6<uG4678yke0n3:1=vF;749~jf>7290:wE:85:mg=7=83;pD99:;|l`<7<728qC8:;4}oa;7?6=9rB?;85rnb:7>5<6sA><96sac9794?7|@==>7p`l8783>4}O<>?0qcm77;295~N3?<1vbn67:182M20=2weo5750;3xL1123tdh4l4?:0yK023<ugi3n7>51zJ730=zfj2h6=4>{I641>{ik1n1<7?tH556?xhd0l0;6<uG4678yke?n3:1=vF;749~jf?7290:wE:85:mg<7=83;pD99:;|l`=7<728qC8:;4}oa:7?6=9rB?;85rnb;7>5<6sA><96sac8794?7|@==>7p`l9783>4}O<>?0qcm67;295~N3?<1vbn77:182M20=2weo4750;3xL1123tdh5l4?:0yK023<ugi2n7>51zJ730=zfj3h6=4>{I641>{ik0n1<7?tH556?xhd1l0;6<uG4678yke>n3:1=vF;749~jfg7290:wE:85:mgd7=83;pD99:;|l`e7<728qC8:;4}oab7?6=9rB?;85rnbc7>5<6sA><96sac`794?7|@==>7p`la783>4}O<>?0qcmn7;295~N3?<1vbno7:182M20=2weol750;3xL1123tdhml4?:0yK023<ugijn7>51zJ730=zfjkh6=4>{I641>{ikhn1<7?tH556?xhdil0;6<uG4678ykefn3:1=vF;749~jfd7290:wE:85:mgg7=83;pD99:;|l`f7<728qC8:;4}oaa7?6=9rB?;85rnb`7>5<6sA><96sacc794?7|@==>7p`lb783>4}O<>?0qcmm7;295~N3?<1vbnl7:182M20=2weoo750;3xL1123tdhnl4?:0yK023<ugiin7>51zJ730=zfjhh6=4>{I641>{ikkn1<7?tH556?xhdjl0;6<uG4678ykeen3:1=vF;749~jfe7290:wE:85:mgf7=83;pD99:;|l`g7<728qC8:;4}oa`7?6=9rB?;85rnba7>5<6sA><96sacb794?7|@==>7p`lc783>4}O<>?0qcml7;295~N3?<1vbnm7:182M20=2weon750;3xL1123tdhol4?:0yK023<ugihn7>51zJ730=zfjih6=4>{I641>{ikjn1<7?tH556?xhdkl0;6<uG4678ykedn3:1=vF;749~jfb7290:wE:85:mga7=83;pD99:;|l``7<728qC8:;4}oag7?6=9rB?;85rnbf7>5<6sA><96sace794?7|@==>7p`ld783>4}O<>?0qcmk7;295~N3?<1vbnj7:182M20=2weoi750;3xL1123tdhhl4?:0yK023<ugion7>51zJ730=zfjnh6=4>{I641>{ikmn1<7?tH556?xhdll0;6<uG4678ykecn3:1=vF;749~jfc7290:wE:85:mg`7=83;pD99:;|l`a7<728qC8:;4}oaf7?6=9rB?;85rnbg7>5<6sA><96sacd794?7|@==>7p`le783>4}O<>?0qcmj7;295~N3?<1vbnk7:182M20=2weoh750;3xL1123tdhil4?:0yK023<utwvLMMtf739=d2>??nmqMNM{1CDU}zHI
\ No newline at end of file +$7134g<,[o}e~g`n;"2*413&;$>"9 > %10?*nhel%fmyz cnpfc`h(|dz$Sni fhdl[}jipV8@t>8P2bnh*kah92:87=>?4193456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0127?5650;1;495?8122?45<9'::86?>:HLSQQ<FLMXJ0<>50?37?47=AGZ^X7OKDS@?55<76;:0=<4FNQWW>uthoVof|ywPtipfwm:683:5>:5>1;KMTPR=x{elShctx]wlwct`Vkxh|{<0294;4038;1EC^ZT;rqkbYbey~rSyf}erj\j`af|l6:<7>11g925?OIX\^1|ah_gwohZrozlyc0<>50?05?47=AGZ^X7~}of]eqijX|axneQnsrgqp9772949:6?>:HLSQQ<wzfmTjxbc_ujqavnXflmjxh2>0;2=5d=6:3E^X][[:ecweZeh}g~7=<4?>0f857<H]]Z^X7|k_ecweZeh}g~7=<4?>0f857<H]]Z^X7y}_ecweZeh}g~7=<4?>0385?OIX\^1HD^N<183:47<93CE\XZ5DHRA85<76880=7AZTQWW>AIWI5:1<3?=;08LQQVR\3ND\O2?:1<2?72<:9:;>6<74:1355753:<1EC^ZT;fjj952294:86=9:NWWTPR=lf0>;50?f87v4789ll888"50970>2DKJ>099;:1:47?36D8;1=>9599847?3?F9;1=O959CBA1?3C53>L?7:HIF09;6>>7<22;<=<48333?=<NFY__6IGN<683:46<03CE\XZ5DH@?3?6998136B[[PTV9@JG;?3:5=<57:NWWTPR=LFH7;7>11:;7?<671;12:95667;7?D650=1J:LO7;@FGVD:76k1JHI\N<0294;?<IMNYM1??>99B@ATF48437LJKR@>1:==FLMXJ0>07;@FGVD:3611JHI\N<4<;?DBCZH6=255NDEPB828?3HNO^L27>99B@ATF40437LJKRC>3:g=FLMXI0<>50?;8EABUJ5;;255NDEPA848?3HNO^O2=>99B@ATE4:437LJKRC>7:==FLMXI0807;@FGVG:1611JHI\M<6<;?DBCZK63255NDEPA8<833HO;845NSXL@[WC@<2H84=:4B@CB7>DR:11IY^QFNGM2?F4<K?>0OL6N2:AF57=D@LI@SAGLEOQF[Q_WM;1HE95LLJC7?FJLJ:1H@_74CNONMQRBL8>0OB\J_FGMAWGSAFDTECH@7:AQADRBL81O>6JF6:FJE969>2NBM1?16:FJE949>2NBM1=16:FJE929>2NBM1;16:FJE90902NBM1950?48@LG;?7<0HDL30?48@LD;97<0HDL32?48@LD;;7<0HDL34?48@LD;=7<0HDL36?:8@LD;?3:5:6JFB=5==>BNXH6;6=08;EKSE96912NB\O2?:1<4?AOWJ5:5:6J@A=2=2>BHI5;5:6J@A=0=2>BHI595:6J@A=6=2>BHI5?5:6J@A=4=<>BHI5=1<384DNC?3;0<LFH7<384DN@?5;0<LFH7>384DN@?7;0<LFH78384DN@?1;0<LFH7:364DN@?3?69>2NDN1919:FLTD:7294<7IA_A=2==>BHXK6;6=08;EMSF96992O?7HMN029FJD5<MGH?7K9IF39E<7=AL:1MHN:4FEAF0>@CKY90JI^;;GFSA0=Aieyn=6I<;FLG5>O53@:97D?=;H01?L5?3@DBX]Q?099JJLRWW9;37D@FTQ]36==NF@^[S==7;HLJPUY7<11BBDZ__17;?LHN\YU;:55FNHVS[51>3@DBX^ZNTD58MKOSW9:<7D@FT^223>OIA]U;>:5FNHV\461<AGC_S=:8;HLJPZ62?2CEEYQ?669JJLRX8>=0ECG[_1:4?LHN\V:2;6GAIU]3E2=NF@^T<O94IOKW[5E03@DBXR>K7:KMMQY7M>1BBDZP0G58MKOSW8:<7D@FT^323>OIA]U:>:5FNHV\561<AGC_S<:8;HLJPZ72?2CEEYQ>669JJLRX9>=0ECG[_0:4?LHN\V;2;6GAIU]2E2=NF@^T=O94IOKW[4E03@DBXR?K7:KMMQY6M>1BBDZP1G58MKOSW;:<7D@FT^023>OIA]U9>:5FNHV\661<AGC_S?:8;HLJPZ42?2CEEYQ=669JJLRX:>=0ECG[_3:4?LHN\V82;6GAIU]1E2=NF@^T>O94IOKW[7E03@DBXR<K7:KMMQY5M>1BBDZP2G58MKOSW::<7D@FT^123>OIA]U8>:5FNHV\761<AGC_S>:8;HLJPZ52?2CEEYQ<669JJLRX;>=0ECG[_2:4?LHN\V92;6GAIU]0E2=NF@^T?O94IOKW[6E03@DBXR=K7:KMMQY4M>1BBDZP3G48MKOSWH<0ECG[_C18MKP43@EI>6BF2:NL2>JHIMOO;6B@GHABH1=K]];?7A[[259OQQ513E__?RJ9;MWW7ZJ33E__8;5CUU6\@0=J[NEE96CZXB[`?Hgmg{\n~~g`nb9Nmkiu^lxxeb`<;O226>H6;2D:<95A11:7?K771:1E=<:4N0320>H69:>0B<?;3:L266=I9:>0B<=?4:L2742<F89986@>3268J453<2D:?8:4N0150>H6;>>0B<=74:L27<5<F8>?7C?;059M51733G;?>95A1517?K73<=1E=9;;;O3721=I9==?7C?;859M51?43G;>86@>5168J436<2D:9?:4N0700>H6==>0B<;:4:L2132<F8?<86@>5968J43>;2D::95A1727?K719=1E=;<;;O3571=I9?>?7C?9559M53033G;=;>5A1668J415<2D:;>:4N0570>H6?<>0B<994:L2322<F8=386@>7818J4>33G;3<95A1937?K7?:=1E=5=;;O3;21=I91=?7C?7859M5=?43G;286@>9168J4?6<2D:5?:4N0;00>H61=>0B<7:4:L2=32<F83<?6@=029M645<F;887C<<3:L106=I:<90B?8<;O047>H50:1E>4=4N220?K56;2D8>>5A3218J6243G9>?6@<629M725<F:2?7C=7129M7<5<F=:?7C:?129M045<F=887C:;3:L726=I=990B8<<;O777>H2=:1E9;<4N708J24<F180B4h4NC]AQVVNFVZYC]]8;OGWSJTL<2DDBH?4O39LO4=W<2ZJ^Yo4PHL\FPUNLQh0\D@PBTQMEHC43YXN=6_l;SCNF40X[0UX5<5\129PMHYDGEFB_DAA_BJFGN0<[F_YOH94SSTBHZG03ZX]MAQM4:QPVD2<[ZXI86ZVPD10?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[goiWqey<=>?_Sgpqir6;:1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UiecQwos2344YUmzgx<=<;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_ckm[}iu89:9S_k|umv276=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwYeagUsc>?02]Qavsk|8987X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySoga_ymq4563W[oxyaz>329V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]amkYg{:;<8Q]erwop4543\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWkceSua}0125[Wct}e~:?>5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQmio]{kw678>UYi~{ct010?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[goiWqey<=>7_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UloRv`r1234ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw6788UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=<PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0120[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567<VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<8Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?014\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4560W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;4R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?08]Qavsk|89?7X> gsd-vc)`kq$h`fv Mymq[qkwWkgyh>P0^zlv5678Vrd0<0=1268Q5)`zo$yj"ilx/aoo})JpfxTx`~Pv`nva5Y7Wqey<=>?_ym?7;56;:1^<"i}f/pe+be&jf`t"Cwos]wiuYqien<R>Pxnp3456Xpf6?2<=8;T2,cw`)zo%lou lljz,I}iuW}g{S{ocud2\4Z~hz9:;<Rv`<5<2[VQ7;=1^<"i}f/pe+be&jf`t"Cwos]wiuYqien>R>Pxnp3456XZly~`y?<3:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^`jjZ~hz9:;<R\jstnw565<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXj`dTtb|?013\V`urd};8?6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Rlfn^zlv567;VXnxb{1218Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\flhXpfx;<=:PRdqvhq74;2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVhbbRv`r1231ZTb{|f=>=4U1-dvc(un&mht#mcky-N|jtX{U{by|Pbhl\|jt789<T^h}zlu307>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZdnfVrd~=>?7^Pfwpjs9:90Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTnd`Pxnp345>XZly~`y?<3:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^`jjZ~hz9:;5R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?01]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3457XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89:9S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?3^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2341YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789?T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>9_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1233ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw6781UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=7PRdqvhq76=2_;#j|i.sd,cf~)keas#C=>5:W3+bta&{l$knv!cmi{+K3592_;#j|i.sd,cf~)keas#jPpovq[goi4949>6[?/fpe*w`(ojr%oaew/sf\tkruWkce0<>1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=3=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj949:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf595><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1:1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=7=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj909:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf5=5><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb161209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=;=65=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ6582_;#j|i.sd,cf~)keas#jPpovq[goiW88:7X> gsd-vc)`kq$h`fv re]sjqtXj`dT==<?;T2,cw`)zo%lou lljz,vaYwf}xTnd`P2328Q5)`zo$yj"ilx/aoo})ulVzexQmio]065=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ2582_;#j|i.sd,cf~)keas#jPpovq[goiW<8;7X> gsd-vc)`kq$h`fv re]sjqtXj`dT:?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ8219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^:14>S7'nxm"h gbz-gim'{nT|cz}_ckm[<413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=6:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4566:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?2348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678:8=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01612>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:>>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123270<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<:<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp345>582_;#j|i.sd,cf~)keas#jPpovq[be;878:7X> gsd-vc)`kq$h`fv re]sjqtXoj6:<3<?;T2,cw`)zo%lou lljz,vaYwf}xTkn2>>328Q5)`zo$yj"ilx/aoo})ulVzexQhc=0=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`868582_;#j|i.sd,cf~)keas#jPpovq[be;<78;7X> gsd-vc)`kq$h`fv re]sjqtXoj6>2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo181219V4*aun'xm#jmw.bnh|*tcWyd~Ril<6<14>S7'nxm"h gbz-gim'{nT|cz}_fa?<;473\:$kh!rg-dg}(ddbr$~iQnup\cf:>68l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV::j6[?/fpe*w`(ojr%oaew/sf\tkruWniT=?>4U1-dvc(un&mht#mcky-q`Zvi|{UloR??1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_33e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]05c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[17a3\:$kh!rg-dg}(ddbr$~iQnup\cfY29o1^<"i}f/pe+be&jf`t"|k_qlwvZadW?;m7X> gsd-vc)`kq$h`fv re]sjqtXojU<=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS5?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ6279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:76;=0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi311<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5;5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>1:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm7?3<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8185>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1;1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:16;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi37?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4149:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=;=60=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnU;>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]263=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnU:<?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\673<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT??;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\073<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT9?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\273<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT;?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\<73<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT5?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:76;k0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>24;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?31?0:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;7>3<6;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;;7827X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3?0;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?35?0:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;7:3<6;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;?7827X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3?<;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?39?0;?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;T<?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y6:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^336==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R<=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W:837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\07><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<Q:299V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9V<946[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2[24?3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?P83:8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8U2>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:<>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012;60=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:2>:5Z0.eqb+ta'nis"nbdx.vntZpfd|o;S=Qwos2345403\:$kh!rg-dg}(ddbr$x`~Pv`nva7Y7Wqey<=>?209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=2=67=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj9776;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag6:2??4U1-dvc(un&mht#mcky-tvZvi|{Uiec2=>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>0:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:36;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag6>2??4U1-dvc(un&mht#mcky-tvZvi|{Uiec29>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>4:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:?6;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag622?>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ?219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^315>S7'nxm"h gbz-gim'~xT|cz}_ckm[46582_;#j|i.sd,cf~)keas#z|Ppovq[goiW;8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT??>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ;219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^714>S7'nxm"h gbz-gim'~xT|cz}_ckm[3473\:$kh!rg-dg}(ddbr${Qnup\flhX?;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU3>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR7=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4567:?1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678:8=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01612>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:>>;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123270<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<:<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp345>5>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>6219V4*aun'xm#jmw.bnh|*quWyd~Ril<1<15>S7'nxm"h gbz-gim'~xT|cz}_fa?558582_;#j|i.sd,cf~)keas#z|Ppovq[be;978;7X> gsd-vc)`kq$h`fv ws]sjqtXoj692?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1=1219V4*aun'xm#jmw.bnh|*quWyd~Ril<5<14>S7'nxm"h gbz-gim'~xT|cz}_fa?1;473\:$kh!rg-dg}(ddbr${Qnup\cf:16;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5=5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh050=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm39?3e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]35c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[4473\:$kh!rg-dg}(ddbr${Qnup\cfY688l0Y=!hrg,qb*adp'iggu!xr^rmpwY`kV8:j6[?/fpe*w`(ojr%oaew/vp\tkruWniT?<h4U1-dvc(un&mht#mcky-tvZvi|{UloR:>f:W3+bta&{l$knv!cmi{+rtXxg~ySjmP50d8Q5)`zo$yj"ilx/aoo})pzVzexQhc^42b>S7'nxm"h gbz-gim'~xT|cz}_fa\34`<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ>6n2_;#j|i.sd,cf~)keas#z|Ppovq[beX1;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi30?04?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`48:5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>2:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7>3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8685>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1:1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:26;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi36?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4>49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=:=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn622?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\473<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT=?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\55423\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olS?<:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[6423\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olS9<:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[0423\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olS;<:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[2423\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olS5<:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[<4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?30?0b?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;7==0=9:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6484956[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2878512_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj><2<1=>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:090=9:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb64<4956[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2838512_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj><6<1=>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:050=9:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6404946[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2[54?3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?P13;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8U:<?64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y5:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^11<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S9<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X=;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]56==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R9=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W1837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\=73<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ~hz9:;<?;4U1-dvc(un&mht#mcky-tvZvi|{UloRv`r123573<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ~hz9:;>?;4U1-dvc(un&mht#mcky-tvZvi|{UloRv`r123773<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ~hz9:;8?;4U1-dvc(un&mht#mcky-tvZvi|{UloRv`r123173<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ~hz9:;:?;4U1-dvc(un&mht#mcky-tvZvi|{UloRv`r123373<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ~hz9:;4?;4U1-dvc(un&mht#mcky-tvZvi|{UloRv`r123=6><]9%l~k }f.eo4+tc'nx:"j|kc3,q`f)JimnT~iQkc^k\eabt}k:;<=??399V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.Ob`aYulVnhSdQndeqvf567888846[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@okd^pg[aeXaVkoh~{m0123515?3\:$kh!rg-dh5(ul&my=#i}db0-vae(EhnoSjPdb]j[dbc{|h;<=>>62:8Q5)`zo$yj"ic0/pg+bt6&nxoo? }db-NeabXzmUooRgPaefpqg6789;3?:5Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"Cnde]q`ZbdW`Ujhi}zb12347503\:$kh!rg-dh5(ul&my=#i}db0-vae(EhnoSjPdb]j[dbc{|h;<=>;369V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.Ob`aYulVnhSdQndeqvf5678?9<7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$Aljk_sf\`fYnWhnoxl?012;7f=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*KflmUyhRjl_h]b`aurj9:;<Rmv<0<0<>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWjs7<3=7;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\g|:66:20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%FxlPdhde[rtXzmUa}Qly=0=7==R8&myj#|i/fn3*wb(o{;%kjl2/pgg*Kt}kUoekhPws]q`ZrjxVir0>0<8:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[f;<7937X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pcx>6:6><]9%l~k }f.eo4+tc'nx:"j|kc3,q`f)J{|hThdhi_vp\vaYseyUhu181399V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.OpqgYcaolT{Q}d^vntZe~4>4846[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_b{?<;5?3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzTot26>2;8Q5)`zo$yj"ic0/pg+bt6&nxoo? }db-NwpdXl`lmSz|Pre]wiuYk}}6;2>o4U1-dvc(un&mg<#|k/fp2*btck;$yhn!Bst`\`l`aW~xT~iQ{mq]oqq:687927X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pltv?5;5>3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzT`xz32?1:?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IvseWmcmjRy}_sf\phvXd|~7?3=6;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\hpr;<7927X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pltv?1;5>3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzT`xz36?1:?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IvseWmcmjRy}_sf\phvXd|~7;3=6;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\hpr;07927X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pltv?=;5>3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzTtb|30?1b?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IvseWmcmjRy}_sf\phvXpfx7==0<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[}iu484856[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_ymq878412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sua}<2<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWqey090<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[}iu4<4856[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_ymq838412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sua}<6<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWqey050<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[}iu4048<6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#igif^uq[wbX|dz7<3<7;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoX8;20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]26<=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeR??289V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaV;:>55Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"|k_ea\mZ4502_;#j|i.sd,ci6)zm%l~< hrea1*wbd'{nThnQf_20;?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcT8?64U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lY2:11^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^41<>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS:<7;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoX0;20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]:74=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236969;;1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^ov|567:5:5=><4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?2>0?17?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?5585=:20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6:<3<:_RU371=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx12369776;2886[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:90<>13017?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?55841:90Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6:<3:<4:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnWds<=>=<02=04503\:$kh!rg-dh5(ul&my=#i}db0-vae(zmUooRgPmtz3454;994?S^Y?369V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=33:1YT_8997X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$~iQkc^k\ip~78987=<0<3:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnWds<=>=<03=567<]9%l~k }f.eo4+tc'nx:"j|kc3,q`f)ulVnhSdQbuy2347:66:80Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6:2<=>;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoXe|r;<=<32?11?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?6;7492_;#j|i.sd,ci6)zm%l~< hrea1*wbd'{nThnQf_lw{45654:48>6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:90>0>309V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=6=77=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx12369299:>0Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6?2<?>399V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=6=547X[^:8=6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:9080<2:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnWds<=>=<4<274=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236909;>1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^ov|567:5<5=<Q\W11a?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?2;76WZ]:S^Y?309V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=5=70=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236919WZ];?85Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"|k_ea\mZkrp9:;>191_RU27<=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236919WZ]:S^Y?309V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=:=70=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx12369>9WZ]9?<5Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"|k_ea\mZkrp9:;>171329V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=;=5<553\:$kh!rg-dh5(ul&my=#i}db0-vae(zmUooRgPmtz3454;1788?6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:9040=0218Q5)`zo$yj"ic0/pg+bt6&nxoo? }db-q`ZbdW`Ufyu>?03>::665i2_;#j|i.sd,ci6)zm%l~< }fvdw+WGJW[NTICQIWGV26<=R8&myj#|i/fn3*wb(o{;%~kyit.PBIZTBOF__SH@>2c9V4*aun'xm#jb?.sf,cw7)zo}mx"\NM^TBHLBXN^L_=<=<;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTJ^CPFGf273=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^DPIZ@Al8'Bb>64U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe3.Mk76;:1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ@TEVLMh?=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTJ^CPFGf1)Lh402_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[CUJWOLo> Ga100;?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}Umn?94U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZo5m2_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^mq4567:o1^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_h]lv567888>7X> gsd-vc)`d9$yh"i}1/pescr(}zoyS{ocie0:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7<3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;97827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?6;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz33?0:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~783<i;T2,cw`)zo%l`= }d.eqev(u{}y$o=!hmtz-ch]7U'mf=#c>2g9V4*aun'xm#jb?.sf,cwgt&{y"m?/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g5)`e|r%k`U;]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e7'ng~t#ib[4_-chu)ez887X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=1>1229V4*aun'xm#jb?.sf,cwgt&{y"m?/w3?5;443\:$kh!rg-dh5(ul&mym~ }suq,g5)q9585>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?33?00?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5929::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';793<m;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1^2\ekb789::>o5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?P1^cm`567888i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R<Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e7';T?Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V>Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X=Vddx=>?000:?P6(o{l%~k!hl1,q`*auiz$yy} c0-`ewt~fl~7<3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o<!laspzj`r;97827X> gsd-vc)`d9$yh"i}ar,qwqu(k8%hm|vndv?6;4>3\:$kh!rg-dh5(ul&mym~ }suq,g4)di{xrbhz33?0:?P6(o{l%~k!hl1,q`*auiz$yy} c0-`ewt~fl~783<i;T2,cw`)zo%l`= }d.eqev(u{}y$o<!hmtz-ch]7U'mf=#c>2g9V4*aun'xm#jb?.sf,cwgt&{y"m>/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g4)`e|r%k`U;]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[4_-chu)ez887X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1>1229V4*aun'xm#jb?.sf,cwgt&{y"m>/w3?5;443\:$kh!rg-dh5(ul&mym~ }suq,g4)q9585>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?33?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5929::1^<"i}f/pe+bj7&{n$ko|.sqww*e6';793<m;T2,cw`)zo%l`= }d.eqev(u{}y$o<!y1^2\ekb789::>o5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?P1^cm`567888i7X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=R<Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T?Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g4)q9V>Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a2+s7X=Vddx=>?0003?P6(o{l%~k!hl1,q`*auiz$yy} cnos476<]9%l~k }f.eo4+tc'nxj#||tr-`khv6:01^<"i}f/pe+bj7&{n$ko|.sqww*tfeVof|ywPfc]j75=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np3456492_;#j|i.sd,ci6)zm%l~l}!rrvp+wgjWlg{xtQib^k\kw6789;:j6[?/fpe*w`(oe:%~i!}al]ueiocWo}mx?=4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov10>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|88>7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{1107?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs:;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz<259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq25<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex8<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw272<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~<>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu:10>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|0827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?4;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw30?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2>>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6:2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq585>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}949W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8685k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<2<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw34?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs783Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6>2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:26Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}909:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=4=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<6<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0:0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs743<l;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;07Uyx?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:>6;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>::Zts:h1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>3:7d<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|311<1a>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1??>^pw6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2>>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7>3<n;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[}iu4:49m6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^zlv929:h1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>6:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|36?0b?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey0:0=a:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZ~hz525>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:>68l0Y=!hrg,qb*ak8'xo#~ats-`kphs4949<6[?/fpe*w`(oe:%~i!}povq+firf}6:<3?i;T2,cw`)zo%l`= }d.psjqt(kfex1?11g9V4*aun'xm#jb?.sf,vuhsz&idycz32?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=1=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?0;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9399o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;>7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5=5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~743?i;T2,cw`)zo%l`= }d.psjqt(kfex1711d9V4*aun'xm#jb?.sf,vuhsz&idyczP00g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_03e?P6(o{l%~k!hl1,q`*twf}x$ob{at^335`=R8&myj#|i/fn3*wb(zyd~"m`uov\64c<]9%l~k }f.eo4+tc'{zex!lotlw[67b3\:$kh!rg-dh5(ul&x{by| cnwmpZ26m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY29l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX>8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW>;n7X> gsd-vc)`d9$yh"|nup,gjsi|V2:i6[?/fpe*w`(oe:%~i!}povq+firf}U2>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2?>318Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?5585:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95;5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2=>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?7;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64=49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1;1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>5:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;?7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:050=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=;=64=R8&myj#|i/fn3*wb(zyd~"m`uov\`4Y7:81^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8U:>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<Q>0338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\677<]9%l~k }f.eo4+tc'{zex!lotlw[a7X;;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T8??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P5338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\277<]9%l~k }f.eo4+tc'{zex!lotlw[a7X?;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T4??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P93;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6?2?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!ws-dsdu)z~x#n? glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV:R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f7(ods"jcT5\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28185;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86>2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<Q>_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W=Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y2Wge<=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h>"mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d:&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`6*efz{seiy2<>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.abvwim}6?2?h4U1-dvc(un&mg<#y}/fubw+qt|z%h>"ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV:R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT5\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185;2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~86>2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h>"x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<Q>_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W=Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y2Wge<=>?1328Q5)`zo$yj"ic0/uq+bqf{'}xx~!lolr265=R8&myj#|i/fn3*rt(o~kx"z}{s.aliu4502_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`Rhm_h06?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkW`8h7X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_h]lv5678;n0Y=!hrg,qb*ak8'}y#jyns/uppv)uidUmyabPi^mq45679:i0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GjhiQxr^fbpdYdg|dSdQnde234577;j1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234444k2_;#j|i.sd,ci6){%l{im>.vf`a}r(EhnoSz|Pd`vb[firf}UbSljk0123515d3\:$kh!rg-dh5(pz&m|hn?!weaf|q)JimnT{Qkauc\gjsi|VcTmij?012226e<]9%l~k }f.eo4+qu'n}oo< xdbg{p*KflmU|~Rjnt`]`kphsW`Ujhi>?013;7g=R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HgclV}ySio{a^alqkrXaVkoh=>?031a?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NeabX{UomyoPcnwmpZoXimn;<=>;3c9V4*aun'xm#jb?.vp,crbd9'}oohv{/Lcg`ZquWmkmRm`uov\mZgcl9:;<;=m;T2,cw`)zo%l`= xr.et`f7)minty!Baef\swYci}kTob{at^k\eab789:38<5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vir0<>1429V4*aun'xm#jb?.vp,crbd9'}oohv{/Lcg`ZquWmkmRm`uov\mZgcl9:;<Rmv<02=54273\:$kh!rg-dh5(pz&m|hn?!weaf|q)JimnT{Qkauc\gjsi|VcTmij?012\g|:66=>0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GjhiQxr^fbpdYdg|dSdQnde2345Yg{6:<3?>489V4*aun'xm#jb?.vp,crbd9'}oohv{/Lcg`ZquWmkmRm`uov\mZgcl9:;<Rv`r=3=54YNF_U;8>5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vrd~1<11060?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NeabX{UomyoPcnwmpZoXimn;<=>Pxnp?7;76<:1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234Z~hz5>5=<:;;T2,cw`)zo%l`= xr.et`f7)minty!Baef\swYci}kTob{at^k\eab789:Ttb|35?3251><]9%l~k }f.eo4+qu'n}oo< xdbg{p*KflmU|~Rjnt`]`kphsW`Ujhi>?01]{kw:268;:S^Y?429V4*aun'xm#jb?.vp,crbd9'}oohv{/Lcg`ZquWmkmRm`uov\mZgcl9:;<Rv`r=7=57243\:$kh!rg-dh5(pz&m|hn?!weaf|q)JimnT{Qkauc\gjsi|VcTmij?012\|jt;>7;:855Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vrd~191103\WR7302_;#j|i.sd,ci6){%l{im>.vf`a}r(EhnoSz|Pd`vb[firf}UbSljk0123[}iu4>4:=<Q\W36;?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NeabX{UomyoPcnwmpZoXimn;<=>Pxnp?3;769VY\?964U1-dvc(un&mg<#y}/fugg4(pljosx"Cnde]tvZbf|hUhcx`{_h]b`a6789Usc28>032[VQ3<:1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234Z~hz5=5=?:8;T2,cw`)zo%l`= xr.et`f7)minty!Baef\swYci}kTob{at^k\eab789:Ttb|37?31[VQ7<:1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234Z~hz525=<:<;T2,cw`)zo%l`= xr.et`f7)minty!Baef\swYci}kTob{at^k\eab789:Ttb|39?320==R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HgclV}ySio{a^alqkrXaVkoh=>?0^zlv9?998;T_Z><7:W3+bta&{l$ka>!ws-dsae6&~nhiuz Mrwa[aoanV}ySjPtlr\g|:76:=0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GxyoQkigd\swYulV~f|Rmv<0<03>S7'nxm"h gm2-sw)`mi:"zjleyv,IvseWmcmjRy}_sf\phvXkp692>94U1-dvc(un&mg<#y}/fugg4(pljosx"C|uc]gmc`X{UyhRzbp^az8684?2_;#j|i.sd,ci6){%l{im>.vf`a}r(EziSigif^uq[wbX|dzTot2;>258Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.OpqgYcaolT{Q}d^vntZe~4<48;6[?/fpe*w`(oe:%{!hwea2*rbdmq~$A~{m_ekebZquW{nTx`~Pcx>5:61<]9%l~k }f.eo4+qu'n}oo< xdbg{p*Kt}kUoekhPws]q`ZrjxVir0:0<7:W3+bta&{l$ka>!ws-dsae6&~nhiuz Mrwa[aoanV}ySjPtlr\g|:?6:=0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GxyoQkigd\swYulV~f|Rmv<8<0<>S7'nxm"h gm2-sw)`mi:"zjleyv,IvseWmcmjRy}_sf\phvXd|~7<3=6;T2,cw`)zo%l`= xr.et`f7)minty!Bst`\`l`aW~xT~iQ{mq]oqq:687937X> gsd-vc)`d9$|~"ixdb3-saebp}%FxlPdhde[rtXzmUa}Qcuu>2:6><]9%l~k }f.eo4+qu'n}oo< xdbg{p*Kt}kUoekhPws]q`ZrjxVf~x1<1399V4*aun'xm#jb?.vp,crbd9'}oohv{/LqvfZbnnoU|~R|k_uos[iss4:4846[?/fpe*w`(oe:%{!hwea2*rbdmq~$A~{m_ekebZquW{nTx`~Pltv?0;5?3\:$kh!rg-dh5(pz&m|hn?!weaf|q)J{|hThdhi_vp\vaYseyUgyy2:>2:8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.OpqgYcaolT{Q}d^vntZjr|5<5?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#@}zb^fjbcYpzVxoSyc_mww828402_;#j|i.sd,ci6){%l{im>.vf`a}r(EziSigif^uq[wbX|dzT`xz38?1;?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NwpdXl`lmSz|Pre]wiuYk}}622>64U1-dvc(un&mg<#y}/fugg4(pljosx"C|uc]gmc`X{UyhRzbp^zlv969;01^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'Dy~nRjffg]tvZtcW}g{Sua}<02=7==R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HurjVnbjkQxr^pg[qkwWqey0<0<8:W3+bta&{l$ka>!ws-dsae6&~nhiuz Mrwa[aoanV}ySjPtlr\|jt;:7937X> gsd-vc)`d9$|~"ixdb3-saebp}%FxlPdhde[rtXzmUa}Qwos>0:6><]9%l~k }f.eo4+qu'n}oo< xdbg{p*Kt}kUoekhPws]q`ZrjxVrd~1:1399V4*aun'xm#jb?.vp,crbd9'}oohv{/LqvfZbnnoU|~R|k_uos[}iu4<4846[?/fpe*w`(oe:%{!hwea2*rbdmq~$A~{m_ekebZquW{nTx`~Pxnp?2;5?3\:$kh!rg-dh5(pz&m|hn?!weaf|q)J{|hThdhi_vp\vaYseyUsc28>2:8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.OpqgYcaolT{Q}d^vntZ~hz525?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#@}zb^fjbcYpzVxoSyc_ymq8<85n2_;#j|i.sd,ci6){%l{im>.vf`a}r(l`lmSz|Pre]wiu:76;l0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&}ySio{a^alqkrXaV:9j6[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcT=>>4U1-dvc(un&mg<#y}/fugg4(pljosx"y}_ecweZeh}g~TeR??319V4*aun'xm#jb?.vp,crbd9'}oohv{/vp\`drfWje~byQf_031b>S7'nxm"h gm2-sw)`mi:"zjleyv,swYci}kTob{at^k\67`<]9%l~k }f.eo4+qu'n}oo< xdbg{p*quWmkmRm`uov\mZ55n2_;#j|i.sd,ci6){%l{im>.vf`a}r({UomyoPcnwmpZoX<;l0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&}ySio{a^alqkrXaV?9j6[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcT:?h4U1-dvc(un&mg<#y}/fugg4(pljosx"y}_ecweZeh}g~TeR9=f:W3+bta&{l$ka>!ws-dsae6&~nhiuz ws]geqgXkfexRgP83d8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.uq[agsiVidyczPi^;0=>S7'nxm"h gm2-sw)`mi:"zjleyv,swYci}kTob{at^k\eab789:7==0<8:W3+bta&{l$ka>!ws-dsae6&~nhiuz ws]geqgXkfexRgPaef3456;97937X> gsd-vc)`d9$|~"ixdb3-saebp}%|~Rjnt`]`kphsW`Ujhi>?01>1:6><]9%l~k }f.eo4+qu'n}oo< xdbg{p*quWmkmRm`uov\mZgcl9:;<1=1399V4*aun'xm#jb?.vp,crbd9'}oohv{/vp\`drfWje~byQf_`fg45674=4846[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcTmij?012?1;5?3\:$kh!rg-dh5(pz&m|hn?!weaf|q)pzVnjxlQlotlw[lYflm:;<=29>2:8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.uq[agsiVidyczPi^cg`56785=5?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#z|Pd`vb[firf}UbSljk01238=8402_;#j|i.sd,ci6){%l{im>.vf`a}r({UomyoPcnwmpZoXimn;<=>39?3g?P6(o{l%~k!hl1,tv*tfeV}ySh`Pi000?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by?=5:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp465<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw772<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~?>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu710>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|?8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{7368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr?:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by7=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4949o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az858Xz}827X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?5;4d3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw31?]qp7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2=>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp692R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq595>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}959W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8185k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<5<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw35?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs793Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6=2?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:16Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}919:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=5=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<9<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir050Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs753<l;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;17Uyx?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;878i7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8469:l1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQwos>24;Yu|;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?5;4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<3<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1=12`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{6?2?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;=78j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8385i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=5=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc27>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx753?i;T2,cw`)zo%l`= xr.usjqt(kfex1>1219V4*aun'xm#jb?.vp,suhsz&idycz311<2b>S7'nxm"h gm2-sw)pxg~y#naznu>2:4`<]9%l~k }f.eo4+qu'~zex!lotlw8786n2_;#j|i.sd,ci6){%||cz}/bmvjq:468l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4=4:j6[?/fpe*w`(oe:%{!xpovq+firf}6>2<h4U1-dvc(un&mg<#y}/vrmpw)dg|d0;0>f:W3+bta&{l$ka>!ws-ttkru'je~by28>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<9<2b>S7'nxm"h gm2-sw)pxg~y#naznu>::4c<]9%l~k }f.eo4+qu'~zex!lotlw[57b3\:$kh!rg-dh5(pz&}{by| cnwmpZ76n2_;#j|i.sd,ci6){%||cz}/bmvjqY688o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW;;n7X> gsd-vc)`d9$|~"ynup,gjsi|V9:i6[?/fpe*w`(oe:%{!xpovq+firf}U?=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T9<k4U1-dvc(un&mg<#y}/vrmpw)dg|dS;?j;T2,cw`)zo%l`= xr.usjqt(kfexR9>e:W3+bta&{l$ka>!ws-ttkru'je~byQ71d9V4*aun'xm#jb?.vp,suhsz&idyczP9308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?4;443\:$kh!rg-dh5(pz&}{by| cnwmpZb648:5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2>>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?6;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64:49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1:1239V4*aun'xm#jb?.vp,suhsz&idyczPd0>6:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;>7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0:0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=:=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:>6;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;T<??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P1308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3\55463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W;8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S><>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_502?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[0463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W?8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S:<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_902?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[<453\:$kh!rg-dh5(pz&}{by| cnwmpZb54949?6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1??>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?5;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54;49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1=1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>7:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;=7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90;0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=5=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:?6;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm8753<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_102?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[4453\:$kh!rg-dh5(pz&}{by| cnwmpZb5W8:9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R<=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^115>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z2592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V?9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R8=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^515>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z>592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V3::6[?/fpe*w`(elg$hb{{_h]353=R8&myj#|i/lgn+air|VcT=<94U1-dvc(un&gna"j`uu]j[466?2_;#j|i.sd,i`k(lfSdQ>1058Q5)`zo$yj"cjm.flqqYnW88:;6[?/fpe*w`(elg$hb{{_h]2741<]9%l~k }f.ofi*bh}}UbS<:>7:W3+bta&{l$ahc dnww[lY6=8=0Y=!hrg,qb*kbe&ndyyQf_0423>S7'nxm"h mdo,`jssW`U:;<94U1-dvc(un&gna"j`uu]j[4>6?2_;#j|i.sd,i`k(lfSdQ>9048Q5)`zo$yj"cjm.flqqYnW;;<7X> gsd-vc)jmd%ocxzPi^0352=R8&myj#|i/lgn+air|VcT><?8;T2,cw`)zo%fi`!kotv\mZ459>1^<"i}f/pe+hcj'me~xRgP2234?P6(o{l%~k!bel-gkprXaV8?=:5Z0.eqb+ta'dof#iazt^k\60703\:$kh!rg-nah)cg|~TeR<9169V4*aun'xm#`kb/emvpZoX:>;<7X> gsd-vc)jmd%ocxzPi^0;52=R8&myj#|i/lgn+air|VcT>4?9;T2,cw`)zo%fi`!kotv\mZ56?2_;#j|i.sd,i`k(lfSdQ<0058Q5)`zo$yj"cjm.flqqYnW:;:;6[?/fpe*w`(elg$hb{{_h]0641<]9%l~k }f.ofi*bh}}UbS>=>7:W3+bta&{l$ahc dnww[lY4<8=0Y=!hrg,qb*kbe&ndyyQf_2722>S7'nxm"h mdo,`jssW`U?=;5Z0.eqb+ta'dof#iazt^k\140<]9%l~k }f.ofi*bh}}UbS;?9;T2,cw`)zo%fi`!kotv\mZ16>2_;#j|i.sd,i`k(lfSdQ7179V4*aun'xm#`kb/emvpZoX1830Y=!hrg,qb*kbe&ndyyQbel>3:4g<]9%l~k }f.ofi*bh}}Ufi`2>0?3b?P6(o{l%~k!bel-gkprXelg7=<0>a:W3+bta&{l$ahc dnww[hcj4885=l5Z0.eqb+ta'dof#iazt^ofi97468k0Y=!hrg,qb*kbe&ndyyQbel>20;7f3\:$kh!rg-nah)cg|~Tahc314<2e>S7'nxm"h mdo,`jssWdof0<811`9V4*aun'xm#`kb/emvpZkbe5;<2<o4U1-dvc(un&gna"j`uu]nah:607;j7X> gsd-vc)jmd%ocxzPmdo?5<8612_;#j|i.sd,i`k(lfS`kb<0<2e>S7'nxm"h mdo,`jssWdof0?>11`9V4*aun'xm#`kb/emvpZkbe58:2<o4U1-dvc(un&gna"j`uu]nah:5:7;j7X> gsd-vc)jmd%ocxzPmdo?6686i2_;#j|i.sd,i`k(lfS`kb<36=5d=R8&myj#|i/lgn+air|Vgna1<:>0c8Q5)`zo$yj"cjm.flqqYjmd69:3?n;T2,cw`)zo%fi`!kotv\i`k;:>4:m6[?/fpe*w`(elg$hb{{_lgn87>99h1^<"i}f/pe+hcj'me~xRcjm=0::4?<]9%l~k }f.ofi*bh}}Ufi`2=>0c8Q5)`zo$yj"cjm.flqqYjmd68<3?n;T2,cw`)zo%fi`!kotv\i`k;;84:m6[?/fpe*w`(elg$hb{{_lgn86499h1^<"i}f/pe+hcj'me~xRcjm=10:4g<]9%l~k }f.ofi*bh}}Ufi`2<4?3b?P6(o{l%~k!bel-gkprXelg7?80>9:W3+bta&{l$ahc dnww[hcj4:4:56[?/fpe*w`(elg$hb{{_lgn818612_;#j|i.sd,i`k(lfS`kb<4<2=>S7'nxm"h mdo,`jssWdof0;0>9:W3+bta&{l$ahc dnww[hcj4>4:56[?/fpe*w`(elg$hb{{_lgn8=8612_;#j|i.sd,i`k(lfS`kb<8<5g>S7'nxm"h mdo,cgk)okgl"jlbg`,mc`ed&kgl#obd_lgn[bcim{kc!yamkg*fusz&xjaaa`pZ2^*wgj&{%}>R``iokw*wgj'mz2t4 }al4`?P6(o{l%~k!bel-dfh(`jdm%kocha/ldafe)jdm$naePmdo\c`hbzh~d~"xnlhf-gvru'{kf`ba[0_-vdk)z&|9Scafnhv-vdk(ly3s5#|nm7a8Q5)`zo$yj"cjm.eai+aeen$ln`in.oefgf(een%i`fQbel]dakcui}ey#{ocie,`wqt(zhggcb~T2\,qeh(u'8Tbbgaiu,qeh)cx0r2"ob6b9V4*aun'xm#`kb/f`n*bdjo'miajo!nfg`g+djo&hggRcjm^efj`tf|fx$zlbfd/appw)uidfdc}U<]/pbi+t(~;Uecd`ft/pbi*bw1q3%~lc>b:W3+bta&{l$ahc tlr\vdkXzmUnb<m4U1-dvc(un&gna"zbp^pbiZtcWld:=>5Z0.eqb+ta'{kfSjPeo34?P6(o{l%~k!}al]qabir|Voe=>5Z0.eqb+ta'{kfSz|Peo3g?P6(o{l%~k!}su`oo*tcW{ySl}}ef03?P6(o{l%~k!}su`oo*tcW{ySl}}ef]g576<]9%l~k }f.pppgjl'{nT~~zParpfcZb59j1^<"i}f/pe+wusjea$~iQ}su]`khd6l2_;#j|i.sd,vvredb%yhR||t^alig76m2_;#j|i.sd,vvredb%yhR||t^pfc9699l1^<"i}f/pe+wusjea$~iQ}su]qab:668o0Y=!hrg,qb*tt|kf`#jPrrv\v`a;:7;o7X> gsd-vc)u{}hgg"|k_sqw[wc`W9;o7X> gsd-vc)u{}hgg"|k_sqw[wc`W8;o7X> gsd-vc)u{}hgg"|k_sqw[wc`W;;o7X> gsd-vc)u{}hgg"y}_sqw[duumn8;7X> gsd-vc)u{}hgg"y}_sqw[duumnUo=?>4U1-dvc(un&xxxobd/vp\vvrXizxnkRj=1b9V4*aun'xm#}{bmi,swYu{}Uhc`l>d:W3+bta&{l$~~zmlj-tvZtt|Vidao?>e:W3+bta&{l$~~zmlj-tvZtt|Vxnk1>11d9V4*aun'xm#}{bmi,swYu{}Uyij2>>0f8Q5)`zo$yj"||tcnh+rtXzz~T~hiP00f8Q5)`zo$yj"||tcnh+rtXzz~T~hiP1`9VW@TXIECJ_n5ZSDP\RLUNJEO87[ML9:TJARYSQYO87ZKN3:UFFg=PZ@^NSKG]SUa8SWOSMVGDHHQNc:UQMQCXEFNNSO?k;YKOMK^*PMH+<#?/SUWA$5(6(HYHED;4XNP@]3=_[]FBN:5WSU]DJA1<PZ^TZNMm;Y]@KWCXAGLD:6Vkb^Kgb>^c`VZye`Xjrrklj46<PmgTAld`rWgqwlii991Sh`QBiomqR`ttafdh7lbborv\ahvsqk1j``a|t^dvhi0<jhi`y}j4b`ahquYji{an~>5lljf8`drfWje~by&?)e9geqgXkfex%?&e:fbpdYdg|d$<>&e:fbpdYdg|d$<?&d:fbpdYdg|d$?'k;ecweZeh}g~#?$j4d`vb[firf}"?%i5kauc\gjsi|!?"h6jnt`]`kphs ?#o7io{a^alqkr/? n0hlzn_bmvjq.?!m1omyoPcnwmp-?.l2njxlQlotlw858682njxlQlotlw847=87=0hog{esp5?aoi 9#=7iga(0+4?aoi 8:";6jfn)32-2=cag":>$94dhl+56/03mce$<:&7:fjj-72!>1oec&>6(58`lh/9>#<7iga(0:*3>bnf!;2%;5kio*1-2=cag"9<$94dhl+64/03mce$?<&7:fjj-44!>1oec&=4(58`lh/:<#<7iga(34*3>bnf!8<%:5kio*1<,1<l`d#>4'9;ekm,6/03mce$>>&7:fjj-56!>1oec&<2(58`lh/;:#<7iga(26*3>bnf!9>%;5kio*7-3=cag">%;5kio*5-3=cag"<%;5kio*;-3=cag"2%;5kio>3:2=cag6:<394dhl?54803mce0<<17:fjj9746>1oec2>4?58`lh;9<4<7iga<04=3>bnf5;<2:5kio>2<;1<l`d7=409;ekm84803mce0?>17:fjj9466>1oec2=2?58`lh;::4<7iga<36=3>bnf58>2:5kio>12;1<l`d7>:08;ekm87>9?2nbb1<6>79gmk:56>1oec2<0?58`lh;;84<7iga<20=3>bnf5982:5kio>00;?<l`d7?84?>69gmk:4=7<0hd`33?48`lh;<7<0hd`35?48`lh;>7<0hd`37?48`lh;07<0hd`39?58`jss 9#<7iazt)3*<>bh}}":<$64dnww,47.02ndyy&>2(:8`jss 89"46j`uu*20,><lf$<;&8:flqq.6> 20hb{{(05*<>bh}}":4$64dnww,4?.?2ndyy&=)99gkpr/:9#37iazt)02-==cg|~#>?'7;emvp-44!11ocxz'25+;?air|!8>%55kotv+63/?3me~x%<8)99gkpr/:1#37iazt)0:-2=cg|~#?$64dnww,66.02ndyy&<1(:8`jss :8"46j`uu*07,><lf$>:&8:flqq.4= =0hb{{(5+4?air|!?";6j`uu*5-2=cg|~#;$94dnww,=/03me~x%7&7:flqq:7611ocxz311<;?air|5;:255kotv?578?3me~x1?<>99gkpr;9=437iazt=36:==cg|~7=;07;emvp970611ocxz319<;?air|5;22:5kotv?5;><lf0?>18:flqq:59720hb{{<30=<>bh}}69?364dnww872902ndyy2=5?:8`jss4;<546j`uu>13;><lf0?618:flqq:517=0hb{{<3<;?air|59;255kotv?748?3me~x1==>99gkpr;;:437iazt=17:d=cg|~7?84?>99gkpr;;<4<7iazt=1=3>bh}}6?2:5kotv?1;1<lf0;08;emvp919?2ndyy27>69gkpr;1720iigi2oeg1>cjx}s8>6hffn]dakcui}eyS{:P3-"[mioip)ID^H.Heogqeqiu(8:%=#><159emciXpedsS?Ew37]1gim4:2lbjbQwloz\6N~4>V8h`f"iigm\c`hbzh~d~Rx;_2.MKKC+FFDN?n74fhdl[}jipV8@t>8P2bnh(coagVmnbh|ntnp\r1Y4$riTdl}Piov\gim:8%iTdl}Pssqw95*dW{nTjk~=0.`[mgtW{nThlzn_bmvjq;6$jUoecQxievk960+kVbjRy}_ecweZeh}g~6=!mPftno[cjfozUyyQyam?2(fYneyfnah`{aukljZr~xl79 nQzsd]figccllnT~hi20-a\swYazl{6=!mPurg\`jssW{y1<"l_tlgaw`kg~Ugcz3?,b]kevYh~lxm`by20-a\twckghnT`lzjnb{>4)eXlfSzgkti?02)eXezmdbRxnl<3/gZtcWmo{xe3=05:/gZnf{Vehh|ilnu>4)eX`hyTmac`su]eqij:8%iTdl}Prrv>5)eXlh~jSnaznu]tmaro588'oRfns^uq[del59&hSx}j_da`95*dWjefab`Pcmm`o86+kV}ySlmd_mmt95*dW{nT|cz}_vkgpm;69%iTy~kPfvdw[agsiVidycz21-a\lduXiegdyQjmqvz95*dW{nThlzn_bmvjqYpam~c1<<#c^muaw`kg~Ugcz3?,b]tvZvi|{U|eizg=03/gZvugnUna}zv_u{sa86+kV}ySio{a^alqkrX`nd0?=,b]sv`jhimUyij}21-a\`jssW{yS{oc=1.`[mgtWmkmRm`uov>4)eXx{elSk{cl^vkv`uoWgolmykPv`n>6521$jU|~Rjjpuj>652?$jU{~biPelrw}ZrozlycSckhaug\rdj:=%iT|ah_dosp|Ys`{oxdRo|sdpw[sgk5=&hSeo|_wcoma;7$jU{~biPftno[qnumzbTm~}jru]uei;58=='obcoogmpZhfel7mekaPxml{[7M;?U9oae#c^tbhlbXdf}6<!mPpskn[coagV~r|h3=ky3;(fYwzfmTjxbc_u{sa86+kVgnab|v_u{sa87+u;o0jdh`_ynm|Z4Lp:<T>nbd_gkekZabflxjxb|Pv5]0[}usW8>0jxbc7:kmpZekc11eknlzimf;?jpbzofd{l5rne\ahvsq8>0|ah_dosp|Ys`{oxd%>&159svjaXmdzuRzgrdqk,4/6=2zycjQjmqvz[qnumzb#=='>4:rqkbYbey~rSyf}erj+6,733yxdkRkbpu{\pmtb{a"8%<:4psmd[`kw|pUdk|h)6*51=wzfmTi`~{y^vkv`uo <#:86~}of]fiur~W}byi~f'6(37?uthoVof|ywPtipfwm.0!8>0|ah_dosp|Ys`{oxd%6&159svjaXmdzuRzgrdqk,</6?2zycjQjmqvz[qnumzb7==4?>0`8twi`Wlg{xtQ{hsgplZgt{lx$='>b:rqkbYbey~rSyf}erj\evubz}":%<m4psmd[`kw|pUdk|h^cpw`ts 8:"=o5rne\ahvsqV~c~h}g_`qpawr/: ;i7}|`g^gntqX|axneQnsrgqp-5.9k1{~biPelrw}ZrozlycSl}|esv+0,7e3yxdkRkbpu{\pmtb{aUj~k}t)7*5g=wzfmTi`~{y^vkv`uoWhyxiz'6(3a?uthoVof|ywPtipfwmYf{zoyx%9&1c9svjaXmdzuRzgrdqk[dutm{~#4$?m;qplcZcjx}sTxe|jsi]bwvcu|!3"=h5rne\ahvsqV~c~h}g_`qpawr;990;2<l4psmd[`kw|pUdk|h^lfcdrb 9#:n6~}of]fiur~W}byi~fPndebp`.6!8i0|ah_dosp|Ys`{oxdR`jg`vf,46.9k1{~biPelrw}ZrozlycSckhaug+6,7e3yxdkRkbpu{\pmtb{aUeijo{e)1*5g=wzfmTi`~{y^vkv`uoWgolmyk'4(3a?uthoVof|ywPtipfwmYimnki%;&1c9svjaXmdzuRzgrdqk[kc`i}o#:$?m;qplcZcjx}sTxe|jsi]mabgsm!="=o5rne\ahvsqV~c~h}g_ogdeqc/0 ;i7}|`g^gntqX|axneQaefcwa-?.9l1{~biPelrw}ZrozlycSckhaug?55<7601{~biPftno56=wzfmTjxbc_ujqavn/8 ;87}|`g^dvhiYs`{oxd%?&159svjaXn|fgSyf}erj+55/6;2zycjQiumn\pmtb{a"9%<=4psmd[cskdV~c~h}g(2+27>vugnUmyabPtipfwm.3!890|ah_gwohZrozlyc$8'>3:rqkbYa}efTxe|jsi*5-45<x{elSk{cl^vkv`uo >#:?6~}of]eqijX|axne&7)018twi`Wog`Rzgrdqk,</6>2zycjQiumn\pmtb{a6:<7>11`9svjaXn|fgSyf}erj\evubz}";%<o4psmd[cskdV~c~h}g_`qpawr/9 ;i7}|`g^dvhiYs`{oxdRo|sdpw,46.9h1{~biPftno[qnumzbTm~}jru*1-4g<x{elSk{cl^vkv`uoWhyxiz'3(3b?uthoVl~`aQ{hsgplZgt{lx$9'>a:rqkbYa}efTxe|jsi]bwvcu|!?"=l5rne\bpjkW}byi~fParqfvq.1!8k0|ah_gwohZrozlycSl}|esv+3,7f3yxdkRhzlm]wlwct`Vkxh|{(9+2e>vugnUmyabPtipfwmYf{zoyx%7&1e9svjaXn|fgSyf}erj\evubz}6:<7>11`9svjaXn|fgSyf}erj\j`af|l";%<o4psmd[cskdV~c~h}g_ogdeqc/9 ;i7}|`g^dvhiYs`{oxdR`jg`vf,46.9h1{~biPftno[qnumzbTbhintd*1-4g<x{elSk{cl^vkv`uoWgolmyk'3(3b?uthoVl~`aQ{hsgplZhboh~n$9'>a:rqkbYa}efTxe|jsi]mabgsm!?"=l5rne\bpjkW}byi~fPndebp`.1!8k0|ah_gwohZrozlycSckhaug+3,7f3yxdkRhzlm]wlwct`Vdnklzj(9+2e>vugnUmyabPtipfwmYimnki%7&1e9svjaXn|fgSyf}erj\j`af|l6:<7>16:pg[fjl991yhRjnt`]`kphs 9#:<6|k_ecweZeh}g~#=$?>;sf\`drfWje~by&>0(32?wbXlh~jSnaznu*25,773{nThlzn_bmvjq.5!8:0~iQkauc\gjsi|!9"==5}d^fbpdYdg|d$9'>0:pg[agsiVidycz'5(33?wbXlh~jSnaznu*5-46<zmUomyoPcnwmp-1.991yhRjnt`]`kphs 1#:<6|k_ecweZeh}g~#5$??;sf\`drfWje~by2?>038vaYci}kTob{at=33:45<zmUomyoPcnwmp976294:=6|k_ecweZeh}g~7=<0>0:pg[agsiVidycz31?33?wbXlh~jSnaznu>1:46<zmUomyoPcnwmp959991yhRjnt`]`kphs4=4:<6|k_ecweZeh}g~793??;sf\`drfWje~by29>028vaYci}kTob{at=5=55=ulVnjxlQlotlw8=8682xoSio{a^alqkr;17?0~iQjn79q`Ztt|:1yy94sckwawt33zxxx95{rtg:?phcm{lgcz;4v`nj`3=pzVkhg;5xr^aoo46<{UomyoPcnwmp-6.991|~Rjnt`]`kphs 8#:=6y}_ecweZeh}g~#=='>1:uq[agsiVidycz'10+24>quWmkmRm`uov+6,773~xThlzn_bmvjq.4!8:0{Qkauc\gjsi|!>"==5xr^fbpdYdg|d$8'>0:uq[agsiVidycz'6(33?rtXlh~jSnaznu*4-46<{UomyoPcnwmp->.991|~Rjnt`]`kphs 0#:<6y}_ecweZeh}g~7<3?>;vp\`drfWje~by2>0?30?rtXlh~jSnaznu>25?69981|~Rjnt`]`kphs48;5==5xr^fbpdYdg|d0<0>0:uq[agsiVidycz32?33?rtXlh~jSnaznu>0:46<{UomyoPcnwmp929991|~Rjnt`]`kphs4<4:<6y}_ecweZeh}g~7:3??;vp\`drfWje~by28>028swYci}kTob{at=:=55=pzVnjxlQlotlw8<823~xTic84ws]qwq{GHy;:>55O@y39B?2=9rY=87;6c;;9564>88=1>l?iezl7b1<63g>m97:4$5d1>1cd3tY=>7;6c;;9564>88=1>l?ie:Qe2?3f=3:1=><600596d7an2Y=>7;n5;29564>88=1>l?if:f6=c<7280:w^8;:4;`><<6;;3;=:4=a0df?sR60=0;6<4>:36:V032<3h644>33;352<5i8ln7):j6;d4?S2a;38py<>>:09v554=82w/=:m51g9a1<`=83<<6>497zJ7a1=]=10?w<:51282a?7c2t.:444:9g9'0c7==0o0e;>m:188k37?290/=:k56318j41c2910c;?8:18'52c=>;90b<9k:098k347290/=:k56318j41c2;10c;?i:18'52c=>;90b<9k:298k37b290/=:k56318j41c2=10c;?k:18'52c=>;90b<9k:498k37d290/=:k56318j41c2?10c;?m:18'52c=>;90b<9k:698k37f290/=:k56318j41c2110c;?6:18'52c=>;90b<9k:898k371290/=:k56318j41c2h10c;?::18'52c=>;90b<9k:c98k0`2290/=:k56128j41c2910c8h;:18'52c=>9:0b<9k:098k0`c290/=:k56128j41c2;10c8hl:18'52c=>9:0b<9k:298k0`e290/=:k56128j41c2=10c8hn:18'52c=>9:0b<9k:498k0`>290/=:k56128j41c2?10c8h7:18'52c=>9:0b<9k:698k0`0290/=:k56128j41c2110c8h9:18'52c=>9:0b<9k:898k0`4290/=:k56128j41c2h10c8h=:18'52c=>9:0b<9k:c98m34b2900c8o<:188k0?c2900e;?;:188m36c2900c89?:18'52c==090b<9k:198k00a290/=:k55818j41c2810c88j:18'52c==090b<9k:398k00c290/=:k55818j41c2:10c88l:18'52c==090b<9k:598k00e290/=:k55818j41c2<10c886:18'52c==090b<9k:798k00?290/=:k55818j41c2>10c888:18'52c==090b<9k:998k001290/=:k55818j41c2010c88::18'52c==090b<9k:`98k003290/=:k55818j41c2k10c88<:18'52c==090b<9k:b98k005290/=:k55818j41c2m10c88>:18'52c==090b<9k:d98k007290/=:k55818j41c2o10c8;j:18'52c==090b<9k:028?j32l3:1(<9j:4;0?k70l3;:76a:5b83>!70m3?2?6`>7e826>=h=<h1<7*>7d86=6=i9>n1=>54o47b>5<#9>o194=4n05g>42<3f?>57>5$05f>0?43g;<h7?:;:m61=<72-;<i7;63:l23a<6>21d98950;&23`<21:1e=:j51698k031290/=:k55818j41c28207b;:5;29 41b2<387c?8d;3:?>i2??0;6)?8e;7:7>h6?m0:m65`56794?"6?l0>5>5a16f95g=<g<=?6=4+16g91<5<f8=o6<m4;n747?6=,8=n687<;o34`?7c32e>;?4?:%34a?3>;2d:;i4>e:9l127=83.:;h4:929m52b=9o10c88n:18'52c==090b<9k:328?j32n3:1(<9j:4;0?k70l38:76a:5583>!70m3?2?6`>7e816>=h=<91<7*>7d86=6=i9>n1>>54i404>5<#9>o199o4n05g>5=<a<8=6=4+16g911g<f8=o6<54i406>5<#9>o199o4n05g>7=<a<8?6=4+16g911g<f8=o6>54i400>5<#9>o199o4n05g>1=<a<896=4+16g911g<f8=o6854i403>5<#9>o199o4n05g>3=<a<;m6=4+16g911g<f8=o6:54i43f>5<#9>o199o4n05g>==<a<;o6=4+16g911g<f8=o6454i43`>5<#9>o199o4n05g>d=<a<;i6=4+16g911g<f8=o6o54i43b>5<#9>o199o4n05g>f=<a<;26=4+16g911g<f8=o6i54i43;>5<#9>o199o4n05g>`=<a<;<6=4+16g911g<f8=o6k54i436>5<#9>o199o4n05g>46<3`?:87>5$05f>02f3g;<h7?>;:k656<72-;<i7;;a:l23a<6:21b9<<50;&23`<2<h1e=:j51298m076290/=:k555c8j41c28>07d;>0;29 41b2<>j7c?8d;36?>o28o0;6)?8e;77e>h6?m0::65f51g94?"6?l0>8l5a16f952=<a<:o6=4+16g911g<f8=o6<64;h73g?6=,8=n68:n;o34`?7>32c>>i4?:%34a?33i2d:;i4>a:9j17e=83.:;h4:4`9m52b=9k10e8<m:18'52c===k0b<9k:0a8?l35i3:1(<9j:46b?k70l3;o76g:2883>!70m3??m6`>7e82a>=n=;21<7*>7d860d=i9>n1=k54i402>5<#9>o199o4n05g>76<3`?::7>5$05f>02f3g;<h7<>;:k64g<72-;<i7;;a:l23a<5:21b9=o50;&23`<2<h1e=:j52298m0`62900n9k::182>5<7sA>n86*>8887a0=h9>h1<75rb`394?7=83:pD9k;;%3;=?g63fk;6=44}c74>5<d>3;mh7<;9zJ7a1=]=10::vj515827?762881j7?j:b82`?772l0:>7?;:0g956<c28n1=<4>0;d9a?e=u-;357;n2:&e7??a3-?o68o?;%40>0g63-;<:7?8a:k54f<722e>on4?::k54c<722e?j;4?::m557<722c?j44?::k6f3<72-;<i7;mf:l23a<732c>nh4?:%34a?3en2d:;i4>;:k6fa<72-;<i7;mf:l23a<532c>nn4?:%34a?3en2d:;i4<;:k6fg<72-;<i7;mf:l23a<332c>nl4?:%34a?3en2d:;i4:;:k6f<<72-;<i7;mf:l23a<132c>n54?:%34a?3en2d:;i48;:k6f2<72-;<i7;mf:l23a<?32c>n84?:%34a?3en2d:;i46;:k6f1<72-;<i7;mf:l23a<f32c=<o4?::m6e3<722e==54?:%34a?05;2d:;i4?;:m552<72-;<i78=3:l23a<632e=>=4?:%34a?05;2d:;i4=;:m55c<72-;<i78=3:l23a<432e==h4?:%34a?05;2d:;i4;;:m55a<72-;<i78=3:l23a<232e==n4?:%34a?05;2d:;i49;:m55g<72-;<i78=3:l23a<032e==l4?:%34a?05;2d:;i47;:m55<<72-;<i78=3:l23a<>32e==;4?:%34a?05;2d:;i4n;:m550<72-;<i78=3:l23a<e32e>j84?:%34a?0782d:;i4?;:m6b1<72-;<i78?0:l23a<632e>ji4?:%34a?0782d:;i4=;:m6bf<72-;<i78?0:l23a<432e>jo4?:%34a?0782d:;i4;;:m6bd<72-;<i78?0:l23a<232e>j44?:%34a?0782d:;i49;:m6b=<72-;<i78?0:l23a<032e>j:4?:%34a?0782d:;i47;:m6b3<72-;<i78?0:l23a<>32e>j>4?:%34a?0782d:;i4n;:m6b7<72-;<i78?0:l23a<e32c>i:4?:%34a?3a82d:;i4?;:k6ac<72-;<i7;i0:l23a<632c>ih4?:%34a?3a82d:;i4=;:k6aa<72-;<i7;i0:l23a<432c>in4?:%34a?3a82d:;i4;;:k6ag<72-;<i7;i0:l23a<232c>il4?:%34a?3a82d:;i49;:k6a<<72-;<i7;i0:l23a<032c>i54?:%34a?3a82d:;i47;:k6a3<72-;<i7;i0:l23a<>32c>i84?:%34a?3a82d:;i4n;:k56`<722e?jh4?:%34a?3702d:;i4?;:m7ba<72-;<i7;?8:l23a<632e><;4?:%34a?3702d:;i4=;:m640<72-;<i7;?8:l23a<432e><94?:%34a?3702d:;i4;;:m646<72-;<i7;?8:l23a<232e><?4?:%34a?3702d:;i49;:m644<72-;<i7;?8:l23a<032e><=4?:%34a?3702d:;i47;:m7bc<72-;<i7;?8:l23a<>32e?jn4?:%34a?3702d:;i4n;:m7bg<72-;<i7;?8:l23a<e32e>m>4?::m6=a<722c>ok4?:%34a?3c02d:;i4?;:k6`2<72-;<i7;k8:l23a<632c>h;4?:%34a?3c02d:;i4=;:k6`0<72-;<i7;k8:l23a<432c>h94?:%34a?3c02d:;i4;;:k6`6<72-;<i7;k8:l23a<232c>h?4?:%34a?3c02d:;i49;:k6`4<72-;<i7;k8:l23a<032c>h=4?:%34a?3c02d:;i47;:k6g`<72-;<i7;k8:l23a<>32c>oi4?:%34a?3c02d:;i4n;:k551<722c>m94?::k7bd<722c=>k4?::m54`<722e==>4?::m7b2<722e==<4?::k54a<722e>;=4?:%34a?3>;2d:;i4?;:m62c<72-;<i7;63:l23a<632e>:h4?:%34a?3>;2d:;i4=;:m62a<72-;<i7;63:l23a<432e>:n4?:%34a?3>;2d:;i4;;:m62g<72-;<i7;63:l23a<232e>:44?:%34a?3>;2d:;i49;:m62=<72-;<i7;63:l23a<032e>::4?:%34a?3>;2d:;i47;:m623<72-;<i7;63:l23a<>32e>:84?:%34a?3>;2d:;i4n;:m621<72-;<i7;63:l23a<e32e>:>4?:%34a?3>;2d:;i4l;:m627<72-;<i7;63:l23a<c32e>:<4?:%34a?3>;2d:;i4j;:m625<72-;<i7;63:l23a<a32e>9h4?:%34a?3>;2d:;i4>0:9l10b=83.:;h4:929m52b=9810c8;l:18'52c==090b<9k:008?j32j3:1(<9j:4;0?k70l3;876a:5`83>!70m3?2?6`>7e820>=h=<31<7*>7d86=6=i9>n1=854o47;>5<#9>o194=4n05g>40<3f?>;7>5$05f>0?43g;<h7?8;:m613<72-;<i7;63:l23a<6021d98;50;&23`<21:1e=:j51898k011290/=:k55818j41c28k07b;85;29 41b2<387c?8d;3a?>i2?=0;6)?8e;7:7>h6?m0:o65`56194?"6?l0>5>5a16f95a=<g<=96=4+16g91<5<f8=o6<k4;n745?6=,8=n687<;o34`?7a32e>:l4?:%34a?3>;2d:;i4=0:9l10`=83.:;h4:929m52b=:810c8;;:18'52c==090b<9k:308?j32;3:1(<9j:4;0?k70l38876g:a`83>!70m3?i?6`>7e83?>o2j;0;6)?8e;7a7>h6?m0:76g:b083>!70m3?i?6`>7e81?>o2j90;6)?8e;7a7>h6?m0876g:ag83>!70m3?i?6`>7e87?>o2il0;6)?8e;7a7>h6?m0>76g:ae83>!70m3?i?6`>7e85?>o2ij0;6)?8e;7a7>h6?m0<76g:ac83>!70m3?i?6`>7e8;?>o2i00;6)?8e;7a7>h6?m0276g:a983>!70m3?i?6`>7e8b?>o2:>0;6)?8e;77e>h6?m0;76g:2783>!70m3??m6`>7e82?>o2:<0;6)?8e;77e>h6?m0976g:2583>!70m3??m6`>7e80?>o2::0;6)?8e;77e>h6?m0?76g:2383>!70m3??m6`>7e86?>o2:90;6)?8e;77e>h6?m0=76g:1g83>!70m3??m6`>7e84?>o29l0;6)?8e;77e>h6?m0376g:1e83>!70m3??m6`>7e8:?>o29j0;6)?8e;77e>h6?m0j76g:1c83>!70m3??m6`>7e8a?>o29h0;6)?8e;77e>h6?m0h76g:1883>!70m3??m6`>7e8g?>o2910;6)?8e;77e>h6?m0n76g:1683>!70m3??m6`>7e8e?>o29<0;6)?8e;77e>h6?m0:<65f50694?"6?l0>8l5a16f954=<a<;86=4+16g911g<f8=o6<<4;h726?6=,8=n68:n;o34`?7432c>=<4?:%34a?33i2d:;i4>4:9j146=83.:;h4:4`9m52b=9<10e8>i:18'52c===k0b<9k:048?l37m3:1(<9j:46b?k70l3;<76g:0e83>!70m3??m6`>7e82<>=n=9i1<7*>7d860d=i9>n1=454i40g>5<#9>o199o4n05g>4g<3`?9o7>5$05f>02f3g;<h7?m;:k66g<72-;<i7;;a:l23a<6k21b9?o50;&23`<2<h1e=:j51e98m04>290/=:k555c8j41c28o07d;=8;29 41b2<>j7c?8d;3e?>o2:80;6)?8e;77e>h6?m09<65f50494?"6?l0>8l5a16f964=<a<:i6=4+16g911g<f8=o6?<4;h73e?6=,8=n68:n;o34`?4432c?j54?::k6`g<72-;<i7;j4:l23a<732c>i>4?:%34a?3b<2d:;i4>;:k6a7<72-;<i7;j4:l23a<532c>i<4?:%34a?3b<2d:;i4<;:k6a5<72-;<i7;j4:l23a<332c>hk4?:%34a?3b<2d:;i4:;:k6``<72-;<i7;j4:l23a<132c>hi4?:%34a?3b<2d:;i48;:k6`f<72-;<i7;j4:l23a<?32c>hl4?:%34a?3b<2d:;i46;:k6`<<72-;<i7;j4:l23a<f32c>o?4?:%34a?3dj2d:;i4?;:k6gd<72-;<i7;lb:l23a<632c>o44?:%34a?3dj2d:;i4=;:k6g=<72-;<i7;lb:l23a<432c>o:4?:%34a?3dj2d:;i4;;:k6g3<72-;<i7;lb:l23a<232c>o84?:%34a?3dj2d:;i49;:k6g1<72-;<i7;lb:l23a<032c>o>4?:%34a?3dj2d:;i47;:k6g4<72-;<i7;lb:l23a<>32c>o=4?:%34a?3dj2d:;i4n;:m6e2<722e><44?::k6b4<722h?ik4?:083>5}#9131m<5G4dg8L1c33fk;6=44}c6e4?6=93:1<v*>8887a0=O<lo0D9k;;n34f?6=3th?h<4?:283>5}#9131545G4dg8L1c33A??7)hi:733?!ga2;1b944?::k51?6=3f;3<7>5;|`7`f<72:0;6=u+19;9=<=O<lo0D9k;;I77?!`a2?;;7)oi:39j1<<722c=97>5;n3;4?6=3th?h=4?:283>5}#9131545G4dg8L1c33A??7)hi:733?!ga2;1b944?::k51?6=3f;3<7>5;|`7`d<72<0;6=u+19;9=`=O<lo0D9k;;I77?!`a2?;;7)oi:39j1<<722c>o7>5;h46>5<<a8=m6=44o0:3>5<<uk>on7>53;294~"6000256F;ed9K0`2<@<>0(kh56028 d`=:2c>57>5;h46>5<<g82;6=44}c6`b?6==3:1<v*>888:a>N3ml1C8h:4H468 c`=>8:0(lh52:k6=?6=3`?h6=44i7794?=n9>l1<75`19294?=zj=n26=4;:183!7?133o7E:je:J7a1=#io097d;6:188m33=831b=:h50;9l5=6=831vn9j7:187>5<7s-;3577k;I6fa>N3m=1/mk4=;h7:>5<<a??1<75f16d94?=h91:1<75rb5f4>5<3290;w)?79;;g?M2bm2B?i95+ag81?l3>2900e;;50;9j52`=831d=5>50;9~f1c5290?6=4?{%3;=??c3A>ni6F;e59'ec<53`?26=44i7794?=n9>l1<75`19294?=zj=o:6=4;:183!7?133o7E:je:J7a1=#io097d;6:188m33=831b=:h50;9l5=6=831vn><l:187>5<7s-;3577k;I6fa>N3m=1/mk47;h7:>5<<a??1<75f16d94?=h91:1<75rb3`b>5<2290;w)?79;;`?M2bm2B?i95+ag81?l3>2900e;?50;9j20<722c:;k4?::m2<5<722wi>ol50;794?6|,82264m4H5gf?M2b<2.jj7<4i4;94?=n>80;66g95;29?l70n3:17b?70;29?xd5jl0;684?:1y'5=?=1j1C8hk4H5g7?!ga2;1b944?::k55?6=3`<>6=44i05e>5<<g82;6=44}c0ab?6==3:1<v*>888:g>N3ml1C8h:4$`d96>o213:17d8>:188m33=831b=:h50;9l5=6=831vn?m?:186>5<7s-;3577l;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>o6?o0;66a>8183>>{e:j;1<7;50;2x 4>>20i0D9kj;I6f0>"fn380e8750;9j24<722c=97>5;h34b?6=3f;3<7>5;|`1g7<72<0;6=u+19;9=f=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900e<9i:188k4>72900qo<l3;291?6=8r.:4446c:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=n9>l1<75`19294?=zj;i?6=4::183!7?133h7E:je:J7a1=#io097d;6:188m37=831b:84?::k23c<722e:4=4?::a6f3=83?1<7>t$0::><e<@=on7E:j4:&bb?4<a<31<75f6083>>o1=3:17d?8f;29?j7?83:17pl=bb83>0<729q/=5759b9K0`c<@=o?7)oi:39j1<<722c==7>5;h46>5<<a8=m6=44o0:3>5<<uk8ih7>55;294~"60002o6F;ed9K0`2<,hl1>6g:9;29?l062900e;;50;9j52`=831d=5>50;9~f6d?290?6=4?{%3;=??c3A>ni6F;e59'ec<53`?26=44i7794?=n9>l1<75`19294?=zj:h<6=4;:183!7?133o7E:je:J7a1=#io097d;6:188m33=831b=:h50;9l5=6=831vn>hn:187>5<7s-;3577n;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm3g`94?2=83:p(<66:8c8L1cb3A>n86*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`0b`<72=0;6=u+19;9=d=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900c<6?:188yg5an3:187>50z&2<<<>i2B?ih5G4d68 d`=:2c>57>5;h42>5<<a??1<75`19294?=zj=:;6=4;:183!7?133j7E:je:J7a1=#io097d;6:188m37=831b:84?::m2<5<722wi8=?50;694?6|,82264o4H5gf?M2b<2.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl;0383>1<729q/=5759`9K0`c<@=o?7)oi:39j1<<722c==7>5;h46>5<<g82;6=44}c637?6=<3:1<v*>888:e>N3ml1C8h:4$`d96>o213:17d8>:188m33=831d=5>50;9~f163290?6=4?{%3;=??f3A>ni6F;e59'ec<53`?26=44i7394?=n><0;66a>8183>>{e<9?1<7:50;2x 4>>20k0D9kj;I6f0>"fn380e8750;9j24<722c=97>5;n3;4?6=3th8jn4?:583>5}#91315l5G4dg8L1c33-km6?5f5883>>o193:17d8::188k4>72900qo=id;290?6=8r.:4446a:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb3c0>5<4290;w)?79;d:?M2bm2B?i95+ag801>of;3:17do;:188k41>2900qo<69;290?6=8r.:444>019K0`c<@=o?7d;j:188m30=831b=5<50;9l52?=831vn?oj:180>5<7s-;357:jd:J7a`=O<l>0e8k50;9jb1<722e:;44?::a6d3=8391<7>t$0::>c?<@=on7E:j4:&bb?523`k86=44i`694?=h9>31<75rb3;b>5<3290;w)?79;334>N3ml1C8h:4i4g94?=n>?0;66g>8383>>i6?00;66sm2c294?5=83:p(<66:5gg?M2bm2B?i95f5d83>>oa<3:17b?89;29?xd5i?0;6>4?:1y'5=?=n01C8hk4H5g7?!ga2:?0el=50;9je1<722e:;44?::a6<d=83>1<7>t$0::>4673A>ni6F;e59j1`<722c=:7>5;h3;6?6=3f;<57>5;|`1f4<72:0;6=u+19;90`b<@=on7E:j4:k6a?6=3`l?6=44o05:>5<<uk8j;7>53;294~"6000m56F;ed9K0`2<,hl1?85fa283>>of<3:17b?89;29?xd51j0;694?:1y'5=?=99:0D9kj;I6f0>o2m3:17d89:188m4>52900c<96:188yg4e:3:1?7>50z&2<<<3mm1C8hk4H5g7?l3b2900ek:50;9l52?=831vn?o7:180>5<7s-;357h6;I6fa>N3m=1/mk4<5:kb7?6=3`k?6=44o05:>5<<uk82h7>54;294~"6000:<=5G4dg8L1c33`?n6=44i7494?=n9181<75`16;94?=zj;h86=4<:183!7?13>nh6F;ed9K0`2<a<o1<75ff583>>i6?00;66sm2`;94?5=83:p(<66:g;8L1cb3A>n86*nf;16?lg42900el:50;9l52?=831vn?7j:187>5<7s-;357??0:J7a`=O<l>0e8k50;9j23<722c:4?4?::m23<<722wi>o:50;194?6|,82269kk;I6fa>N3m=1b9h4?::ke0?6=3f;<57>5;|`1ed<72:0;6=u+19;9b<=O<lo0D9k;;%ce>63<ah91<75fa583>>i6?00;66sm28d94?2=83:p(<66:023?M2bm2B?i95f5d83>>o1>3:17d?72;29?j7013:17pl=b483>6<729q/=5754df8L1cb3A>n86g:e;29?l`32900c<96:188yg4fj3:1?7>50z&2<<<a12B?ih5G4d68 d`=;<1bm>4?::kb0?6=3f;<57>5;|`1e5<72=0;6=u+19;9556<@=on7E:j4:k6a?6=3`<=6=44i0:1>5<<g8=26=44}c0a2?6=;3:1<v*>8887aa=O<lo0D9k;;h7f>5<<ao>1<75`16;94?=zj;kh6=4<:183!7?13l27E:je:J7a1=#io0896gn3;29?lg32900c<96:188yg4f93:187>50z&2<<<6891C8hk4H5g7?l3b2900e;850;9j5=4=831d=:750;9~f7d029086=4?{%3;=?2bl2B?ih5G4d68m0c=831bj94?::m23<<722wi>lj50;194?6|,8226k74H5gf?M2b<2.jj7=:;hc0>5<<ah>1<75`16;94?=zj;k96=4;:183!7?13;;<6F;ed9K0`2<a<o1<75f6783>>o60;0;66a>7883>>{e:k21<7=50;2x 4>>2=oo7E:je:J7a1=n=l0;66gi4;29?j7013:17pl=a583>6<729q/=575f89K0`c<@=o?7)oi:278md5=831bm94?::m23<<722wi>lh50;194?6|,82269kk;I6fa>N3m=1b9h4?::ke0?6=3f;<57>5;|`0a6<72:0;6=u+19;9b<=O<lo0D9k;;%ce>63<ah91<75fa583>>i6?00;66sm3e;94?2=83:p(<66:023?M2bm2B?i95f5d83>>o1>3:17d?72;29?j7013:17pl<ed83>6<729q/=5754df8L1cb3A>n86g:e;29?l`32900c<96:188yg5b=3:1?7>50z&2<<<a12B?ih5G4d68 d`=;<1bm>4?::kb0?6=3f;<57>5;|`0`d<72=0;6=u+19;9556<@=on7E:j4:k6a?6=3`<=6=44i0:1>5<<g8=26=44}c1e4?6=;3:1<v*>8887aa=O<lo0D9k;;h7f>5<<ao>1<75`16;94?=zj:o=6=4<:183!7?13l27E:je:J7a1=#io0896gn3;29?lg32900c<96:188yg5cj3:187>50z&2<<<6891C8hk4H5g7?l3b2900e;850;9j5=4=831d=:750;9~f6`629086=4?{%3;=?2bl2B?ih5G4d68m0c=831bj94?::m23<<722wi?h950;194?6|,8226k74H5gf?M2b<2.jj7=:;hc0>5<<ah>1<75`16;94?=zj:nh6=4;:183!7?13;;<6F;ed9K0`2<a<o1<75f6783>>o60;0;66a>7883>>{e;o81<7=50;2x 4>>2=oo7E:je:J7a1=n=l0;66gi4;29?j7013:17pl<e983>6<729q/=575f89K0`c<@=o?7)oi:278md5=831bm94?::m23<<722wi?ij50;694?6|,8226<>?;I6fa>N3m=1b9h4?::k52?6=3`;3>7>5;n34=?6=3th8j>4?:283>5}#91318hj4H5gf?M2b<2c>i7>5;hd7>5<<g8=26=44}c1f=?6=;3:1<v*>888e=>N3ml1C8h:4$`d970=ni:0;66gn4;29?j7013:17pl<dd83>1<729q/=5751128L1cb3A>n86g:e;29?l012900e<6=:188k41>2900qo=i4;297?6=8r.:444;ee9K0`c<@=o?7d;j:188mc2=831d=:750;9~f6cf29086=4?{%3;=?`>3A>ni6F;e59'ec<4=2cj?7>5;hc7>5<<g8=26=44}c1gb?6=<3:1<v*>888245=O<lo0D9k;;h7f>5<<a?<1<75f19094?=h9>31<75rb2d6>5<4290;w)?79;6f`>N3ml1C8h:4i4g94?=nn=0;66a>7883>>{e;lh1<7=50;2x 4>>2o30D9kj;I6f0>"fn39>7do<:188md2=831d=:750;9~f6c7290?6=4?{%3;=?7782B?ih5G4d68m0c=831b:;4?::k2<7<722e:;44?::a7c0=8391<7>t$0::>1cc3A>ni6F;e59j1`<722cm87>5;n34=?6=3th8in4?:283>5}#9131j45G4dg8L1c33-km6>;4i`194?=ni=0;66a>7883>>{e;l;1<7:50;2x 4>>28:;7E:je:J7a1=n=l0;66g96;29?l7?:3:17b?89;29?xd4n>0;6>4?:1y'5=?=<ln0D9kj;I6f0>o2m3:17dh;:188k41>2900qo=jd;297?6=8r.:444i9:J7a`=O<l>0(lh5349je6<722cj87>5;n34=?6=3th8i?4?:583>5}#9131==>4H5gf?M2b<2c>i7>5;h45>5<<a8296=44o05:>5<<uk9m47>53;294~"6000?ii5G4dg8L1c33`?n6=44ig694?=h9>31<75rb2g7>5<4290;w)?79;d:?M2bm2B?i95+ag801>of;3:17do;:188k41>2900qo=jf;297?6=8r.:444;ee9K0`c<@=o?7d;j:188mc2=831d=:750;9~f661290?6=4?{%3;=?7782B?ih5G4d68m0c=831b:;4?::k2<7<722e:;44?::a753=83>1<7>t$0::>4673A>ni6F;e59j1`<722c=:7>5;h3;6?6=3f;<57>5;|`041<72=0;6=u+19;9556<@=on7E:j4:k6a?6=3`<=6=44i0:1>5<<g8=26=44}c137?6=<3:1<v*>888245=O<lo0D9k;;h7f>5<<a?<1<75f19094?=h9>31<75rb221>5<3290;w)?79;334>N3ml1C8h:4i4g94?=n>?0;66g>8383>>i6?00;66sm31394?2=83:p(<66:023?M2bm2B?i95f5d83>>o1>3:17d?72;29?j7013:17pl<1e83>1<729q/=5751128L1cb3A>n86g:e;29?l012900e<6=:188k41>2900qo=>c;290?6=8r.:444>019K0`c<@=o?7d;j:188m30=831b=5<50;9l52?=831vn>?m:187>5<7s-;357??0:J7a`=O<l>0e8k50;9j23<722c:4?4?::m23<<722wi?<o50;694?6|,8226<>?;I6fa>N3m=1b9h4?::k52?6=3`;3>7>5;n34=?6=3th8=44?:583>5}#9131==>4H5gf?M2b<2c>i7>5;h45>5<<a8296=44o05:>5<<uk9:47>54;294~"6000:<=5G4dg8L1c33`?n6=44i7494?=n9181<75`16;94?=zj:3:6=4;:183!7?13;;<6F;ed9K0`2<a<o1<75f6783>>o60;0;66a>7883>>{e;0:1<7:50;2x 4>>28:;7E:je:J7a1=n=l0;66g96;29?l7?:3:17b?89;29?xd40o0;694?:1y'5=?=99:0D9kj;I6f0>o2m3:17d89:188m4>52900c<96:188yg5?m3:187>50z&2<<<6891C8hk4H5g7?l3b2900e;850;9j5=4=831d=:750;9~f6>c290?6=4?{%3;=?7782B?ih5G4d68m0c=831b:;4?::k2<7<722e:;44?::a7=e=83>1<7>t$0::>4673A>ni6F;e59j1`<722c=:7>5;h3;6?6=3f;<57>5;|`0e=<72=0;6=u+19;9556<@=on7E:j4:k6a?6=3`<=6=44i0:1>5<<g8=26=44}c1b3?6=<3:1<v*>888245=O<lo0D9k;;h7f>5<<a?<1<75f19094?=h9>31<75rb2c5>5<3290;w)?79;334>N3ml1C8h:4i4g94?=n>?0;66g>8383>>i6?00;66sm3`794?2=83:p(<66:023?M2bm2B?i95f5d83>>o1>3:17d?72;29?j7013:17pl<a583>1<729q/=5751128L1cb3A>n86g:e;29?l012900e<6=:188k41>2900qo=n3;290?6=8r.:444>019K0`c<@=o?7d;j:188m30=831b=5<50;9l52?=831vn<m;:187>5<7s-;3577n;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm1ba94?2=83:p(<66:8c8L1cb3A>n86*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`2gg<72=0;6=u+19;9=d=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900c<6?:188yg7di3:187>50z&2<<<>i2B?ih5G4d68 d`=:2c>57>5;h42>5<<a??1<75`19294?=zj8i26=4;:183!7?133j7E:je:J7a1=#io097d;6:188m37=831b:84?::m2<5<722wi=n650;694?6|,82264o4H5gf?M2b<2.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl>c683>1<729q/=5759`9K0`c<@=o?7)oi:39j1<<722c==7>5;h46>5<<g82;6=44}c3`2?6=<3:1<v*>888:e>N3ml1C8h:4$`d96>o213:17d8>:188m33=831d=5>50;9~f4e2290?6=4?{%3;=??f3A>ni6F;e59'ec<53`?26=44i7394?=n><0;66a>8183>>{e9j91<7:50;2x 4>>20k0D9kj;I6f0>"fn380e8750;9j24<722c=97>5;n3;4?6=3th:o?4?:583>5}#91315l5G4dg8L1c33-km6?5f5883>>o193:17d8::188k4>72900qo<<1;290?6=8r.:4446a:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb31:>5<3290;w)?79;;b?M2bm2B?i95+ag81?l3>2900e;?50;9j20<722e:4=4?::a66>=83>1<7>t$0::><g<@=on7E:j4:&bb?4<a<31<75f6083>>o1=3:17b?70;29?xd5;>0;694?:1y'5=?=1h1C8hk4H5g7?!ga2;1b944?::k55?6=3`<>6=44o0:3>5<<uk88:7>54;294~"60002m6F;ed9K0`2<,hl1>6g:9;29?l062900e;;50;9l5=6=831vn?=::187>5<7s-;3577n;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm22694?2=83:p(<66:8c8L1cb3A>n86*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`176<72=0;6=u+19;9=d=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900c<6?:188yg44:3:187>50z&2<<<>i2B?ih5G4d68 d`=:2c>57>5;h42>5<<a??1<75`19294?=zj;9;6=4;:183!7?133j7E:je:J7a1=#io097d;6:188m37=831b:84?::m2<5<722wi>?h50;694?6|,82264o4H5gf?M2b<2.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl=7b83>1<729q/=5759`9K0`c<@=o?7)oi:39j1<<722c==7>5;h46>5<<g82;6=44}c0;0?6=<3:1<v*>888:e>N3ml1C8h:4$`d96>o213:17d8>:188m33=831d=5>50;9~f7>4290?6=4?{%3;=??f3A>ni6F;e59'ec<53`?26=44i7394?=n><0;66a>8183>>{e:181<7:50;2x 4>>20k0D9kj;I6f0>"fn380e8750;9j24<722c=97>5;n3;4?6=3th94<4?:583>5}#91315l5G4dg8L1c33-km6?5f5883>>o193:17d8::188k4>72900qo<70;290?6=8r.:4446a:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb35e>5<3290;w)?79;;b?M2bm2B?i95+ag81?l3>2900e;?50;9j20<722e:4=4?::a62c=83>1<7>t$0::><g<@=on7E:j4:&bb?4<a<31<75f6083>>o1=3:17b?70;29?xd5?m0;694?:1y'5=?=1h1C8hk4H5g7?!ga2;1b944?::k55?6=3`<>6=44o0:3>5<<uk8<n7>54;294~"60002m6F;ed9K0`2<,hl1>6g:9;29?l062900e;;50;9l5=6=831vn?9n:187>5<7s-;3577n;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm21d94?2=83:p(<66:8c8L1cb3A>n86*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`152<72=0;6=u+19;9=d=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900c<6?:188yg46>3:187>50z&2<<<>i2B?ih5G4d68 d`=:2c>57>5;h42>5<<a??1<75`19294?=zj;;>6=4;:183!7?133j7E:je:J7a1=#io097d;6:188m37=831b:84?::m2<5<722wi><:50;694?6|,82264o4H5gf?M2b<2.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl=1283>1<729q/=5759`9K0`c<@=o?7)oi:39j1<<722c==7>5;h46>5<<g82;6=44}c026?6=<3:1<v*>888:e>N3ml1C8h:4$`d96>o213:17d8>:188m33=831d=5>50;9~f776290?6=4?{%3;=??f3A>ni6F;e59'ec<53`?26=44i7394?=n><0;66a>8183>>{e:8:1<7:50;2x 4>>20k0D9kj;I6f0>"fn380e8750;9j24<722c=97>5;n3;4?6=3th9<h4?:583>5}#91315l5G4dg8L1c33-km6?5f5883>>o193:17d8::188k4>72900qo<?d;290?6=8r.:4446a:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb345>5<3290;w)?79;;b?M2bm2B?i95G559'bc<1991/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm27g94?2=83:p(<66:8c8L1cb3A>n86F:4:&eb?0682.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl=6e83>1<729q/=5759`9K0`c<@=o?7E;;;%de>3773-km6?5f5883>>o193:17d8::188k4>72900qo<9c;290?6=8r.:4446a:J7a`=O<l>0D8:4$gd9246<,hl1>6g:9;29?l062900e;;50;9l5=6=831vn?8m:187>5<7s-;3577n;I6fa>N3m=1C995+fg8555=#io097d;6:188m37=831b:84?::m2<5<722wi>;o50;694?6|,82264o4H5gf?M2b<2B>86*if;424>"fn380e8750;9j24<722c=97>5;n3;4?6=3th9:44?:583>5}#91315l5G4dg8L1c33A??7)hi:733?!ga2;1b944?::k55?6=3`<>6=44o0:3>5<<uk8=47>54;294~"60002m6F;ed9K0`2<@<>0(kh56028 d`=:2c>57>5;h42>5<<a??1<75`19294?=zj;<<6=4;:183!7?133j7E:je:J7a1=O==1/jk49119'ec<53`?26=44i7394?=n><0;66a>8183>>{e:??1<7:50;2x 4>>20k0D9kj;I6f0>N2<2.mj78>0:&bb?4<a<31<75f6083>>o1=3:17b?70;29?xd5>=0;694?:1y'5=?=1h1C8hk4H5g7?M333-lm6;??;%ce>7=n=00;66g91;29?l022900c<6?:188yg7a13:187>50z&2<<<>i2B?ih5G4d68L02<,ol1:<>4$`d96>o213:17d8>:188m33=831d=5>50;9~f766290?6=4?{%3;=??f3A>ni6F;e59K11=#no0===5+ag81?l3>2900e;?50;9j20<722e:4=4?::a656=83>1<7>t$0::><g<@=on7E:j4:J60>"an3<:<6*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`2bc<72=0;6=u+19;9=d=O<lo0D9k;;I77?!`a2?;;7)oi:39j1<<722c==7>5;h46>5<<g82;6=44}c3ea?6=<3:1<v*>888:e>N3ml1C8h:4H468 c`=>8:0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb0dg>5<3290;w)?79;;b?M2bm2B?i95G559'bc<1991/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm1ga94?2=83:p(<66:8c8L1cb3A>n86F:4:&eb?0682.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl>fc83>1<729q/=5759`9K0`c<@=o?7E;;;%de>3773-km6?5f5883>>o193:17d8::188k4>72900qo?ia;290?6=8r.:4446a:J7a`=O<l>0D8:4$gd9246<,hl1>6g:9;29?l062900e;;50;9l5=6=831vn<h7:187>5<7s-;3577n;I6fa>N3m=1C995+fg8555=#io097d;6:188m37=831b:84?::m2<5<722wi=k950;694?6|,82264o4H5gf?M2b<2B>86*if;424>"fn380e8750;9j24<722c=97>5;n3;4?6=3th:i>4?:583>5}#91315l5G4dg8L1c33-km6?5f5883>>o193:17d8::188k4>72900qo?jb;290?6=8r.:4446a:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb0gb>5<3290;w)?79;;b?M2bm2B?i95+ag81?l3>2900e;?50;9j20<722e:4=4?::a5`?=83>1<7>t$0::><g<@=on7E:j4:&bb?4<a<31<75f6083>>o1=3:17b?70;29?xd6m10;694?:1y'5=?=1h1C8hk4H5g7?!ga2;1b944?::k55?6=3`<>6=44o0:3>5<<uk;n;7>54;294~"60002m6F;ed9K0`2<,hl1>6g:9;29?l062900e;;50;9l5=6=831vn<k9:187>5<7s-;3577n;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm1d794?2=83:p(<66:8c8L1cb3A>n86*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`2a1<72=0;6=u+19;9=d=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900c<6?:188yg7b:3:187>50z&2<<<>i2B?ih5G4d68 d`=:2c>57>5;h42>5<<a??1<75`19294?=zj8o:6=4;:183!7?133j7E:je:J7a1=#io097d;6:188m37=831b:84?::m2<5<722wi>8>50;694?6|,82264o4H5gf?M2b<2.jj7<4i4;94?=n>80;66g95;29?j7?83:17pl=5983>1<729q/=5759`9K0`c<@=o?7)oi:39j1<<722c==7>5;h46>5<<g82;6=44}c063?6=<3:1<v*>888:e>N3ml1C8h:4$`d96>o213:17d8>:188m33=831d=5>50;9~f731290?6=4?{%3;=??f3A>ni6F;e59'ec<53`?26=44i7394?=n><0;66a>8183>>{e:<?1<7:50;2x 4>>20k0D9kj;I6f0>"fn380e8750;9j24<722c=97>5;n3;4?6=3th9994?:583>5}#91315l5G4dg8L1c33-km6?5f5883>>o193:17d8::188k4>72900qo<:3;290?6=8r.:4446a:J7a`=O<l>0(lh52:k6=?6=3`<:6=44i7794?=h91:1<75rb371>5<3290;w)?79;;b?M2bm2B?i95+ag81?l3>2900e;?50;9j20<722e:4=4?::a607=83>1<7>t$0::><g<@=on7E:j4:&bb?4<a<31<75f6083>>o1=3:17b?70;29?xd5<o0;694?:1y'5=?=1h1C8hk4H5g7?!ga2;1b944?::k55?6=3`<>6=44o0:3>5<<uk8?i7>54;294~"60002m6F;ed9K0`2<,hl1>6g:9;29?l062900e;;50;9l5=6=831vn>87:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd4?90;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb24f>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th8:i4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f60a290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl<6c83>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj:<j6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`02f<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn>88:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd4>?0;684?:1y'5=?=1l1C8hk4H5g7?!ga211b944?::k6g?6=3`<>6=44i05e>5<<g82;6=44}c15=?6==3:1<v*>888:f>N3ml1C8h:4$`d96>o213:17d;l:188m37=831b:84?::m2<5<722wi?8>50;194?6|,82269kk;I6fa>N3m=1b9h4?::ke0?6=3f;<57>5;|`01d<72:0;6=u+19;90`b<@=on7E:j4:k6a?6=3`l?6=44o05:>5<<uk9?h7>54;294~"6000:<=5G4dg8L1c33`?n6=44i7494?=n9181<75`16;94?=zj:?26=4<:183!7?13>nh6F;ed9K0`2<a<o1<75ff583>>i6?00;66sm35`94?2=83:p(<66:023?M2bm2B?i95f5d83>>o1>3:17d?72;29?j7013:17pl<5983>6<729q/=5754df8L1cb3A>n86g:e;29?l`32900c<96:188yg5313:187>50z&2<<<6891C8hk4H5g7?l3b2900e;850;9j5=4=831d=:750;9~f63029086=4?{%3;=?2bl2B?ih5G4d68m0c=831bj94?::m23<<722wi?9950;694?6|,8226<>?;I6fa>N3m=1b9h4?::k52?6=3`;3>7>5;n34=?6=3th89;4?:283>5}#91318hj4H5gf?M2b<2c>i7>5;hd7>5<<g8=26=44}c171?6=<3:1<v*>888245=O<lo0D9k;;h7f>5<<a?<1<75f19094?=h9>31<75rb276>5<4290;w)?79;6f`>N3ml1C8h:4i4g94?=nn=0;66a>7883>>{e;=91<7:50;2x 4>>28:;7E:je:J7a1=n=l0;66g96;29?l7?:3:17b?89;29?xd4==0;6>4?:1y'5=?=<ln0D9kj;I6f0>o2m3:17dh;:188k41>2900qo=;1;290?6=8r.:444>019K0`c<@=o?7d;j:188m30=831b=5<50;9l52?=831vn>;<:180>5<7s-;357:jd:J7a`=O<l>0e8k50;9jb1<722e:;44?::a76`=83>1<7>t$0::>4673A>ni6F;e59j1`<722c=:7>5;h3;6?6=3f;<57>5;|`017<72:0;6=u+19;90`b<@=on7E:j4:k6a?6=3`l?6=44o05:>5<<uk98h7>54;294~"6000:<=5G4dg8L1c33`?n6=44i7494?=n9181<75`16;94?=zj:>m6=4<:183!7?13>nh6F;ed9K0`2<a<o1<75ff583>>i6?00;66sm32`94?2=83:p(<66:023?M2bm2B?i95f5d83>>o1>3:17d?72;29?j7013:17pl<7d83>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj:2=6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`0<0<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn>6;:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd40:0;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb2:1>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th84<4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f6>7290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl<7g83>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj:=o6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`03f<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn?h;:187>5<7s-;3577n;I6fa>N3m=1/mk4=;h7:>5<<a?;1<75f6483>>i6090;66sm2g394?2=83:p(<66:8c8L1cb3A>n86*nf;08m0?=831b:<4?::k51?6=3f;3<7>5;|`1bg<72=0;6=u+19;9=d=O<lo0D9k;;%ce>7=n=00;66g91;29?l022900c<6?:188yg4a03:187>50z&2<<<>l2B?ih5G4d68 d`=02c>57>5;h46>5<<a8=m6=44o0:3>5<<uk8m;7>54;294~"60002h6F;ed9K0`2<,hl146g:9;29?l022900e<9i:188k4>72900qo:;9;291?6=8r.:4446b:J7a`=O<l>0(lh52:k6=?6=3`?h6=44i7394?=n><0;66a>8183>>{e<<;1<7;50;2x 4>>20h0D9kj;I6f0>"fn380e8750;9j1f<722c==7>5;h46>5<<g82;6=44}c67b?6==3:1<v*>888:f>N3ml1C8h:4$`d96>o213:17d;l:188m37=831b:84?::m2<5<722wi89k50;794?6|,82264l4H5gf?M2b<2.jj7<4i4;94?=n=j0;66g91;29?l022900c<6?:188yg2283:197>50z&2<<<>j2B?ih5G4d68 d`=:2c>57>5;h7`>5<<a?;1<75f6483>>i6090;66sm45a94?3=83:p(<66:8`8L1cb3A>n86*nf;08m0?=831b9n4?::k55?6=3`<>6=44o0:3>5<<uk>?n7>55;294~"60002n6F;ed9K0`2<,hl1>6g:9;29?l3d2900e;?50;9j20<722e:4=4?::a01b=83?1<7>t$0::><d<@=on7E:j4:&bb?4<a<31<75f5b83>>o193:17d8::188k4>72900qo:;8;291?6=8r.:4446e:J7a`=O<l>0(lh58:k6=?6=3`?h6=44i7794?=n9>l1<75`19294?=zj=><6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`70d<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn9=>:180>5<7s-;357:jd:J7a`=O<l>0e8k50;9jb1<722e:;44?::a06d=8391<7>t$0::>1cc3A>ni6F;e59j1`<722cm87>5;n34=?6=3th?>h4?:583>5}#9131==>4H5gf?M2b<2c>i7>5;h45>5<<a8296=44o05:>5<<uk>8m7>53;294~"6000?ii5G4dg8L1c33`?n6=44ig694?=h9>31<75rb50`>5<3290;w)?79;334>N3ml1C8h:4i4g94?=n>?0;66g>8383>>i6?00;66sm42;94?5=83:p(<66:5gg?M2bm2B?i95f5d83>>oa<3:17b?89;29?xd3:h0;694?:1y'5=?=99:0D9kj;I6f0>o2m3:17d89:188m4>52900c<96:188yg2403:1?7>50z&2<<<3mm1C8hk4H5g7?l3b2900ek:50;9l52?=831vn9<7:187>5<7s-;357??0:J7a`=O<l>0e8k50;9j23<722c:4?4?::m23<<722wi8>950;194?6|,82269kk;I6fa>N3m=1b9h4?::ke0?6=3f;<57>5;|`763<72=0;6=u+19;9556<@=on7E:j4:k6a?6=3`<=6=44i0:1>5<<g8=26=44}c602?6=;3:1<v*>8887aa=O<lo0D9k;;h7f>5<<ao>1<75`16;94?=zj=8?6=4;:183!7?13;;<6F;ed9K0`2<a<o1<75f6783>>o60;0;66a>7883>>{e<:?1<7=50;2x 4>>2=oo7E:je:J7a1=n=l0;66gi4;29?j7013:17pl;2383>1<729q/=5751128L1cb3A>n86g:e;29?l012900e<6=:188k41>2900qo:<4;297?6=8r.:444;ee9K0`c<@=o?7d;j:188mc2=831d=:750;9~f147290?6=4?{%3;=?7782B?ih5G4d68m0c=831b:;4?::k2<7<722e:;44?::a065=8391<7>t$0::>1cc3A>ni6F;e59j1`<722cm87>5;n34=?6=3th?=h4?:583>5}#9131==>4H5gf?M2b<2c>i7>5;h45>5<<a8296=44o05:>5<<uk>8<7>53;294~"6000?ii5G4dg8L1c33`?n6=44ig694?=h9>31<75rb53`>5<3290;w)?79;334>N3ml1C8h:4i4g94?=n>?0;66g>8383>>i6?00;66sm47294?3=83:p(<66:8`8L1cb3A>n86*nf;08m0?=831b9n4?::k55?6=3`<>6=44o0:3>5<<uk>>h7>55;294~"60002i6F;ed9K0`2<,hl146g:9;29?l3d2900e;;50;9j52`=831d=5>50;9~f13b290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;6283>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj=<:6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`727<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn989:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd3>=0;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb546>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?::4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f13a290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;7483>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj==o6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`73f<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn99m:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd3?h0;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb55:>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?;54?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f110290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;7783>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj==?6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`736<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn97m:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd31h0;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb5;:>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?554?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f1?0290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;9783>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj=3?6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`7=6<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn97=:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd3180;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb5;3>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?4k4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f1>b290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;8e83>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj=2h6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`7<g<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn966:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd3010;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb5:4>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?4;4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f1>2290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;8583>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj=286=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`7<7<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn96>:186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd3090;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb5c2>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?m=4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f1?a290>6=4?{%3;=??e3A>ni6F;e59'ec<53`?26=44i4a94?=n>80;66g95;29?j7?83:17pl;9d83>0<729q/=5759c9K0`c<@=o?7)oi:39j1<<722c>o7>5;h42>5<<a??1<75`19294?=zj=3o6=4::183!7?133i7E:je:J7a1=#io097d;6:188m0e=831b:<4?::k51?6=3f;3<7>5;|`7=f<72<0;6=u+19;9=g=O<lo0D9k;;%ce>7=n=00;66g:c;29?l062900e;;50;9l5=6=831vn97::186>5<7s-;3577m;I6fa>N3m=1/mk4=;h7:>5<<a<i1<75f6083>>o1=3:17b?70;29?xd30h0;684?:1y'5=?=1k1C8hk4H5g7?!ga2;1b944?::k6g?6=3`<:6=44i7794?=h91:1<75rb55e>5<2290;w)?79;;a?M2bm2B?i95+ag81?l3>2900e8m50;9j24<722c=97>5;n3;4?6=3th?;h4?:483>5}#91315o5G4dg8L1c33-km6?5f5883>>o2k3:17d8>:188m33=831d=5>50;9~f1bb29086=4?{%3;=?`>3A>ni6F;e59'ec<582cj?7>5;hc7>5<<g8=26=44}c6g7?6=;3:1<v*>888e=>N3ml1C8h:4$`d965=ni:0;66gn4;29?j7013:17pl>b583>6<729q/=575f89K0`c<@=o?7)oi:318md5=831bm94?::m23<<722wi=o=50;194?6|,8226k74H5gf?M2b<2.jj7<<;hc0>5<<ah>1<75`16;94?=zj8h96=4<:183!7?13l27E:je:J7a1=#io09?6gn3;29?lg32900c<96:188yg7e93:1?7>50z&2<<<a12B?ih5G4d68 d`=::1bm>4?::kb0?6=3f;<57>5;|`2f5<72:0;6=u+19;9b<=O<lo0D9k;;%ce>75<ah91<75fa583>>i6?00;66sm1`d94?5=83:p(<66:g;8L1cb3A>n86*nf;00?lg42900el:50;9l52?=831vn<oj:180>5<7s-;357h6;I6fa>N3m=1/mk4=3:kb7?6=3`k?6=44o05:>5<<uk;jh7>53;294~"6000m56F;ed9K0`2<,hl1>>5fa283>>of<3:17b?89;29?xd6ij0;6>4?:1y'5=?=n01C8hk4H5g7?!ga2;90el=50;9je1<722e:;44?::a5dd=8391<7>t$0::>c?<@=on7E:j4:&bb?443`k86=44i`694?=h9>31<75rb0;`>5<4290;w)?79;d:?M2bm2B?i95+ag817>of;3:17do;:188k41>2900qo?6b;297?6=8r.:444i9:J7a`=O<l>0(lh5229je6<722cj87>5;n34=?6=3th:5l4?:283>5}#9131j45G4dg8L1c33-km6?=4i`194?=ni=0;66a>7883>>{e9031<7=50;2x 4>>2o30D9kj;I6f0>"fn3887do<:188md2=831d=:750;9~f4??29086=4?{%3;=?`>3A>ni6F;e59'ec<5;2cj?7>5;hc7>5<<g8=26=44}c3:3?6=;3:1<v*>888e=>N3ml1C8h:4$`d966=ni:0;66gn4;29?j7013:17pl>9783>6<729q/=575f89K0`c<@=o?7)oi:318md5=831bm94?::m23<<722wi=4;50;194?6|,8226k74H5gf?M2b<2.jj7<<;hc0>5<<ah>1<75`16;94?=zj83?6=4<:183!7?13l27E:je:J7a1=#io09?6gn3;29?lg32900c<96:188yg7>;3:1?7>50z&2<<<a12B?ih5G4d68 d`=::1bm>4?::kb0?6=3f;<57>5;|`1b6<72=0;6=u+19;9bd=O<lo0D9k;;%ce>7g<ah91<75fa583>>of=3:17b?89;29?xd5nh0;684?:1y'5=?=nm1C8hk4H5g7?!ga2<h0el=50;9je1<722cj97>5;hc5>5<<g8=26=44}c0e2?6==3:1<v*>888e`>N3ml1C8h:4$`d962=ni:0;66gn4;29?lg22900el850;9l52?=831vn9??:180>5<7s-;357h6;I6fa>N3m=1/mk4=0:kb7?6=3`k?6=44o05:>5<<uk8nj7>54;294~"6000mm6F;ed9K0`2<,hl1>85fa283>>of<3:17do::188k41>2900qo?6e;291?6=8r.:444id:J7a`=O<l>0(lh5399je6<722cj87>5;hc6>5<<ah<1<75`16;94?=zj;on6=4::183!7?13lo7E:je:J7a1=#io09>6gn3;29?lg32900el;50;9je3<722e:;44?::a0fd=8391<7>t$0::>c?<@=on7E:j4:&bb??43`k86=44i`694?=h9>31<75rb2`7>5<4290;w)?79;d:?M2bm2B?i95+ag801>of;3:17do;:188k41>2900qo=6d;297?6=8r.:444i9:J7a`=O<l>0(lh5349je6<722cj87>5;n34=?6=3th8>44?:283>5}#9131j45G4dg8L1c33-km6>;4i`194?=ni=0;66a>7883>>{e;881<7=50;2x 4>>2o30D9kj;I6f0>"fn39>7do<:188md2=831d=:750;9~f6d4290>6=4?{%3;=?`c3A>ni6F;e59'ec<4>2cj?7>5;hc7>5<<ah?1<75fa783>>i6?00;66sm38a94?3=83:p(<66:gf8L1cb3A>n86*nf;15?lg42900el:50;9je0<722cj:7>5;n34=?6=3th8>54?:483>5}#9131ji5G4dg8L1c33-km6>84i`194?=ni=0;66gn5;29?lg12900c<96:188yg5693:197>50z&2<<<al2B?ih5G4d68 d`=;?1bm>4?::kb0?6=3`k>6=44i`494?=h9>31<75rb3a4>5<2290;w)?79;dg?M2bm2B?i95+ag82g>of;3:17do;:188md3=831bm;4?::m23<<722wi?o<50;794?6|,8226kj4H5gf?M2b<2.jj7=9;hc0>5<<ah>1<75fa483>>of>3:17b?89;29?xd41k0;684?:1y'5=?=nm1C8hk4H5g7?!ga2:<0el=50;9je1<722cj97>5;hc5>5<<g8=26=44}c113?6==3:1<v*>888e`>N3ml1C8h:4$`d973=ni:0;66gn4;29?lg22900el850;9l52?=831vn>??:186>5<7s-;357hk;I6fa>N3m=1/mk4<6:kb7?6=3`k?6=44i`794?=ni?0;66a>7883>>{e;k;1<7;50;2x 4>>2on0D9kj;I6f0>"fn39=7do<:188md2=831bm84?::kb2?6=3f;<57>5;|`0=d<72<0;6=u+19;9ba=O<lo0D9k;;%ce>60<ah91<75fa583>>of=3:17do9:188k41>2900qo==6;291?6=8r.:444id:J7a`=O<l>0(lh5379je6<722cj87>5;hc6>5<<ah<1<75`16;94?=zj::m6=4::183!7?13lo7E:je:J7a1=#io08:6gn3;29?lg32900el;50;9je3<722e:;44?::a7g6=83?1<7>t$0::>cb<@=on7E:j4:&bb?513`k86=44i`694?=ni<0;66gn6;29?j7013:17pl<9883>0<729q/=575fe9K0`c<@=o?7)oi:248md5=831bm94?::kb1?6=3`k=6=44o05:>5<<uk9997>55;294~"6000mh6F;ed9K0`2<,hl1?;5fa283>>of<3:17do::188md0=831d=:750;9~f66b290>6=4?{%3;=?`c3A>ni6F;e59'ec<4>2cj?7>5;hc7>5<<ah?1<75fa783>>i6?00;66sm33g94?2=83:p(<66:gc8L1cb3A>n86*nf;;;?lg42900el:50;9je0<722e:;44?::a7gg=83?1<7>t$0::>cb<@=on7E:j4:&bb?313`k86=44i`694?=ni<0;66gn6;29?j7013:17pl<ag83>0<729q/=575fe9K0`c<@=o?7)oi:248md5=831bm94?::kb1?6=3`k=6=44o05:>5<<uk9;h7>55;294~"6000mh6F;ed9K0`2<,hl1?;5fa283>>of<3:17do::188md0=831d=:750;9~f6??290>6=4?{%3;=?`c3A>ni6F;e59'ec<4>2cj?7>5;hc7>5<<ah?1<75fa783>>i6?00;66sm33694?3=83:p(<66:gf8L1cb3A>n86*nf;15?lg42900el:50;9je0<722cj:7>5;n34=?6=3th:m94?:283>5}#9131j45G4dg8L1c33-km6?=4i`194?=ni=0;66a>7883>>{e90n1<7=50;2x 4>>2o30D9kj;I6f0>"fn39>7do<:188md2=831d=:750;9~f7b229086=4?{%3;=?`>3A>ni6F;e59'ec<582cj?7>5;hc7>5<<g8=26=44}c1`=?6=;3:1<v*>888e=>N3ml1C8h:4$`d966=ni:0;66gn4;29?j7013:17pl=d683>1<729q/=575f`9K0`c<@=o?7)oi:0`8md5=831bm94?::kb1?6=3f;<57>5;|`0gd<72=0;6=u+19;9bd=O<lo0D9k;;%ce>7><ah91<75fa583>>of=3:17b?89;29?xd5l00;684?:1y'5=?=nm1C8hk4H5g7?!ga2;>0el=50;9je1<722cj97>5;hc5>5<<g8=26=44}c1`f?6==3:1<v*>888e`>N3ml1C8h:4$`d96<=ni:0;66gn4;29?lg22900el850;9l52?=831vn?h?:180>5<7s-;357h6;I6fa>N3m=1/mk4=3:kb7?6=3`k?6=44o05:>5<<uk8on7>54;294~"6000mm6F;ed9K0`2<,hl1?=5fa283>>of<3:17do::188k41>2900qo<kf;291?6=8r.:444id:J7a`=O<l>0(lh5389je6<722cj87>5;hc6>5<<ah<1<75`16;94?=zj:in6=4<:183!7?13l27E:je:J7a1=#io0896gn3;29?lg32900c<96:188yg5dn3:187>50z&2<<<ai2B?ih5G4d68 d`==h1bm>4?::kb0?6=3`k>6=44o05:>5<<uk;j47>53;294~"6000m56F;ed9K0`2<,hl1>>5fa283>>of<3:17b?89;29?xd6i;0;6>4?:1y'5=?=n01C8hk4H5g7?!ga2;90el=50;9je1<722e:;44?::a5d3=83>1<7>t$0::>cg<@=on7E:j4:&bb?503`k86=44i`694?=ni<0;66a>7883>>{e:m:1<7:50;2x 4>>2ok0D9kj;I6f0>"fn38n7do<:188md2=831bm84?::m23<<722wi>nk50;794?6|,8226kj4H5gf?M2b<2.jj794i`194?=ni=0;66gn5;29?lg12900c<96:188yg4bj3:1?7>50z&2<<<a12B?ih5G4d68 d`=:91bm>4?::kb0?6=3f;<57>5;|`1af<72:0;6=u+19;9b<=O<lo0D9k;;%ce>7b<ah91<75fa583>>i6?00;66sm2df94?3=83:p(<66:gf8L1cb3A>n86*nf;;7?lg42900el:50;9je0<722cj:7>5;n34=?6=3th9ok4?:583>5}#9131jl5G4dg8L1c33-km6;5fa283>>of<3:17do::188k41>2900qo<lb;297?6=8r.:444i9:J7a`=O<l>0(lh52e9je6<722cj87>5;n34=?6=3th9oi4?:483>5}#9131ji5G4dg8L1c33-km64:4i`194?=ni=0;66gn5;29?lg12900c<96:188yg4b;3:197>50z&2<<<al2B?ih5G4d68 d`==:1bm>4?::kb0?6=3`k>6=44i`494?=h9>31<75rb2a`>5<2290;w)?79;dg?M2bm2B?i95+ag81g>of;3:17do;:188md3=831bm;4?::m23<<722wi=5o50;194?6|,8226k74H5gf?M2b<2.jj7<<;hc0>5<<ah>1<75`16;94?=zj:>n6=4=:183!7?13l37E:je:J7a1=#io0:56gn3;29?j7013:17pl<4b83>7<729q/=575f99K0`c<@=o?7)oi:0;8md5=831d=:750;9~f62f29096=4?{%3;=?`?3A>ni6F;e59'ec<612cj?7>5;n34=?6=3th8854?:383>5}#9131j55G4dg8L1c33-km6<74i`194?=h9>31<75rb265>5<5290;w)?79;d;?M2bm2B?i95+ag82=>of;3:17b?89;29?xd4<=0;6?4?:1y'5=?=n11C8hk4H5g7?!ga2830el=50;9l52?=831vn>:=:181>5<7s-;357h7;I6fa>N3m=1/mk4>9:kb7?6=3f;<57>5;|`005<72;0;6=u+19;9b==O<lo0D9k;;%ce>4?<ah91<75`16;94?=zj:9n6=4=:183!7?13l37E:je:J7a1=#io0:56gn3;29?j7013:17pl<3b83>7<729q/=575f99K0`c<@=o?7)oi:0;8md5=831d=:750;9~f14a29096=4?{%3;=?`?3A>ni6F;e59'ec<612cj?7>5;n34=?6=3th?>i4?:383>5}#9131j55G4dg8L1c33-km6<74i`194?=h9>31<75rb50a>5<5290;w)?79;d;?M2bm2B?i95+ag82=>of;3:17b?89;29?xd3:00;6?4?:1y'5=?=n11C8hk4H5g7?!ga2830el=50;9l52?=831vn9<8:181>5<7s-;357h7;I6fa>N3m=1/mk4>9:kb7?6=3f;<57>5;|`760<72;0;6=u+19;9b==O<lo0D9k;;%ce>4?<ah91<75`16;94?=zj=886=4=:183!7?13l37E:je:J7a1=#io0:56gn3;29?j7013:17pl;2083>7<729q/=575f99K0`c<@=o?7)oi:0;8md5=831d=:750;9~f17a29096=4?{%3;=?`?3A>ni6F;e59'ec<612cj?7>5;n34=?6=3th?=i4?:383>5}#9131j55G4dg8L1c33-km6<74i`194?=h9>31<75rb272>5<5290;w)?79;d;?M2bm2B?i95+ag82=>of;3:17b?89;29?xd3;;0;6?4?:1y'5=?=n11C8hk4H5g7?!ga2830el=50;9l52?=831vn<6m:187>5<7s-;357hn;I6fa>N3m=1/mk4<7:kb7?6=3`k?6=44i`794?=h9>31<75rb0:g>5<3290;w)?79;db?M2bm2B?i95+ag803>of;3:17do;:188md3=831d=:750;9~f4>a290?6=4?{%3;=?`f3A>ni6F;e59'ec<4?2cj?7>5;hc7>5<<ah?1<75`16;94?=zj83:6=4;:183!7?13lj7E:je:J7a1=#io08;6gn3;29?lg32900el;50;9l52?=831vn<o>:187>5<7s-;357hn;I6fa>N3m=1/mk4<7:kb7?6=3`k?6=44i`794?=h9>31<75rb3g4>5<2290;w)?79;dg?M2bm2B?i95+ag861>of;3:17do;:188md3=831bm;4?::m23<<722wi?i650;194?6|,8226k74H5gf?M2b<2.jj7<k;hc0>5<<ah>1<75`16;94?=zj;oj6=4::183!7?13lo7E:je:J7a1=#io02;6gn3;29?lg32900el;50;9je3<722e:;44?::a7fb=83>1<7>t$0::>cg<@=on7E:j4:&bb?4b3`k86=44i`694?=ni<0;66a>7883>>{e:jk1<7;50;2x 4>>2on0D9kj;I6f0>"fn38m7do<:188md2=831bm84?::kb2?6=3f;<57>5;|`1`4<72<0;6=u+19;9ba=O<lo0D9k;;%ce>7`<ah91<75fa583>>of=3:17do9:188k41>2900qo<k3;291?6=8r.:444id:J7a`=O<l>0(lh51`9je6<722cj87>5;hc6>5<<ah<1<75`16;94?=zj;o>6=4::183!7?13lo7E:je:J7a1=#io09=6gn3;29?lg32900el;50;9je3<722e:;44?::a6`>=83?1<7>t$0::>cb<@=on7E:j4:&bb?4d3`k86=44i`694?=ni<0;66gn6;29?j7013:17pl=c883>0<729q/=575fe9K0`c<@=o?7)oi:3a8md5=831bm94?::kb1?6=3`k=6=44o05:>5<<uk9o<7>54;294~"6000mm6F;ed9K0`2<,hl1>h5fa283>>of<3:17do::188k41>2900qo=k6;291?6=8r.:444id:J7a`=O<l>0(lh5289je6<722cj87>5;hc6>5<<ah<1<75`16;94?=zj:n:6=4::183!7?13lo7E:je:J7a1=#io09j6gn3;29?lg32900el;50;9je3<722e:;44?::a7a1=83?1<7>t$0::>cb<@=on7E:j4:&bb?4>3`k86=44i`694?=ni<0;66gn6;29?j7013:17pl<d383>0<729q/=575fe9K0`c<@=o?7)oi:3d8md5=831bm94?::kb1?6=3`k=6=44o05:>5<<uk9h97>55;294~"6000mh6F;ed9K0`2<,hl1>k5fa283>>of<3:17do::188md0=831d=:750;9~f6b4290>6=4?{%3;=?`c3A>ni6F;e59'ec<5k2cj?7>5;hc7>5<<ah?1<75fa783>>i6?00;66sm3b594?3=83:p(<66:gf8L1cb3A>n86*nf;1b?lg42900el:50;9je0<722cj:7>5;n34=?6=3th9i94?:483>5}#9131ji5G4dg8L1c33-km6?m4i`194?=ni=0;66gn5;29?lg12900c<96:188yg7f?3:197>50z&2<<<al2B?ih5G4d68 d`=;11bm>4?::kb0?6=3`k>6=44i`494?=h9>31<75rb0cb>5<2290;w)?79;dg?M2bm2B?i95+ag812>of;3:17do;:188md3=831bm;4?::m23<<722wi=4<50;794?6|,8226kj4H5gf?M2b<2.jj7<9;hc0>5<<ah>1<75fa483>>of>3:17b?89;29?xd6i00;694?:1y'5=?=nh1C8hk4H5g7?!ga2:=0el=50;9je1<722cj97>5;n34=?6=3th9i=4?:483>5}#9131ji5G4dg8L1c33-km6?:4i`194?=ni=0;66gn5;29?lg12900c<96:188yg5c=3:197>50z&2<<<al2B?ih5G4d68 d`=:o1bm>4?::kb0?6=3`k>6=44i`494?=h9>31<75rb2f7>5<2290;w)?79;dg?M2bm2B?i95+ag81=>of;3:17do;:188md3=831bm;4?::m23<<722wi=l>50;794?6|,8226kj4H5gf?M2b<2.jj7<9;hc0>5<<ah>1<75fa483>>of>3:17b?89;29?xd61o0;684?:1y'5=?=nm1C8hk4H5g7?!ga2:20el=50;9je1<722cj97>5;hc5>5<<g8=26=44}c3b2?6==3:1<v*>888e`>N3ml1C8h:4$`d963=ni:0;66gn4;29?lg22900el850;9l52?=831vn<7?:186>5<7s-;357hk;I6fa>N3m=1/mk4=6:kb7?6=3`k?6=44i`794?=ni?0;66a>7883>>{e91o1<7;50;2x 4>>2on0D9kj;I6f0>"fn38=7do<:188md2=831bm84?::kb2?6=3f;<57>5;|`2e6<72=0;6=u+19;9bd=O<lo0D9k;;%ce>61<ah91<75fa583>>of=3:17b?89;29?xd60j0;684?:1y'5=?=nm1C8hk4H5g7?!ga2;<0el=50;9je1<722cj97>5;hc5>5<<g8=26=44}c1`<?6=:3:1<v*>888e6>N3ml1C8h:4i`094?=h9>31<75rb5a5>5<3:3:1<v*>8882<4=O<lo0D9k;;[7;>d}f2k08=7==:07953<4;3;<6>:5198~ `c=<2.nj7:4$`590>"f03>0(l754:&be?2<,hh186*nc;68 4>22:1/=5853:&a4?2<,k;186*m2;68 g5=<2.i87:4$c790>"e>3>0(o954:&a<?2<,k3186*ma;68 gd=<2.io7:4$cf90>"em3>0(oh54:&`4?2<,j;186*l2;68 f5=<2.h87:4$b790>"d>3>0(n954:&`<?2<,j3186*la;68 fd=<2.ho7:4$bf90>"dm3>0(nh54:&g4?2<,m;186*k2;68 a5=<2.o87:4$e790>"c>3>0(i954:&g<?2<,m3186*ka;68 ad=<2.oo7:4$ef90>"cm3>0(ih54:&f4?2<,l;186*j2;68 `5=<2.n87:4$d790>"b>3>0(h954:&f<?2<,l3186*ja;68 `d=<2.no7:4$df90>"3mk0?i45+ae87?!7?;3;<46*i0;18 c7=;2.?il4;e89'e`<33`?m6=44i7294?=n1<0;66g66;29?l7??3:17d?78;29?l2b?3:17d:j8;29?l5c290/=:k53b9m52b=821b8;4?:%34a?5d3g;<h7?4;h66>5<#9>o1?n5a16f96>=n<=0;6)?8e;1`?k70l3907d:<:18'52c=;j1e=:j54:9j07<72-;<i7=l;o34`?3<3`>:6=4+16g97f=i9>n1:65f4183>!70m39h7c?8d;58?l5a290/=:k53b9m52b=021b?h4?:%34a?5d3g;<h774;h1a>5<#9>o1?n5a16f9e>=n<00;6)?8e;6;?k70l3:07d;=:18'52c=<11e=:j51:9j14<72-;<i7:7;o34`?4<3`?;6=4+16g90==i9>n1?65f4g83>!70m3>37c?8d;68?l2b290/=:k5499m52b==21b8i4?:%34a?2?3g;<h784;h6`>5<#9>o1855a16f93>=n<k0;6)?8e;6;?k70l3207d:n:18'52c=<11e=:j59:9j02<72-;<i7:7;o34`?g<3`<m6=4+16g92`=i9>n1<65f6e83>!70m3<n7c?8d;38?l0d290/=:k56d9m52b=:21b:o4?:%34a?0b3g;<h7=4;h4b>5<#9>o1:h5a16f90>=n>00;6)?8e;4f?k70l3?07d87:18'52c=>l1e=:j56:9j22<72-;<i78j;o34`?1<3`=36=4+16g932=i9>n1<65f7783>!70m3=<7c?8d;38?l12290/=:k5769m52b=:21b;94?:%34a?103g;<h7=4;h50>5<#9>o1;:5a16f90>=n?;0;6)?8e;54?k70l3?07d9>:18'52c=?>1e=:j56:9j35<72-;<i798;o34`?1<3`=j6=4+16g93<=i9>n1<65f7b83>!70m3=i7c?8d;28?j>2290/=:k5859m52b=821d4>4?:%34a?>33g;<h7?4;n:1>5<#9>o1495a16f96>=h080;6)?8e;:7?k70l3907b6?:18'52c=0=1e=:j54:9l3c<72-;<i76;;o34`?3<3f=n6=4+16g9<1=i9>n1:65`7e83>!70m32?7c?8d;58?j?7290/=:k58g9m52b=821d4h4?:%34a?>c3g;<h7>4;n:`>5<#9>o14i5a16f95>=h0k0;6)?8e;:g?k70l3807b6n:18'52c=0m1e=:j53:9l<<<72-;<i76k;o34`?2<3f236=4+16g9<a=i9>n1965`8683>!70m32o7c?8d;48?j>1290/=:k58e9m52b=?21d5?4?:%34a??63g;<h7>4;|`7g2<72=81<7>t$0::>4>63A>ni6F;e59Y1=<fsh0i6>?533821?712:91=:4<4;3;>x"bm3>0(hh54:&b3?2<,h2186*n9;68 dg=<2.jn7:4$`a90>"60<087)?76;18 g6=<2.i=7:4$c090>"e;3>0(o:54:&a1?2<,k<186*m7;68 g>=<2.i57:4$cc90>"ej3>0(om54:&a`?2<,ko186*mf;68 f6=<2.h=7:4$b090>"d;3>0(n:54:&`1?2<,j<186*l7;68 f>=<2.h57:4$bc90>"dj3>0(nm54:&``?2<,jo186*lf;68 a6=<2.o=7:4$e090>"c;3>0(i:54:&g1?2<,m<186*k7;68 a>=<2.o57:4$ec90>"cj3>0(im54:&g`?2<,mo186*kf;68 `6=<2.n=7:4$d090>"b;3>0(h:54:&f1?2<,l<186*j7;68 `>=<2.n57:4$dc90>"bj3>0(hm54:&f`?2<,=oi69k6;%cg>1=#9191=:64$g297>"a9390(9kn:5g:?!gb2=1b9k4?::k54?6=3`3>6=44i8494?=n91=1<75f19:94?=n<l=1<75f4d:94?=n;m0;6)?8e;1`?k70l3:07d:9:18'52c=;j1e=:j51:9j00<72-;<i7=l;o34`?4<3`>?6=4+16g97f=i9>n1?65f4283>!70m39h7c?8d;68?l25290/=:k53b9m52b==21b8<4?:%34a?5d3g;<h784;h63>5<#9>o1?n5a16f93>=n;o0;6)?8e;1`?k70l3207d=j:18'52c=;j1e=:j59:9j7g<72-;<i7=l;o34`?g<3`>26=4+16g90==i9>n1<65f5383>!70m3>37c?8d;38?l36290/=:k5499m52b=:21b9=4?:%34a?2?3g;<h7=4;h6e>5<#9>o1855a16f90>=n<l0;6)?8e;6;?k70l3?07d:k:18'52c=<11e=:j56:9j0f<72-;<i7:7;o34`?1<3`>i6=4+16g90==i9>n1465f4`83>!70m3>37c?8d;;8?l20290/=:k5499m52b=i21b:k4?:%34a?0b3g;<h7>4;h4g>5<#9>o1:h5a16f95>=n>j0;6)?8e;4f?k70l3807d8m:18'52c=>l1e=:j53:9j2d<72-;<i78j;o34`?2<3`<26=4+16g92`=i9>n1965f6983>!70m3<n7c?8d;48?l00290/=:k56d9m52b=?21b;54?:%34a?103g;<h7>4;h55>5<#9>o1;:5a16f95>=n?<0;6)?8e;54?k70l3807d9;:18'52c=?>1e=:j53:9j36<72-;<i798;o34`?2<3`=96=4+16g932=i9>n1965f7083>!70m3=<7c?8d;48?l17290/=:k5769m52b=?21b;l4?:%34a?1>3g;<h7>4;h5`>5<#9>o1;o5a16f94>=h0<0;6)?8e;:7?k70l3:07b6<:18'52c=0=1e=:j51:9l<7<72-;<i76;;o34`?4<3f2:6=4+16g9<1=i9>n1?65`8183>!70m32?7c?8d;68?j1a290/=:k5859m52b==21d;h4?:%34a?>33g;<h784;n5g>5<#9>o1495a16f93>=h190;6)?8e;:e?k70l3:07b6j:18'52c=0m1e=:j50:9l<f<72-;<i76k;o34`?7<3f2i6=4+16g9<a=i9>n1>65`8`83>!70m32o7c?8d;18?j>>290/=:k58e9m52b=<21d454?:%34a?>c3g;<h7;4;n:4>5<#9>o14i5a16f92>=h0?0;6)?8e;:g?k70l3=07b7=:18'52c=181e=:j50:9~f1e?290?>7>50z&2<<<6081C8hk4H5g7?_3?2hqj6o4<1;11>43=9?08?7?8:2695=<z,lo186*jf;68 d1=<2.j47:4$`;90>"fi3>0(ll54:&bg?2<,82>6>5+19497>"e83>0(o?54:&a6?2<,k9186*m4;68 g3=<2.i:7:4$c590>"e03>0(o754:&ae?2<,kh186*mc;68 gb=<2.ii7:4$cd90>"d83>0(n?54:&`6?2<,j9186*l4;68 f3=<2.h:7:4$b590>"d03>0(n754:&`e?2<,jh186*lc;68 fb=<2.hi7:4$bd90>"c83>0(i?54:&g6?2<,m9186*k4;68 a3=<2.o:7:4$e590>"c03>0(i754:&ge?2<,mh186*kc;68 ab=<2.oi7:4$ed90>"b83>0(h?54:&f6?2<,l9186*j4;68 `3=<2.n:7:4$d590>"b03>0(h754:&fe?2<,lh186*jc;68 `b=<2.?io4;e89'ea<33-;3?7?88:&e4?5<,o;1?6*;e`87a<=#il0?7d;i:188m36=831b584?::k:2?6=3`;3;7>5;h3;<?6=3`>n;7>5;h6f<?6=3`9o6=4+16g97f=i9>n1<65f4783>!70m39h7c?8d;38?l22290/=:k53b9m52b=:21b894?:%34a?5d3g;<h7=4;h60>5<#9>o1?n5a16f90>=n<;0;6)?8e;1`?k70l3?07d:>:18'52c=;j1e=:j56:9j05<72-;<i7=l;o34`?1<3`9m6=4+16g97f=i9>n1465f3d83>!70m39h7c?8d;;8?l5e290/=:k53b9m52b=i21b844?:%34a?2?3g;<h7>4;h71>5<#9>o1855a16f95>=n=80;6)?8e;6;?k70l3807d;?:18'52c=<11e=:j53:9j0c<72-;<i7:7;o34`?2<3`>n6=4+16g90==i9>n1965f4e83>!70m3>37c?8d;48?l2d290/=:k5499m52b=?21b8o4?:%34a?2?3g;<h764;h6b>5<#9>o1855a16f9=>=n<>0;6)?8e;6;?k70l3k07d8i:18'52c=>l1e=:j50:9j2a<72-;<i78j;o34`?7<3`<h6=4+16g92`=i9>n1>65f6c83>!70m3<n7c?8d;18?l0f290/=:k56d9m52b=<21b:44?:%34a?0b3g;<h7;4;h4;>5<#9>o1:h5a16f92>=n>>0;6)?8e;4f?k70l3=07d97:18'52c=?>1e=:j50:9j33<72-;<i798;o34`?7<3`=>6=4+16g932=i9>n1>65f7583>!70m3=<7c?8d;18?l14290/=:k5769m52b=<21b;?4?:%34a?103g;<h7;4;h52>5<#9>o1;:5a16f92>=n?90;6)?8e;54?k70l3=07d9n:18'52c=?01e=:j50:9j3f<72-;<i79m;o34`?6<3f2>6=4+16g9<1=i9>n1<65`8283>!70m32?7c?8d;38?j>5290/=:k5859m52b=:21d4<4?:%34a?>33g;<h7=4;n:3>5<#9>o1495a16f90>=h?o0;6)?8e;:7?k70l3?07b9j:18'52c=0=1e=:j56:9l3a<72-;<i76;;o34`?1<3f3;6=4+16g9<c=i9>n1<65`8d83>!70m32o7c?8d;28?j>d290/=:k58e9m52b=921d4o4?:%34a?>c3g;<h7<4;n:b>5<#9>o14i5a16f97>=h000;6)?8e;:g?k70l3>07b67:18'52c=0m1e=:j55:9l<2<72-;<i76k;o34`?0<3f2=6=4+16g9<a=i9>n1;65`9383>!70m33:7c?8d;28?xd3k00;69<50;2x 4>>282:7E:je:J7a1=]=10jwl4m:23977<6=3;=6>=516800?7?2t.ni7:4$dd90>"f?3>0(l654:&b=?2<,hk186*nb;68 de=<2.:484<;%3;2?5<,k:186*m1;68 g4=<2.i?7:4$c690>"e=3>0(o854:&a3?2<,k2186*m9;68 gg=<2.in7:4$ca90>"el3>0(ok54:&ab?2<,j:186*l1;68 f4=<2.h?7:4$b690>"d=3>0(n854:&`3?2<,j2186*l9;68 fg=<2.hn7:4$ba90>"dl3>0(nk54:&`b?2<,m:186*k1;68 a4=<2.o?7:4$e690>"c=3>0(i854:&g3?2<,m2186*k9;68 ag=<2.on7:4$ea90>"cl3>0(ik54:&gb?2<,l:186*j1;68 `4=<2.n?7:4$d690>"b=3>0(h854:&f3?2<,l2186*j9;68 `g=<2.nn7:4$da90>"bl3>0(9km:5g:?!gc2=1/=5=516:8 c6=;2.m=7=4$5gb>1c>3-kn695f5g83>>o183:17d7::188m<0=831b=5950;9j5=>=831b8h950;9j0`>=831b?i4?:%34a?5d3g;<h7>4;h65>5<#9>o1?n5a16f95>=n<<0;6)?8e;1`?k70l3807d:;:18'52c=;j1e=:j53:9j06<72-;<i7=l;o34`?2<3`>96=4+16g97f=i9>n1965f4083>!70m39h7c?8d;48?l27290/=:k53b9m52b=?21b?k4?:%34a?5d3g;<h764;h1f>5<#9>o1?n5a16f9=>=n;k0;6)?8e;1`?k70l3k07d:6:18'52c=<11e=:j50:9j17<72-;<i7:7;o34`?7<3`?:6=4+16g90==i9>n1>65f5183>!70m3>37c?8d;18?l2a290/=:k5499m52b=<21b8h4?:%34a?2?3g;<h7;4;h6g>5<#9>o1855a16f92>=n<j0;6)?8e;6;?k70l3=07d:m:18'52c=<11e=:j58:9j0d<72-;<i7:7;o34`??<3`><6=4+16g90==i9>n1m65f6g83>!70m3<n7c?8d;28?l0c290/=:k56d9m52b=921b:n4?:%34a?0b3g;<h7<4;h4a>5<#9>o1:h5a16f97>=n>h0;6)?8e;4f?k70l3>07d86:18'52c=>l1e=:j55:9j2=<72-;<i78j;o34`?0<3`<<6=4+16g92`=i9>n1;65f7983>!70m3=<7c?8d;28?l11290/=:k5769m52b=921b;84?:%34a?103g;<h7<4;h57>5<#9>o1;:5a16f97>=n?:0;6)?8e;54?k70l3>07d9=:18'52c=?>1e=:j55:9j34<72-;<i798;o34`?0<3`=;6=4+16g932=i9>n1;65f7`83>!70m3=27c?8d;28?l1d290/=:k57c9m52b=821d484?:%34a?>33g;<h7>4;n:0>5<#9>o1495a16f95>=h0;0;6)?8e;:7?k70l3807b6>:18'52c=0=1e=:j53:9l<5<72-;<i76;;o34`?2<3f=m6=4+16g9<1=i9>n1965`7d83>!70m32?7c?8d;48?j1c290/=:k5859m52b=?21d5=4?:%34a?>a3g;<h7>4;n:f>5<#9>o14i5a16f94>=h0j0;6)?8e;:g?k70l3;07b6m:18'52c=0m1e=:j52:9l<d<72-;<i76k;o34`?5<3f226=4+16g9<a=i9>n1865`8983>!70m32o7c?8d;78?j>0290/=:k58e9m52b=>21d4;4?:%34a?>c3g;<h794;n;1>5<#9>o15<5a16f94>=zj;nh6=4::183!7?13li7E:je:J7a1=#io09n6gn3;29?lg32900el;50;9lb0<722e:;44?::a6`7=83>1<7>t$0::>ce<@=on7E:j4:&bb?4b3`k86=44i`694?=ni<0;66ai5;29?xd5m?0;6;4?:1y'5=?=nl1C8hk4H5g7?!ga2;l0el=50;9je1<722cj97>5;hc5>5<<go?1<75`16;94?=zj;o96=4;:183!7?13lh7E:je:J7a1=#io09i6gn3;29?lg32900el;50;9lb0<722wi>ij50;694?6|,8226km4H5gf?M2b<2.jj7<j;hc0>5<<ah>1<75fa483>>ia=3:17pl=cb83>3<729q/=575fd9K0`c<@=o?7)oi:49je6<722cj87>5;hc6>5<<ah<1<75`f483>>i6?00;66s|61`94?0|V?:i70<i3;c6?84ai3k=70<i6;c5?84bn3k>70<je;c6?xu28>0;65<t^42:?[2a?2T==>5Q6038Z1`13W<;i6P:a79]244<V<k<7S;lc:\7b`=Y<on0R8>9;_731>X28=1U9==4^421?[3792T><=5Q4gd8Z1`d3W>mn63;eg8b4>;3lh0=963;cg851>;3l00=963;d9851>;3l>0=963;e3851>;3m80=963=b`823c=::kh1=:h4=3`f>41a348ij7?8f:?1g5<6?o16>n?516d897e528=m70<l3;34b>;5k=0:;k522b7952`<5;hh6<9i;<0a`?70n278<;496:?040<1>278<9496:?046<1>278<?496:?044<1>278=i496:?05f<1>278=o496:?05d<1>278=4496:?05=<1>2785<496:?0=5<1>2784k496:?0<`<1>2784i496:?0<f<1>278m5496:?0e2<1>278m;496:?0e0<1>278m9496:?0e6<1>2788i496:?00g<1>27884496:?002<1>27888496:?006<1>2788<496:?07c<1>278?i496:?07g<1>27?>h496:?76f<1>27?>l496:?76=<1>27?>;496:?761<1>27?>?496:?765<1>27?=h496:?75f<1>27?o;4>869>0f0=<l2019m9:6:891e12><019m9:67891e12>>019m9:61891e12>8019m9:63891e12>:019m9:6a891e0282<70:l7;6f<>;3k>0<463;c6842>;3k>0<963;c6840>;3k>0<?63;c6846>;3k>0<=63;c6844>;3k>0<o63;c982<2=:<j218h64=5a;>2><5=i36:84=5a;>23<5=i36::4=5a;>25<5=i36:<4=5a;>27<5=i36:>4=5a;>2e<5=i26<68;<6`=?2b027?o4488:?7g<<0>27?o4485:?7g<<0<27?o4483:?7g<<0:27?o4481:?7g<<0827?o448c:p25b=839pR;>k;<6ge?70n27?ok4>7g9~w0?c2909wS;6d:?1b=<6091v;<j:180[05m27?==4n4:?0fd<f=2wx9k?50;:0[3a927?h<4:9:?7`5<2127?ok4:9:?7`<<2127?h54:9:?7`2<21278>n4:9:?1fd<21279no4:9:?1f`<21279nk4:9:?1g5<21279o<4:9:?1g7<21279o>4:9:?1g1<21279o84:9:?1ff<21279ni4:9:?174<21279?44:9:?17=<21279?:4:9:?173<21279?84:9:?171<21279?>4:9:?177<21279?=4:9:?16c<21279;n4:9:?1<1<212794>4:9:?1<7<212794<4:9:?1<5<21279;k4:9:?13`<21279;i4:9:?13g<21279;l4:9:?123<21279:h4:9:?12a<21279:n4:9:?12g<21279:l4:9:?12<<21279:54:9:?122<21279:84:9:?121<2127:i>4:9:?2ag<2127:il4:9:?2a<<2127:i54:9:?2a2<2127:i;4:9:?2a0<2127:i94:9:?2a7<2127:i<4:9:?02=<21278;=4:9:?02`<21278:i4:9:?02c<21278:o4:9:?02d<21278:n4:9:?022<21278:;4:9:?02<<21278;h4:9:?0<3<21278484:9:?0<1<212784>4:9:?0<7<212784<4:9:?0<5<21278;k4:9:?03a<21278;n4:9:?1b1<21279j<4:9:?1bg<21279j54:9:?1b2<2127?5o4:9:?7=d<2127?544:9:?7==<2127?5:4:9:?7=3<2127?594:9:?7=6<2127?5?4:9:?7=4<2127?5=4:9:?7<c<2127?4h4:9:?7<a<2127?4n4:9:?7<g<2127?444:9:?7<=<2127?4:4:9:?7<3<2127?484:9:?7<1<2127?4>4:9:?7<7<2127?4<4:9:?7<5<2127?m<4:9:?7e5<2127?5k4:9:?7=`<2127?5i4:9:?7=f<2127?584:9:?7<d<2127?;k4:9:?73`<2127?o;490:?7g2<1827?o5490:?7g<<182wx9l=50;0xZ0g4349i47?70:p242=83<>wS8>4:?7`f<2127?hl4:9:?7`g<2127?i?4:9:?7a4<21278n54:9:?0f2<21278jl4:9:?0bg<21278jh4:9:?0bc<2127?<=4:9:?744<2127?<?4:9:?746<2127?<94:9:?740<21278jn4:9:?0ba<2127:o94:9:?2gf<2127:oo4:9:?2gd<2127:o44:9:?2g=<2127:o:4:9:?2g3<2127:o84:9:?2g6<2127:o?4:9:?14c<21279=:4:9:?153<21279=84:9:?151<21279=>4:9:?157<21279=<4:9:?155<21279<h4:9:?14a<2127:j44:9:?144<21279<=4:9:?2bc<2127:jh4:9:?2ba<2127:jn4:9:?2bg<2127:jl4:9:?2b=<2127:j:4:9:?115<21279954:9:?112<212799;4:9:?110<21279994:9:?116<212799?4:9:?114<212798k4:9:?10`<2127?844:9:?714<2127?8k4:9:?70`<2127?9=4:9:?70f<2127?8o4:9:?70a<2127?854:9:?702<2127?8l4:9:?725<2127?9i4:9:?71`<2127?:>4:9:?724<2127?:?4:9:?723<2127?:94:9:?720<2127?::4:9:?71c<2127?;84:9:?73a<2127?;n4:9:?73g<2127?;l4:9:?73<<2127?;54:9:?732<2127?;;4:9:?731<2127?;>4:9:?7g3<2n27?o:4:f:?7g=<2n27?o44:f:p272=838pR;?7;<1e`?7?82wx:?<50;0xZ370349mo7?70:p27b=838pR;<?;<631?7?82wx:?m50;0xZ37a34>;87?70:p27d=838pR;?j;<637?7?82wx:?o50;0xZ37c34>;>7?70:p27?=838pR;?l;<635?7?82wx:?650;0xZ37e34>;<7?70:p271=838pR;?n;<1eb?7?82wx:?850;0xZ37>349mi7?70:p273=838pR;?9;<1ef?7?82wx:??50;0xZ372349mm7?70:p1<2=838pR89?;<6:f?7?82wx94<50;0xZ00a34>2m7?70:p1<7=838pR88j;<6:=?7?82wx94>50;0xZ00c34>247?70:p1=`=838pR88l;<6:3?7?82wx95k50;0xZ00e34>2:7?70:p1=e=838pR886;<6:0?7?82wx95l50;0xZ00?34>2?7?70:p1=g=838pR888;<6:6?7?82wx95750;0xZ00134>2=7?70:p1=>=838pR88:;<6:4?7?82wx95950;0xZ00334>3j7?70:p1=0=838pR88<;<6;a?7?82wx95;50;0xZ00534>3h7?70:p1=2=838pR88>;<6;g?7?82wx95=50;0xZ00734>3n7?70:p1=7=838pR8;j;<6;=?7?82wx95>50;0xZ03c34>347?70:p12`=838pR8;l;<6;3?7?82wx9:k50;0xZ03e34>3:7?70:p12b=838pR8;n;<6;1?7?82wx9:m50;0xZ03>34>387?70:p12d=838pR8;7;<6;7?7?82wx9:o50;0xZ03034>3>7?70:p12?=838pR8;9;<6;5?7?82wx9:650;0xZ03234>3<7?70:p1<d=838pR899;<6b5?7?82wx94o50;0xZ01234>j<7?70:p1<?=838pR89;;<6:b?7?82wx94650;0xZ01434>2i7?70:p1<1=838pR89=;<6:`?7?82wx94850;0xZ01634>2o7?70:p1<3=838pR88n;<6:1?7?82wx95j50;0xZ03a34>3m7?70:p1=4=838pR8;;;<64b?7?82wx9:950;0xZ03434><i7?70:p257=838pR8h:;<0a`?7?82wx9kh50;0xZ0`3348io7?70:p25g=838pR8hk;<0`1?7?82wx:=750;0xZ0`d348h87?70:p25>=838pR8hm;<0`7?7?82wx:=950;0xZ0`f348h>7?70:p250=838pR8h6;<0`5?7?82wx:=;50;0xZ0`?348h<7?70:p252=838pR8h8;<0ab?7?82wx:==50;0xZ0`1348ii7?70:p254=838pR8h<;<0af?7?82wx9kk50;0xZ0`5348im7?70:p11d=838pR8<8;<6`=?1f3ty>844?:3y]170<5=i26;h4}r77<?6=:rT>>8524b;92a=z{<><6=4={_710>;3k00=o6s|55494?4|V<8870:l9;4a?xu2<<0;6?uQ530891e>2?k0q~;;3;296~X2:9168n75689~w0252909wS;>f:?7g<<102wx99?50;0xZ07b34>h5788;|q605<72;qU9<j4=5a;>2g<uz?8j7>52z\65f=:<j21:k5rs41f>5<5sW?:n63;c985`>{t=:n1<7<t^43b?82d03<h7p}:3b83>7}Y=83019m7:7`8yv34j3:1>vP:199>0f>=>h1v8=n:181[36?27?o5499:p16>=838pR8?:;<6`<?0?3ty>?:4?:3y]142<5=i36;94}r702?6=:rT>=>524b593d=z{<9>6=4={_726>;3k>0=j6s|52694?4|V<;:70:l7;4g?xu2;:0;6?uQ502891e02?i0q~;<2;296~X28o168n956c9~w0562909wS;?e:?7g2<1i2wx9>>50;0xZ06c34>h;786;|q66c<72;qU9=m4=5a4>3><uz?>>7>52z\66a=:<j=1::5rs472>5<5sW?9o63;c784e>{t=<:1<7<t^40a?82d>3<m7p}:4g83>7}Y=;k019m9:7f8yv33m3:1>vP:289>0f0=>j1v8:k:181[35027?o;49b:p11e=838pR8<>;<6`2?0f3ty>894?:3y]140<5=i=6;74}r70=?6=:rT><o524b492==z{<8n6=4={_73e>;3k?0=;6s|11694?76s4>m<7?8b:?1=<<2m279mh4:e:?0`<<2m278ih4:e:?044<2m278=54:e:?0<f<2m278m>4:e:?00c<2m278?o4:e:?775<2m27?=n4:e:?7g3<>=27?o:465:?7g=<>=27?o4465:p0a6=839p19j>:77891b7282;70:lf;7`?xu3l80;6?u24e395=6<5=n86l=4}r6gf?6=;r7?hn495:?7`d<2k27?ho4>819~w1bd2909w0:kc;3;4>;3ll0j?6s|4bd94?5|5=n;6;;4=5ae>4>734>o?7o;;|q7`d<72:q68io5192891be2??019jj:`68yv2c:3:18v3;d8823c=:<m21=:h4=5f4>41a34>o?7?89:p0a0=838iw0:k9;3;4>;4:j0:;k522cc924=::kh1:<522cg924=::kl1:<522b2924=::j;1:<522b0924=::j91:<522b6924=::j?1:<522ca924=::kn1:<5237:924=:;>:1:<5237g924=:;?n1:<5237d924=:;?h1:<5237c924=:;?i1:<52375924=:;?<1=:h4=24:>37<5:=n6;?4=2:5>37<5:2>6;?4=2:7>37<5:286;?4=2:1>37<5:2:6;?4=2:3>37<5:=m6;?4=25g>37<5:=h6;?4=3d7>37<5;l:6;?4=3da>37<5;l36<9i;<0e3?70n279o:4n4:?1gf<f>2wx8i;50;0g82c03;3<63=30855>;5;00==63=39855>;5;>0==63=37855>;5;<0==63=35855>;5;:0==63=33855>;5;90==63=2g855>;5?j0==63=85855>;50:0==63=83855>;5080==63=81855>;5?o0==63=7d855>;5?m0==63=7c855>;5?h0==63=67855>;5>l0==63=6e855>;5>j0==63=6c855>;5>h0==63=68855>;5>10==63=66855>;5><0==63=65855>;6m:0==63>ec855>;6mh0==63>e8855>;6m10==63>e6855>;6m?0==63>e4855>;6m=0==63>e3855>;6m80==6s|4e694?4fs4>o;7?70:?7=g<1927?5l491:?7=<<1927?55491:?7=2<1927?5;491:?7=1<1927?5>491:?7=7<1927?5<491:?7=5<1927?4k491:?7<`<1927?4i491:?7<f<1927?4o491:?7<<<1927?45491:?7<2<1927?4;491:?7<0<1927?49491:?7<6<1927?4?491:?7<4<1927?4=491:?7e4<1927?m=491:?7=c<1927?5h491:?7=a<1927?5n491:?7=0<1927?4l491:?73c<1927?;h491:?7gg<f<27?o;4>899>0f1=912019m7:0:;?82d13;346s|4ef94?5|5=o96<9i;<6f5?70n27?hh4>789~w1c72908<v3;e382<5=:;k21=:h4=2`4>41a349mm78>;<1ef?06349mi78>;<1eb?0634>;<78>;<635?0634>;>78>;<637?0634>;878>;<631?06349mo78>;<1e`?0634>?578>;<665?0634>?j78>;<67a?0634>><78>;<67g?0634>?n78>;<67`?0634>?47?8f:?702<1927?8l491:?725<1927?9i4>7g9>00c=>8168;=5609>037=>8168;<5609>030=>8168;:5609>033=>8168;95609>00`=>8168:;5609>02b=>8168:m5609>02d=>8168:o5609>02?=>8168:65609>021=>8168:85609>022=>8168:=5609~w1ba2909hv3;e082<5=:9j>1:<521ba924=:9jh1:<521bc924=:9j31:<521b:924=:9j=1:<521b4924=:9j?1:<521b1924=:9j81:<5221d924=::8=1:<52204924=::8?1:<52206924=::891:<52200924=::8;1:<52202924=::9o1:<5221f924=:9o31:<52213924=::9:1:<521gd924=:9oo1:<521gf924=:9oi1:<521g`924=:9ok1:<521g:924=:9o=1:<52242924=::<21:<52245924=::<<1:<52247924=::<>1:<52241924=::<81:<52243924=::=l1:<5225g924=z{:8o6=4={<11g?023499i7?89:p77e=839p1><l:0:3?84a>3k870<je;c0?xu5k?0;6?u22cc920=::j=1=:74}r0g0?6=:r79no495:?1`0<6?01v?j9:18184em3<>70<k7;34=>{t:m21<7<t=3`e>33<5;n26<96;|q1`d<72;q6>n>5649>6ad=9>30q~<ke;296~;5k80=963=dg823<=z{;o;6=4={<0`6?02348n<7?89:p6`5=838p1?m<:77897c428=27p}=e683>7}::j>1:8522d5952?<uz8n57>52z?1g0<1=279ii4>789~w7e?2909w0<mc;46?84dl3;<56s|2e094?4|5;ho6;;4=3f0>41>3ty8n44?:2y>7g>=><16?o95649>7gg=9>30q~=m7;297~;4j>0:4=524029e6=:;kk1m95rs2d:>5<5s49mm78:;<1fa?7012wx8=950;0x96`e2??01>m7:05:?xu3810;6?u23gg920=:;j31=:74}r63=?6=:r78jk495:?0gd<6?01v9>n:18182783<>70=lb;34=>{t<9h1<7<t=522>33<5:in6<96;|q74f<72;q68=<5649>7f`=9>30q~:?d;296~;38:0=963<d5823<=z{=:n6=4={<630?02349o:7?89:p05`=838p19>::77896b028=27p};0783>7}:;oi1:8523b5952?<uz9h87>52z?0ba<1=278o84>789~w743290>w0<n3;c0?84>13<=70<=f;3;4>;48m0j:63<258b2>{t;>;1<76t=3c0>d2<5:=h6<6?;<3:g?g3349;h7o:;<6`2?2034>h;7:8;<6`<?2034>h57:8;|q1e6<72:q6>l=516;897?>282970<ne;d7?xu5100;6>u228;952?<5;3j68k4=3`3>0c<uz8i57>52z?1e`<6?016>n95a79~w741290>w0<n5;c0?84>i3<=70<<0;3;4>;48m0j863<258b0>{t;>91<77t=3c6>d2<5:=o6<6?;<3:g?g434;2n7o;;<13`?g434>h:7:n;<6`3?2f34>h47:n;<6`=?2f3ty9m84?:2y>6d3=9>301?7n:0:1?84e83l?7p}=9`83>6}::0k1=:74=3;a>0c<5;h:68k4}r0:<?6=0r79n=4>789>6a3=i:16>i95a49>6a?=i?16>no5a59>6ae=i=16>h85a59>6ab=i=1v?<8:18684f>3k870<6b;45?844:3;3<63<248b2>;48l0j:6s|36694??|5;k=6l:4=25e>4>734;2n7o<;<3:e?g3349;i7o:;<6`2?2e34>h;7:m;<6`<?2e34>h57:m;|q1e3<72:q6>l8516;897?e282970<m1;d7?xu51k0;6>u228`952?<5;3h68k4=3`1>0c<uz8287>57z?1f4<6?016>i95a59>6a?=i:16>no5a49>6ae=i<16>h85a49>6ab=i<1v?<7:18684f?3k870<6c;45?844;3;3<63<248b0>;48l0j86s|36794??|5;k<6l:4=2:3>4>734;2m7o<;<3:=?g3349;i7o<;<6`2?2d34>h;7:l;<6`<?2d34>h57:l;|q1e2<72:q6>l9516;897?d282970<m2;d7?xu51j0;6>u228a952?<5;3o68k4=3`0>0c<uz8297>56z?1f7<6?016>i75a59>6fg=i:16>h:5a49>6ae=i:16>h85a29~w74>290>w0<n8;c0?84>l3<=70<<4;3;4>;4:?0j:63<0g8b2>{t;><1<77t=3c;>d2<5:2:6<6?;<3:=?g434;247o;;<13b?g234>h:7:k;<6`3?2c34>h47:k;<6`=?2c3ty9m54?:2y>6d>=9>301?7k:0:1?84e;3l?7p}=9e83>6}::0n1=:74=3;f>0c<5;h?68k4}r0:2?6=0r79n>4>789>6ad=i=16>ih5a59>6a6=i=16>h:5a59>6`7=i:16>h85a79>6`4=i:1v?<n:18684f13k870<6e;45?844=3;3<63<278b0>;48o0j86s|36594??|5;k26l:4=2:1>4>734;247o<;<3:3?g3349;j7o<;<6`2?2b34>h;7:j;<6`<?2b34>h57:j;|q1e<<72:q6>l7516;897?b282970<m4;d7?xu51l0;6>u228g952?<5;3m68k4=3`6>0c<uz82;7>59z?1f1<6?016>ih5a49>6a6=i<16>h=5a59>6`3=i<16>h65a49>6`6=i:16>h?5a59>6`4=i=1v?<m:18684fi3k870<6f;45?844>3;3<63<268b2>;4990j:6s|36:94??|5;kj6l:4=2:0>4>734;2;7o<;<3:2?g3349:<7o:;<6`2?2a34>h;7:i;<6`<?2a34>h57:i;|q1ed<72:q6>lo516;897?a282970<m5;d7?xu51o0;6>u228d952?<5;k;68k4=3`5>0c<uz83j7>59z?1f0<6?016>nk5a59>6fg=i?16>i?5a59>6`3=i:16>h65a59>6`2=i:16>h>5a59>6`7=i<1v?<l:18684fj3k870<n0;45?844?3;3<63<268b0>;4990j86s|36;94??|5;ki6l:4=2:7>4>734;2:7o<;<3:1?g3349:<7o<;<6`2?3734>h;7;?;<6`<?3734>h57;?;|q1eg<72:q6>ll516;897g7282970<m6;d7?xu5i90;6>u22`2952?<5;k:68k4=3`4>0c<uz82<7>57z?1f3<6?016>nk5a29>6`5=i:16>ho5a29>6a7=i:16>h65a29>6`4=i<1v?<k:18684fk3k870<n1;45?84403;3<63<298b2>;4980j:6s|36c94??|5;kh6l:4=2:6>4>734;297o<;<3:0?g3349:=7o:;<6`2?3634>h;7;>;<6`<?3634>h57;>;|q1ef<72:q6>lm516;897g6282970<m7;d7?xu5i80;6>u22`3952?<5;k968k4=3`;>0c<uz82=7>57z?1f2<6?016>hl5a59>6f`=i=16>h95a59>6`g=i=16>i?5a79>6f?=i=1v?<j:18684fl3k870<n2;45?84413;3<63<298b0>;4980j86s|36`94??|5;ko6l:4=2:5>4>734;287o<;<3:7?g3349:=7o<;<6`2?3534>h;7;=;<6`<?3534>h57;=;|q1ea<72:q6>lj516;897g5282970<m8;d7?xu5i;0;6?u22`0952?<5;km68k4}r0:6?6=>r79n54>789>6`d=i:16>hm5a59>6f`=i:16>i?5a49>6f?=i:1v?<::18784f<3k870<<1;3;4>;4:00j?63<138b7>{t;>81<77t=3c7>d2<58o86;;4=25f>4>734;2?7o<;<126?g334>h:7:6;<6`3?2>34>h47:6;<6`=?2>3ty9m94?:3y>6d2=9>301?oi:g68yv4>;3:18v3=ag823<=::jl1m8522b`9e1=::m91m>5rs0`4>5<3s49n?7o<;<3`6?7?8278mk4n6:?0==<f>2wx8;650;:x96c42h>01>j6:7489114282;70?m4;c7?82d>39i70:l7;1a?82d039i70:l9;1a?xu4m:0;6>u23d1952?<5:n26<6=;<1fa?`33ty8h44?:2y>7a?=9>301>jn:4g896`72<o0q~?m9;290~;4m<0j?63>c282<5=:;hl1m95238:9e1=z{=<j6=46{<1f1?g3349om789;<640?7?827:n94n3:?2f6<f<27?o;4<e:?7g2<4m27?o54<e:?7g<<4m2wx?h;50;1x96c228=270=ka;3;6>;4n90m86s|3ec94?5|5:nj6<96;<1gf?3b349m=7;j;|q0g3<721q6?k>516;896e>2h>01>mn:`7896ee2h<01>ml:`6896ec2h?01>j::`6896e?2h80q~?ma;290~;4m?0j?63>c482<5=:;k:1m;5238;9e3=z{=<i6=46{<1f2?g3349on789;<642?7?827:n>4n3:?2f7<f<27?o;4<f:?7g2<4n27?o54<f:?7g<<4n2wx?h850;1x96c128=270=kb;3;6>;4n80m86s|3e`94?5|5:ni6<96;<1gg?3b349m>7;j;|q0g5<72>q6?k?516;896e>2h901>mn:`1896ee2h901>ml:`7896ec2h>01>j::`78yv7ej3:18v3<e68b7>;6k?0:4=523c29e1=:;031m95rs54`>5<>s49n;7o;;<1gg?0134><;7?70:?2f7<f;27:n<4n4:?7g3<3827?o:4;0:?7g=<3827?o44;0:p7`1=839p1>k8:05:?85ck3;3>63<f38e0>{t;mi1<7=t=2f`>41>349oh7;j;<1e7?3b3ty8o<4?:7y>7c4=9>301>mn:`6896ee2h?01>ml:`1896ec2h901>j::`18yv7ek3:18v3<e98b7>;6k>0:4=523c39e3=:;0k1m;5rs54g>5<>s49n47o;;<1g`?0134><47?70:?2f4<f;27:n=4n4:?7g3<3927?o:4;1:?7g=<3927?o44;1:p7`>=839p1>k7:05:?85cl3;3>63<f28e0>{t;mn1<7=t=2fg>41>349oi7;j;<1e0?3b3ty8o?4?:9y>7c5=9>301>mm:`6896ed2h<01>j?:`1896b62h901>j=:`1896b42h901>j::`48yv7el3:18v3<e88b7>;6k10:4=523c39e1=:;0k1m95rs54f>5<>s49n57o;;<1ga?0134><57?70:?2f5<f;27:mk4n4:?7g3<3:27?o:4;2:?7g=<3:27?o44;2:p7`?=839p1>k6:05:?85cm3;3>63<f58e0>{t;mo1<7=t=2ff>41>349oj7;j;<1e1?3b3ty8o>4?:9y>7c2=9>301>mj:`1896ea2h901>j?:`6896b62h?01>j=:`6896b42h>01>j;:`78yv7em3:18v3<e`8b7>;6k00:4=523c09e3=:;0h1m;5rs54e>5<>s49nm7o;;<1gb?0134><m7?70:?2ec<f;27:mh4n4:?7g3<3;27?o:4;3:?7g=<3;27?o44;3:p7`g=839p1>kn:05:?85cn3;3>63<f48e0>{t;ml1<7=t=2fe>41>349n<7;j;<1e2?3b3ty8no4?:6y>7c3=9>301>mi:`6896b72h?01>j>:`4896b52h?01>j<:`7896b32h90q~?mf;290~;4mk0j?63>c`82<5=:;k81m95238`9e1=z{==;6=46{<1ff?g3349n<789;<64f?7?827:mh4n3:?2ea<f<27?o;4;4:?7g2<3<27?o54;4:?7g<<3<2wx?hl50;1x96ce28=270=j0;3;6>;4n?0m86s|3d294?5|5:o;6<96;<1f5?3b349m;7;j;|q0ff<72<q6?k8516;896b?2h901>j9:`1896b62h>01>j;:`68yv2093:15v3<eb8b7>;4m80=:63;7b82<5=:9hn1m>521`a9e1=:<j<188524b5900=:<j2188524b;900=z{8i;6=4;{<1fg?g334;hn7?70:?0f6<f>2785n4n6:p7`e=839p1>kl:05:?85b93;3>63<f68e0>{t;l;1<7=t=2g2>41>349n>7;j;<1e<?3b3ty8ni4?:5y>7c1=9>301>j7:`6896b12h>01>j8:`18yv20:3:15v3<ee8b7>;4m;0=:63;7e82<5=:9hi1m>521``9e1=:<j<18;524b5903=:<j218;524b;903=z{8i:6=4;{<1f`?g334;ho7?70:?0f6<f<2785n4n4:p7`b=839p1>kk:05:?85b:3;3>63<f98e0>{t;l81<7<t=2g1>41>349nj7;j;|q0f`<72=q6?k6516;896b02h>01>j=:`4896b42h<0q~:99;29<~;4m=0j?63=51851>;3?<0:4=521``9e6=:<j<1?i524b597a=:<j21?i524b;97a=z{8h36=4;{<1f0?g334;h87?70:?0f1<f<2785i4n4:p7`2=838p1>k;:05:?85bn3l?7p}<bg83>6}:;ll1=:74=2a6>d5<5:i<6l=4}r134?6=:r78<;4:e:?040<6?01v>>l:181857>3;3>63<13823<=z{:8j6=4={<132?701278>h4n5:p6c`=838p1>>::4g8966328=27p}<0c83>7}:;9?1=5<4=232>41>3ty9jh4?:3y>752==l16?==516;8yv57i3:1>v3<0582<7=:;8:1=:74}r0e`?6=:r78<>4:e:?047<6?01v>>6:181857;3;3>63<0g823<=z{;lh6=4={<136?3b349;=7?89:p75>=838p1>>=:0:1?857m3;<56s|31594?4|5:::6<6=;<13`?7012wx?<950;0x967c2<o01>?l:05:?xu4::0;6?u230f95=4<5:826<96;|q06g<72;q6?<j516;8964b2h90q~=>6;296~;49j0>i63<1c823<=z{:896=4={<12g?7?:278>54>789~w6722909w0=>b;7f?856i3;<56s|33394?4|5:;i6<6=;<113?7012wx?<:50;0x967f2<o01>?6:05:?xu4:90;6?u230c95=4<5:8=6<96;|q056<72;q6?<755d9>74>=9>30q~=>f;296~;4900:4?52337952?<uz9:i7>52z?05=<60;16??:516;8yv5?j3:1>v3<9086a>;4190:;45rs2;4>5<5s492=7?72:?0=a<6?01v>l::18185>93;<563<b`8b7>{t;1k1<7<t=2;3>0c<5:2m6<96;|q0=3<72;q6?4>5190896?d28=27p}<8883>7}:;1l19h5239g952?<uz9297>52z?0<c<60;16?4l516;8yv5?03:1>v3<8d86a>;40m0:;45rs2;7>5<5s493i7?72:?0=d<6?01v>68:18185?l3?n70=7c;34=>{t;091<7<t=2:g>4>5349257?89:p7<4=838p1>6l:0:1?85>03;<56s|3`094?4|5:k368k4=2c4>41>3ty8mh4?:3y>7d>=91801>l;:05:?xu4j?0;6?u23`:952?<5:hj6l84}r1b5?6=:r78m:4:e:?0e3<6?01v>ok:18185f?3;3>63<b2823<=z{:k;6=4={<1b2?3b349j97?89:p7de=838p1>o9:0:1?85e:3;<56s|38d94?4|5:k>68k4=2c7>41>3ty8mo4?:3y>7d3=91801>l>:05:?xu41l0;6?u23`691`=:;h91=:74}r1be?6=:r78m94>839>7g6=9>30q~=n9;296~;4i:0:4?523`d952?<uz8;?7>55z?2g1<1=279<k4>819>5=g=i=16=5l5a49>5=e=i=1v<mk:18187dk3<>70?7a;34=>{t9jo1<7:t=0aa>33<582i6<96;<3;`?g234;3i7o<;|q2gc<72;q6=no5649>5=e=9>30q~?k0;290~;6k00=963>8e823<=:91l1m8521829e6=z{8n:6=4={<3`<?0234;3i7?89:p5a4=83>p1<m8:77894>a28=270?61;c6?87>:3k=7p}>d283>7}:9j<1:852182952?<uz;o87>53z?2g0<1=27:5<4>789>5d7=i<1v<j::18187d;3<>70?62;34=>{t:;91<7<t=0a1>33<58k:6<96;|q135<72<q6>>?5649>62e=91:01<o=:`6894gf2h<01<o<:`68yv44i3:1?v3=38851>;6i;0:;45218d9e6=z{;9i6=4={<00<?0234;j?7?89:p614=83<p1?=8:77894g32h901<o::`7894g02h<01<on:05:?87f>3k>7p}=3b83>7}:::<1:8521`6952?<uz88h7>52z?170<1=27:m84>789~w75b2909w0<<4;46?87f>3;<56s|22d94?2|5;986;;4=0c;>d5<58k<6<96;<3b=?g23ty98=4?:3y>664=><16=l6516;8yv4393:1>v3=31851>;6i00:;45rs301>5<5s489j78:;<3:b?7012wx>8o50;0x971d2??01?89:0:3?xu5>:0;6?u2296920=::?o1=5>4}r04=?6=<r79494>819>5d4=i:16=lo5a49>5d5=i:1v?8=:18184?;3<>70<9d;3;4>{t:>21<7:t=3:0>4>734;2i7o;;<3be?g334;j?7o:;|q124<72;q6>5<5649>63e=91:0q~<87;297~;50;0:4=5218g9e6=:9hk1m>5rs343>5<5s483=78:;<05f?7?82wx>:850;4x97>6282;70?6e;c5?87f<3k?70?n5;c7?87f?3k>70?n6;c7?xu5=o0;6?u2292920=::?k1=5>4}r041?6==r794=4>819>5<c=i<16=l;5a29>5d1=i=16=l85a29~w73b2909w0<8f;46?84113;3<6s|26694?2|5;=m6<6?;<3:`?g334;2j7o:;<3b2?g13ty99i4?:3y>62c=><16>;651928yv40;3:1?v3=7d82<5=:90n1m>521`29e6=z{;?h6=4={<04`?02348=;7?70:p624=83>p1?9k:0:3?87f03k?70?n9;c7?87f83k?7p}=5c83>7}::>h1:85227795=6<uz8<=7>53z?13g<60916=l75a29>5d6=i<1v?;6:181840i3<>70<94;3;4>{t:?l1<7<t=35b>4>734;j<7o9;|q2aa<72;q6>=h5649>5c?=91:0q~?i6;296~;59>0=963=0082<5=z{;:h6=4;{<023?7?827:4l4n3:?2<g<f<27:4n4n3:p5c3=838p1??9:7789767282;7p}=0c83>6}::8<1=5>4=0:a>d5<582h6l;4}r3e0?6=:r79=8495:?2bc<6091v?>n:187846=3;3<63>8e8b0>;60l0j863>8b8b2>{t9o91<7<t=337>33<58ln6<6?;|q14<<72:q6><:5192894>c2h901<6j:`78yv7a:3:1>v3=12851>;6nm0:4=5rs32;>5<3s48:?7?70:?2<c<f<27:5=4n4:?2<`<f>2wx=k?50;0x97752??01<hl:0:3?xu58>0;6>u220095=6<582m6l=4=0;3>d3<uz;m<7>52z?154<1=27:jo4>819~w761290?w0<>1;3;4>;6180j863>938b1>;6190j:6s|1dd94?4|5;;;6;;4=0db>4>73ty9<84?:2y>646=91:01<7>:`1894?52h>0q~?je;296~;58l0=963>f982<5=z{;:?6=4<{<03a?7?827:m<4n4:?2=7<f;2wx=hm50;0x976c2??01<h8:0:3?xu58;0;6?u221f95=6<58k:6l=4}r070?6=:r79:;495:?115<6091v?:k:181841m3<>70<:8;3;4>{t:=i1<7<t=34g>33<5;?<6<6?;|q10g<72;q6>;m5649>600=91:0q~<;a;296~;5>k0=963=5482<5=z{;>26=4={<05e?02348>87?70:p61>=838p1?86:7789734282;7p}=4683>7}::?21:85224095=6<uz8?:7>52z?122<1=2799<4>819~w7222909w0<95;46?843n3;3<6s|25194?4|5;<?6;;4=36f>4>73ty:h:4?:3y>5c?=><16=h=51928yv7b83:1>v3=00851>;6mk0:4=5rs0fe>5<5s48;<78:;<3fe?7?82wx=ik50;0x94`a2??01<k6:0:3?xu6lm0;6?u21gg920=:9l21=5>4}r3gg?6=:r7:ji495:?2a2<6091v<jm:18187ak3<>70?j6;3;4>{t9mk1<7<t=0da>33<58o>6<6?;|q2`<<72;q6=ko5649>5`2=91:0q~?k8;296~;6n10=963>e382<5=z{8n=6=4={<3e3?0234;n=7?70:p64>=838p1<km:77894?428=27p}=1883>7}:9lk1:852186952?<uz8:m7>52z?2a<<1=27:584>789~w77e2909w0?j8;46?87>>3;<56s|20a94?4|58o<6;;4=0;4>41>3ty9=i4?:3y>5`0=><16=46516;8yv46m3:1>v3>e4851>;6100:;45rs33e>5<5s4;n878:;<3:e?7012wx>?>50;0x94c52??01<7m:05:?xu5:80;6?u21d3920=:90i1=:74}r0;1?6=:r7995495:?2eg<6?01v?69:181842?3<>70?nc;34=>{t:1=1<7<t=375>33<58ko6<96;|q1<=<72;q6>8;5649>5dc=9>30q~<79;296~;5==0=963>ag823<=z{;2j6=4={<067?0234;i<7?89:p6=d=838p1?;=:77894d628=27p}=8b83>7}::<;1:8521c0952?<uz83h7>52z?10c<1=27:n>4>789~w7>b2909w0<;e;46?87e<3;<56s|4ba94?7>s49=47;l;<144?3d349=i7;l;<15`?3d349=j7;l;<15f?3d349=m7;l;<15g?3d349=;7;l;<152?3d349=57;l;<14a?3d3493:7;l;<1;1?3d349387;l;<1;7?3d3493>7;l;<1;5?3d3493<7;l;<14b?3d349<h7;l;<14g?3d348ni7?89:?7gg<f;278>h4n4:p764=838p1>87:778963728=27p}<5b83>1}:;?21=5>4=25f>33<5:826l:4=272>d5<uz98m7>52z?035<1=2789l4>789~w602290?w0=80;3;4>;40?0=963<298b7>;4<l0j?6s|32:94?4|5:<n6;;4=27;>41>3ty8:>4?:5y>73c=91:01>6;:77896402h901>:n:`18yv54?3:1>v3<6e851>;4=>0:;45rs241>5<3s49=h7?70:?0<6<1=278>:4n5:?00=<f;2wx?>750;0x960a2??01>;6:05:?xu4>=0;69u237d95=6<5:2>6;;4=20;>d3<5:>h6l=4}r101?6=:r78:o495:?010<6?01v>8?:187851j3;3<63<80851>;4:?0j963<458b7>{t;:>1<7<t=24b>33<5:??6<96;|q01c<72=q6?;o5192896>72??01><::`1896252h90q~=<6;296~;4>j0=963<57823<=z{:<:6=4;{<15g?7?82784?495:?063<f;2788;4n3:p767=838p1>88:778963528=27p}<5e83>1}:;?=1=5>4=25g>33<5:8?6l=4=21f>d5<uz98<7>52z?023<1=2788k4>789~w63e290?w0=96;3;4>;4?j0=963<258b1>;4;j0j?6s|32194?4|5:<26;;4=270>41>3ty89h4?:5y>73?=91:01>9i:77896422h?01>:?:`18yv53l3:1>v3<5186a>;4<m0:;45rs272>5<5s49><7h;;<165?7012wx?9l50;1x963f2<o01>:k:4g8962e28=27p}<4d83>6}:;<k1j95235f95=4<5:>n6<96;|q00<<72:q6?8755d9>71d==l16?97516;8yv53k3:1?v3<588e0>;4<k0:4?5235a952?<uz9?;7>53z?01=<2m278844:e:?002<6?01v>:n:18085203l?70=;9;3;6>;4<h0:;45rs266>5<4s49>;7;j;<173?3b349?97?89:p71>=839p1>;8:g689620282970=;8;34=>{t;=91<7=t=275>0c<5:>>68k4=260>41>3ty88;4?:2y>700=n=16?9;51908962128=27p}<4083>6}:;<?19h5235191`=:;=;1=:74}r170?6=;r78984i4:?006<60;16?9:516;8yv54n3:1?v3<5586a>;4<80>i63<3g823<=z{:>96=4<{<160?`3349?=7?72:?007<6?01v>=k:180852;3?n70=<f;7f?854l3;<56s|35294?5|5:?86k:4=21e>4>5349?<7?89:p76d=839p1>;=:4g8965c2<o01>=m:05:?xu4;l0;6>u23409b1=:;:n1=5<4=21f>41>3ty8?n4?:2y>71`=n=16?>l51908965d28=27p}=f483>7}::o>1:8522g4952?<uz8m87>58z?1b1<60916>k=5a59>6cg=i<16>k85a49>6``=i:16>hk5a59>6c6=i=16>nm5a59~w7`52908w0<i1;46?84aj3<>70<i3;34=>{t:o;1<76t=3d2>4>7348m?7o<;<0ee?g3348m:7o;;<0fb?g3348ni7o9;<0e4?g4348ho7o:;|q1bg<72:q6>kl5192897e02h?01?ml:`18yv4a13:1?v3=f9851>;5n>0=963=f`823<=z{;l<6=4={<0e3?7?8279jl4n3:p0fc=838=w0:;9;7`?82293?h70:;f;7`?823m3?h70::0;7`?823k3?h70:;b;7`?823l3?h70:;8;7`?823?3?h70:;a;7`?82183?h70::d;7`?822m3?h70:93;7`?82193?h70:92;7`?821>3?h70:94;7`?821=3?h70:97;7`?822n3?h70:85;7`?820l3?h70:8c;7`?820j3?h70:8a;7`?82013?h70:88;7`?820?3?h70:86;7`?820<3?h70:83;7`?82683;<563;c787a2=:<j=18h94=5a;>1c034>h57:j7:p045=838p19:6:778915628=27p};3e83>1}:<=31=5>4=57e>33<5:h?6l=4=511>d5<uz>:n7>52z?714<1=27??o4>789~w121290?w0::1;3;4>;3>>0=963<b28b7>;3:o0j?6s|40;94?4|5=>m6;;4=51:>41>3ty?894?:5y>01`=91:0198::77896d52h9019<m:`18yv2603:1>v3;4d851>;3;10:;45rs560>5<3s4>?i7?70:?721<1=278n?4n5:?76<<f;2wx8<o50;0x91372??019=n:05:?xu3<<0;69u244295=6<5=<=6;;4=2`0>d3<5=8o6l=4}r622?6=:r7?8n495:?773<6?01v9:>:187823k3;3<63;63851>;4j80j963;248b7>{t<8?1<7<t=56a>33<5=9>6<96;|q705<72=q689l5192891062??01>l?:`1891442h90q~:>7;296~;3<m0=963;36823<=z{=>96=4;{<67`?7?827?:>495:?0f4<f;27?>:4n3:p044=838p19:7:778915428=27p};3d83>1}:<=21=5>4=57f>33<5:km6l=4=53e>d5<uz>:=7>52z?702<1=27??=4>789~w15d290?w0:;7;3;4>;3=m0=963<ag8b1>;39m0j?6s|40694?4|5=>j6;;4=517>41>3ty??k4?:5y>01g=91:0198?:77896d72h?019<>:`18yv25m3:1>v3;3086a>;3:l0:;45rs511>5<5s4>8=7h;;<606?7012wx8?m50;1x915e2<o019<j:4g8914d28=27p};2g83>6}:<:h1j95243g95=4<5=8m6<96;|q76d<72:q68>o55d9>07e==l168?o516;8yv25l3:1?v3;3`8e0>;3:j0:4?5243f952?<uz>947>53z?77<<2m27?>l4:e:?76=<6?01v9<m:18082413l?70:=a;3;6>;3:k0:;45rs505>5<4s4>847;j;<61<?3b34>9:7?89:p07?=839p19=7:g68914?282970:=9;34=>{t<;>1<7=t=514>0c<5=8=68k4=507>41>3ty?>:4?:2y>061=n=168?851908914028=27p};2383>6}:<:<19h5243691`=:<;81=:74}r611?6=;r7??;4i4:?761<60;168?;516;8yv2583:1?v3;3486a>;3:;0>i63;21823<=z{=886=4<{<601?`334>9>7?72:?766<6?01v9?j:180824<3?n70:=0;7f?826m3;<56s|43394?5|5=9?6k:4=503>4>534>9=7?89:p04e=839p19=<:4g8917b2<o019?l:05:?xu39o0;6>u24219b1=:<8o1=5<4=53e>41>3ty?=i4?:2y>066=n=168<m51908917c28=27p};5483>6}:<?:1=5>4=555>33<5:326l;4}r666?6=;r7?9i4>819>025=><16?465a49~w1332908w0::e;3;4>;3?=0=963<998b7>{t<<21<7=t=540>4>734><578:;<1:e?g43ty?9;4?:2y>037=91:01998:77896?>2h90q~::7;297~;3>;0:4=5246:920=:;0k1m85rs57a>5<4s4>=:7?70:?73f<1=2785n4n5:p00?=839p198;:0:3?820i3<>70=6b;c6?xu3=h0;6>u247795=6<5==i6;;4=2;a>d5<uz>>o7>53z?722<609168:j5649>7<e=i:1v9;<:180822n3;3<63;74851>;41m0j?6s|4bf94?42s4>2n7;l;<6:e?3d34>257;l;<6:<?3d34>2;7;l;<6:2?3d34>287;l;<6:7?3d34>2>7;l;<6:5?3d34>2<7;l;<6;b?3d34>3i7;l;<6;`?3d34>3o7;l;<6;f?3d34>357;l;<6;<?3d34>3;7;l;<6;2?3d34>397;l;<6;0?3d34>3?7;l;<6;6?3d34>3=7;l;<6;4?3d34>j=7;l;<6b4?3d34>2j7;l;<6:a?3d34>2h7;l;<6:g?3d34>297;l;<6;e?3d34><j7;l;<64a?3d348nj7?89:p0gc=838p197m:77891e>2080q~:md;296~;31h0=963;c88;a>{t<ki1<7<t=5;:>33<5=i265m4}r6af?6=:r7?55495:?7g<<?j2wx8oo50;0x91?02??019m6:9c8yv2e13:1>v3;97851>;3k00356s|4c594?4|5=3?6;;4=5a:>=><uz>i:7>52z?7=6<1=27?o4477:p0g3=838p197=:77891e>21<0q~:m4;296~;3180=963;c98:6>{t<k91<7<t=5;3>33<5=i365k4}r6a6?6=:r7?4k495:?7g=<?k2wx8o?50;0x91>b2??019m7:9`8yv2e83:1>v3;8e851>;3k103m6s|4`d94?4|5=2h6;;4=5a;>=?<uz>ji7>52z?7<g<1=27?o5478:p0de=838p1966:77891e?21=0q~:nb;296~;3010=963;c98;2>{t<hk1<7<t=5:4>33<5=i<64<4}r6b=?6=:r7?4;495:?7g2<?m2wx8l650;0x91>22??019m8:9a8yv2f?3:1>v3;85851>;3k>03n6s|4`494?4|5=286;;4=5a4>=g<uz>j97>52z?7<7<1=27?o:479:p0d2=838p196>:77891e02120q~:n3;296~;3090=963;c68;3>{t<j?1<7<t=5c2>33<5=i<6584}r6`0?6=:r7?m=495:?7g3<>:2wx8n=50;0x91?a2??019m9:9g8yv2d:3:1>v3;9d851>;3k?03o6s|4b394?4|5=3o6;;4=5a5>=d<uz>h<7>52z?7=f<1=27?o;47a:p0g`=838p197::77891e12130q~:m8;296~;30h0=963;c78;<>{t<hn1<7<t=55e>33<5=i=6594}r6b6?6=:r7?;h495:?7g3<?>2wx=o850;0x94?b28=270?6f;c7?xu3kh0;68u24b`952?<5=i=6484=5a4><0<5=i36484=5a:><0<uz99j7>52z?1g2<f;279j=4>789~w4d22909w0?6d;34=>;6i>0j?6s|17394?e|5;n>6l:4=3f4>d5<5;n26l;4=3fa>d5<5;nm6l=4=3g`>d5<5;ii6l=4=3g4>d5<5;o>6l:4=3g3>d3<5;no6l=4=3a`>41>3ty:::4?:4y>6ad=i<16>ih5a79>6`g=i<16>i=5a59>6ae=9>30q~?94;297~;4kl0j863<cg8b1>;4kj0:;45rs052>5<5s48o<7o<;<0`g?`23ty:<>4?:2y>6a6=9>301?mj:`4897b42h?0q~?9f;296~;5kl0j963=db8e1>{t9?81<7:t=3af>41>348nh7o9;<0``?g1348n;7o9;|q1ag<72;q6>hl516;897cc2h>0q~<jc;296~;5mj0:;4522df9e6=z{;oj6=4={<0f`?g2348nm7?89:p6fc=838p1?mi:05:?84dl3k?7p}=cc83>7}::jh1=:74=3ag>d5<uz8h57>52z?1ga<f=279o44>789~w4142909w0<j3;c6?84b<3;<56s|16694?4|5;o86l84=3g6>41>3ty:<84?:3y>6`1=i<16>h6516;8yv77k3:1?v3<d9823<=:;j?1m;523b59e3=z{88n6=4={<0fe?g1348n=7h:;|q211<72<q6?nj516;896b12h?01>j8:`7896e22h>01>m8:`68yv7203:1>v3=c`823<=::j31m85rs07b>5<5s48o=7?89:?1`6<f>2wx=8m50;1x97c22h<01?k?:`4897c128=27p}>7183>7}::l21m;522d49b0=z{8<;6=4={<0`=?g1348n>7h:;|q220<72;q6?i>516;896b12h<0q~?98;296~;4l80:;4523e59e3=z{8<j6=4={<1g6?701278o84n5:p53d=838p1>j<:05:?85d?3k>7p}>6b83>7}::l>1m;522ef9b0=z{8<o6=4={<1g1?701278h94n6:p53c=838p1<o?:05:?87>n3k=7ps|55`94?4|V<8<70;8:404?!2b;3;<>6s|55;94?4|V<8=70;8:405?!2b;3;<?6s|55:94?4|V<8>70;8:406?!2b;3;<86s|55594?4|V<8?70;8:407?!2b;3;<96s|55494?4|V<8870;8:400?!2b;3;;96s|55794?4|V<8970;8:401?!2b;3;;46s|55194?4|V<8;70;8:403?!2b;3;;o6s|55094?4|V<;m70;8:43e?!2b;3;;h6s|55394?4|V<;n70;8:43f?!2b;3;:46s|55294?4|V<;o70;8:43g?!2b;3;9?6s|52d94?4|V<;h70;8:43`?!2b;3;9i6s|52g94?4|V<;i70;8:43a?!2b;3;8;6s|52f94?4|V<;j70;8:43b?!2b;3;?<6s|52a94?4|V<;270;8:43:?!2b;3;?56s|52`94?4|V<;370;8:43;?!2b;3;>>6s|52c94?4|V<;<70;8:434?!2b;3;>?6s|52:94?4|V<;>70;8:436?!2b;3;>86s|52594?4|V<;?70;8:437?!2b;3;>96s|52494?4|V<;870;8:430?!2b;3;>:6s|52794?4|V<;970;8:431?!2b;3;>;6s|52694?4|V<;:70;8:432?!2b;3;>46s|52194?4|V<;;70;8:433?!2b;3;>56s|52094?4|V<:m70;8:42e?!2b;3;>m6s|52394?4|V<:n70;8:42f?!2b;3;>n6s|52294?4|V<:o70;8:42g?!2b;3;>o6s|53d94?4|V<:h70;8:42`?!2b;3;>h6s|54094?4|V<8o70;8:40g?!2b;3;>i6s|54394?4|V<8h70;8:40`?!2b;3;>j6s|54294?4|V<8i70;8:40a?!2b;3;=<6s|55d94?4|V<8j70;8:40b?!2b;3;==6s|55g94?4|V<8270;8:40:?!2b;3;=>6s|55f94?4|V<8370;8:40;?!2b;3;=?6s|55a94?4|V<8:70;8:402?!2b;3;=86s|55694?4|V<;=70;8:435?!2b;3;=:6s|52;94?4|V<:i70;8:42a?!2b;3;=;6s|53g94?4|V<:j70;8:42b?!2b;3;=56s|5g394?4|V<l:70;8:4d2?!2b;3;;:6s|61`94?4|V?:i70;8:72a?!2b;3;;;6s|61f94?4|V?:o70;8:72g?!2b;3;;56s|60694?4|V?;?70;8:737?!2b;3;;m6s|63g94?4|V?8n70;8:70f?!2b;3;;n6s|58694?4|V<=;70;8:453?!2b;3;;i6s|58094?4|V<<m70;8:44e?!2b;3;;j6s|58394?4|V<<n70;8:44f?!2b;3;:<6s|58294?4|V<<o70;8:44g?!2b;3;:=6s|59d94?4|V<<h70;8:44`?!2b;3;:>6s|59g94?4|V<<i70;8:44a?!2b;3;:?6s|59a94?4|V<<270;8:44:?!2b;3;:86s|59`94?4|V<<370;8:44;?!2b;3;:96s|59c94?4|V<<<70;8:444?!2b;3;::6s|59;94?4|V<<=70;8:445?!2b;3;:;6s|59:94?4|V<<>70;8:446?!2b;3;:56s|59594?4|V<<?70;8:447?!2b;3;:m6s|59494?4|V<<870;8:440?!2b;3;:n6s|59794?4|V<<970;8:441?!2b;3;:o6s|59694?4|V<<:70;8:442?!2b;3;:h6s|59194?4|V<<;70;8:443?!2b;3;:i6s|59394?4|V<?n70;8:47f?!2b;3;:j6s|59294?4|V<?o70;8:47g?!2b;3;9<6s|56d94?4|V<?h70;8:47`?!2b;3;9=6s|56g94?4|V<?i70;8:47a?!2b;3;9>6s|56f94?4|V<?j70;8:47b?!2b;3;986s|56a94?4|V<?270;8:47:?!2b;3;996s|56`94?4|V<?370;8:47;?!2b;3;9:6s|56c94?4|V<?<70;8:474?!2b;3;9;6s|56;94?4|V<?=70;8:475?!2b;3;946s|56:94?4|V<?>70;8:476?!2b;3;956s|58`94?4|V<==70;8:455?!2b;3;9m6s|58c94?4|V<=>70;8:456?!2b;3;9n6s|58;94?4|V<=?70;8:457?!2b;3;9o6s|58:94?4|V<=870;8:450?!2b;3;9h6s|58594?4|V<=970;8:451?!2b;3;9j6s|58494?4|V<=:70;8:452?!2b;3;8<6s|58794?4|V<<j70;8:44b?!2b;3;8=6s|59f94?4|V<?m70;8:47e?!2b;3;8>6s|59094?4|V<??70;8:477?!2b;3;8?6s|56594?4|V<?870;8:470?!2b;3;886s|58f94?4|V<3o70;8:4;g?!2b;3;896s|5`194?4|V<k870;8:4c0?!2b;3;8:6s|61394?4|V<l>70;8:4d6?!2b;3;846s|5gd94?4|V<l?70;8:4d7?!2b;3;856s|61c94?4|V<lo70;8:4dg?!2b;3;8m6s|61;94?4|V<lh70;8:4d`?!2b;3;8n6s|61:94?4|V<li70;8:4da?!2b;3;8o6s|61594?4|V<lj70;8:4db?!2b;3;8h6s|61494?4|V<l270;8:4d:?!2b;3;8i6s|61794?4|V<l370;8:4d;?!2b;3;8j6s|61694?4|V<l<70;8:4d4?!2b;3;?=6s|61194?4|V<l=70;8:4d5?!2b;3;?>6s|61094?4|V<l870;8:4d0?!2b;3;??6s|5gg94?4|V<l970;8:4d1?!2b;3;?86s|63694?4|V?;370;8:73;?!2b;3;?96s|63094?4|V?;<70;8:734?!2b;3;?:6s|63f94?4|V?8;70;8:703?!2b;3;?;6s|63a94?4|V?;m70;8:73e?!2b;3;?46s|63`94?4|V?;n70;8:73f?!2b;3;?m6s|63c94?4|V?;o70;8:73g?!2b;3;?n6s|63;94?4|V?;h70;8:73`?!2b;3;?o6s|63:94?4|V?;i70;8:73a?!2b;3;?h6s|63594?4|V?;j70;8:73b?!2b;3;?i6s|63494?4|V?;270;8:73:?!2b;3;?j6s|63794?4|V?;=70;8:735?!2b;3;><6s|63394?4|V?;>70;8:736?!2b;3;>=6srnd5;>5<5sA>n86sae6;94?4|@=o?7p`j7`83>7}O<l>0qck8b;296~N3m=1vbh9l:181M2b<2wei:j50;0xL1c33tdn;h4?:3yK0`2<ugo<j7>52zJ7a1=zfl2;6=4={I6f0>{im1;1<7<tH5g7?xhb0;0;6?uG4d68ykc?;3:1>vF;e59~j`>32909wE:j4:ma=3=838pD9k;;|lf<3<72;qC8h:4}og;3?6=:rB?i95rnd:;>5<5sA>n86sae9;94?4|@=o?7p`j8`83>7}O<l>0qck7b;296~N3m=1vbh6l:181M2b<2wei5j50;0xL1c33tdn4h4?:3yK0`2<ugo3j7>52zJ7a1=zfl3;6=4={I6f0>{im0;1<7<tH5g7?xhb1;0;6?uG4d68ykc>;3:1>vF;e59~j`?32909wE:j4:ma<3=838pD9k;;|lf=3<72;qC8h:4}og:3?6=:rB?i95rnd;;>5<5sA>n86sae8;94?4|@=o?7p`j9`83>7}O<l>0qck6b;296~N3m=1vbh7l:181M2b<2wei4j50;0xL1c33tdn5h4?:3yK0`2<ugo2j7>52zJ7a1=zflk;6=4={I6f0>{imh;1<7<tH5g7?xhbi;0;6?uG4d68ykcf;3:1>vF;e59~j`g32909wE:j4:mad3=838pD9k;;|lfe3<72;qC8h:4}ogb3?6=:rB?i95rndc;>5<5sA>n86sae`;94?4|@=o?7p`ja`83>7}O<l>0qcknb;296~N3m=1vbhol:181M2b<2weilj50;0xL1c33tdnmh4?:3yK0`2<ugojj7>52zJ7a1=zflh;6=4={I6f0>{imk;1<7<tH5g7?xhbj;0;6?uG4d68ykce;3:1>vF;e59~j`d32909wE:j4:mag3=838pD9k;;|lff3<72;qC8h:4}oga3?6=:rB?i95rnd`;>5<5sA>n86saec;94?4|@=o?7p`jb`83>7}O<l>0qckmb;296~N3m=1vbhll:181M2b<2weioj50;0xL1c33tdnnh4?:3yK0`2<ugoij7>52zJ7a1=zfli;6=4={I6f0>{imj;1<7<tH5g7?xhbk;0;6?uG4d68ykcd;3:1>vF;e59~j`e32909wE:j4:maf3=838pD9k;;|lfg3<72;qC8h:4}og`3?6=:rB?i95rnda;>5<5sA>n86saeb;94?4|@=o?7p`jc`83>7}O<l>0qcklb;296~N3m=1vbhml:181M2b<2weinj50;0xL1c33tdnoh4?:3yK0`2<ugohj7>52zJ7a1=zfln;6=4={I6f0>{imm;1<7<tH5g7?xhbl;0;6?uG4d68ykcc;3:1>vF;e59~j`b32909wE:j4:maa3=838pD9k;;|lf`3<72;qC8h:4}ogg3?6=:rB?i95rndf;>5<5sA>n86saee;94?4|@=o?7p`jd`83>7}O<l>0qckkb;296~N3m=1vbhjl:181M2b<2weiij50;0xL1c33tdnhh4?:3yK0`2<ugi8<7>51zJ7a1=zfj3<6=4>{I6f0>{ik021<7?tH5g7?xhd100;6<uG4d68yke>i3:1=vF;e59~jf?e290:wE:j4:mg<e=83;pD9k;;|l`=a<728qC8h:4}oa:a?6=9rB?i95rnb;e>5<6sA>n86sac`294?7|@=o?7p`la083>4}O<l>0qcmn2;295~N3m=1vbno<:182M2b<2weol:50;3xL1c33tdhm84?:0yK0`2<ugij:7>51zJ7a1=zfjk<6=4>{I6f0>{ikh21<7?tH5g7?xhdi00;6<uG4d68ykefi3:1=vF;e59~jfge290:wE:j4:mgde=83;pD9k;;|l`ea<728qC8h:4}oaba?6=9rB?i95rnbce>5<6sA>n86sacc294?7|@=o?7p`lb083>4}O<l>0qcmm2;295~N3m=1vbnl<:182M2b<2weoo:50;3xL1c33tdhn84?:0yK0`2<ugii:7>51zJ7a1=zfjh<6=4>{I6f0>{ikk21<7?tH5g7?xhdj00;6<uG4d68ykeei3:1=vF;e59~jfde290:wE:j4:mgge=83;pD9k;;|l`fa<728qC8h:4}oaaa?6=9rB?i95rnb`e>5<6sA>n86sacb294?7|@=o?7p`lc083>4}O<l>0qcml2;295~N3m=1vbnm<:182M2b<2weon:50;3xL1c33tdho84?:0yK0`2<ugih:7>51zJ7a1=zfji<6=4>{I6f0>{ikj21<7?tH5g7?xhdk00;6<uG4d68ykedi3:1=vF;e59~jfee290:wE:j4:mgfe=83;pD9k;;|l`ga<728qC8h:4}oa`a?6=9rB?i95rnbae>5<6sA>n86sace294?7|@=o?7p`ld083>4}O<l>0qcmk2;295~N3m=1vbnj<:182M2b<2weoi:50;3xL1c33tdhh84?:0yK0`2<ugio:7>51zJ7a1=zfjn<6=4>{I6f0>{ikm21<7?tH5g7?xhdl00;6<uG4d68ykeci3:1=vF;e59~jfbe290:wE:j4:mgae=83;pD9k;;|l``a<728qC8h:4}oaga?6=9rB?i95rnbfe>5<6sA>n86sacd294?7|@=o?7p`le083>4}O<l>0qcmj2;295~N3m=1vbnk<:182M2b<2weoh:50;3xL1c33tdhi84?:0yK0`2<ugin:7>51zJ7a1=zfjo<6=4>{I6f0>{ikl21<7?tH5g7?xhdm00;6<uG4d68ykebi3:1=vF;e59~jfce290:wE:j4:mg`e=83;pD9k;;|l`aa<728qC8h:4}oafa?6=9rB?i95rnbge>5<6sA>n86sacg294?7|@=o?7p`lf083>4}O<l>0qcmi2;295~N3m=1vbnh<:182M2b<2weok:50;3xL1c33tdhj84?:0yK0`2<ugim:7>51zJ7a1=zfjl<6=4>{I6f0>{iko21<7?tH5g7?xhdn00;6<uG4d68ykeai3:1=vF;e59~jf`e290:wE:j4:mgce=83;pD9k;;|l`ba<728qC8h:4}oaea?6=9rB?i95rnbde>5<6sA>n86sad1294?7|@=o?7p`k0083>4}O<l>0qcj?2;295~N3m=1vbi><:182M2b<2weh=:50;3xL1c33tdo<84?:0yK0`2<ugn;:7>51zJ7a1=zfm:<6=4>{I6f0>{il921<7?tH5g7?xhc800;6<uG4d68ykb7i3:1=vF;e59~ja6e290:wE:j4:m`5e=83;pD9k;;|lg4a<728qC8h:4}of3a?6=9rB?i95rne2e>5<6sA>n86sad0294?7|@=o?7p`k1083>4}O<l>0qcj>2;295~N3m=1vbi?<:182M2b<2weh<:50;3xL1c33tdo=84?:0yK0`2<ugn::7>51zJ7a1=zfm;<6=4>{I6f0>{il821<7?tH5g7?xhc900;6<uG4d68ykb6i3:1=vF;e59~ja7e290:wE:j4:m`4e=83;pD9k;;|lg5a<728qC8h:4}of2a?6=9rB?i95rne3e>5<6sA>n86sad3294?7|@=o?7p`k2083>4}O<l>0qcj=2;295~N3m=1vbi<<:182M2b<2weh?:50;3xL1c33tdo>84?:0yK0`2<ugn9:7>51zJ7a1=zfm8<6=4>{I6f0>{il;21<7?tH5g7?xhc:00;6<uG4d68ykb5i3:1=vF;e59~ja4e290:wE:j4:m`7e=83;pD9k;;|lg6a<728qC8h:4}of1a?6=9rB?i95rne0e>5<6sA>n86sad2294?7|@=o?7p`k3083>4}O<l>0qcj<2;295~N3m=1vbi=<:182M2b<2weh>:50;3xL1c33tdo?84?:0yK0`2<ugn8:7>51zJ7a1=zfm9<6=4>{I6f0>{il:21<7?tH5g7?xhc;00;6<uG4d68ykb4i3:1=vF;e59~ja5e290:wE:j4:m`6e=83;pD9k;;|lg7a<728qC8h:4}of0a?6=9rB?i95rne1e>5<6sA>n86sad5294?7|@=o?7p`k4083>4}O<l>0qcj;2;295~N3m=1vbi:<:182M2b<2weh9:50;3xL1c33tdo884?:0yK0`2<ugn?:7>51zJ7a1=zfm><6=4>{I6f0>{il=21<7?tH5g7?xhc<00;6<uG4d68ykb3i3:1=vF;e59~ja2e290:wE:j4:m`1e=83;pD9k;;|lg0a<728qC8h:4}of7a?6=9rB?i95rne6e>5<6sA>n86sad4294?7|@=o?7p`k5083>4}O<l>0qcj:2;295~N3m=1vbi;<:182M2b<2weh8:50;3xL1c33tdo984?:0yK0`2<ugn>:7>51zJ7a1=zfm?<6=4>{I6f0>{il<21<7?tH5g7?xhc=00;6<uG4d68ykb2i3:1=vF;e59~ja3e290:wE:j4:m`0e=83;pD9k;;|lg1a<728qC8h:4}of6a?6=9rB?i95rne7e>5<6sA>n86sad7294?7|@=o?7p`k6083>4}O<l>0qcj92;295~N3m=1vbi8<:182M2b<2weh;:50;3xL1c33tdo:84?:0yK0`2<ugn=:7>51zJ7a1=zfm<<6=4>{I6f0>{il?21<7?tH5g7?xhc>00;6<uG4d68ykb1i3:1=vF;e59~ja0e290:wE:j4:m`3e=83;pD9k;;|lg2a<728qC8h:4}of5a?6=9rB?i95rne4e>5<6sA>n86sad6294?7|@=o?7p`k7083>4}O<l>0qcj82;295~N3m=1vbi9<:182M2b<2weh::50;3xL1c33tdo;84?:0yK0`2<ugn<:7>51zJ7a1=zfm=<6=4>{I6f0>{il>21<7?tH5g7?xhc?00;6<uG4d68ykb0i3:1=vF;e59~ja1e290:wE:j4:m`2e=83;pD9k;;|lg3a<728qC8h:4}of4a?6=9rB?i95rne5e>5<6sA>n86sad9294?7|@=o?7p`k8083>4}O<l>0qcj72;295~N3m=1vbi6<:182M2b<2weh5:50;3xL1c33tdo484?:0yK0`2<ugn3:7>51zJ7a1=zfm2<6=4>{I6f0>{il121<7?tH5g7?xhc000;6<uG4d68ykb?i3:1=vF;e59~ja>e290:wE:j4:m`=e=83;pD9k;;|lg<a<728qC8h:4}of;a?6=9rB?i95rne:e>5<6sA>n86sad8294?7|@=o?7p`k9083>4}O<l>0qcj62;295~N3m=1vbi7<:182M2b<2weh4:50;3xL1c33tdo584?:0yK0`2<ugn2:7>51zJ7a1=zfm3<6=4>{I6f0>{il021<7?tH5g7?xhc100;6<uG4d68ykb>i3:1=vF;e59~ja?e290:wE:j4:m`<e=83;pD9k;;|lg=a<728qC8h:4}of:a?6=9rB?i95rne;e>5<6sA>n86sad`294?7|@=o?7p`ka083>4}O<l>0qcjn2;295~N3m=1vbio<:182M2b<2wehl:50;3xL1c33tdom84?:0yK0`2<ugnj:7>51zJ7a1=zfmk<6=4>{I6f0>{ilh21<7?tH5g7?xhci00;6<uG4d68ykbfi3:1=vF;e59~jage290:wE:j4:m`de=83;pD9k;;|lgea<728qC8h:4}ofba?6=9rB?i95rnece>5<6sA>n86sadc294?7|@=o?7p`kb083>4}O<l>0qcjm2;295~N3m=1vbil<:182M2b<2weho:50;3xL1c33tdon84?:0yK0`2<ugni:7>51zJ7a1=zfmh<6=4>{I6f0>{ilk21<7?tH5g7?xhcj00;6<uG4d68ykbei3:1=vF;e59~jade290:wE:j4:m`ge=83;pD9k;;|lgfa<728qC8h:4}ofaa?6=9rB?i95rne`e>5<6sA>n86sadb294?7|@=o?7p`kc083>4}O<l>0qcjl2;295~N3m=1vbim<:182M2b<2wehn:50;3xL1c33tdoo84?:0yK0`2<ugnh:7>51zJ7a1=zfmi<6=4>{I6f0>{ilj21<7?tH5g7?xhck00;6<uG4d68ykbdi3:1=vF;e59~jaee290:wE:j4:m`fe=83;pD9k;;|lgga<728qC8h:4}of`a?6=9rB?i95rneae>5<6sA>n86sade294?7|@=o?7p`kd083>4}O<l>0qcjk2;295~N3m=1vbij<:182M2b<2wehi:50;3xL1c33tdoh84?:0yK0`2<ugno:7>51zJ7a1=zfmn<6=4>{I6f0>{ilm21<7?tH5g7?xhcl00;6<uG4d68ykbci3:1=vF;e59~jabe290:wE:j4:m`ae=83;pD9k;;|lg`a<728qC8h:4}ofga?6=9rB?i95rnefe>5<6sA>n86sadd294?7|@=o?7p`ke083>4}O<l>0qcjj2;295~N3m=1vbik<:182M2b<2wehh:50;3xL1c33tdoi84?:0yK0`2<ugnn:7>51zJ7a1=zfmo<6=4>{I6f0>{ill21<7?tH5g7?xhcm00;6<uG4d68ykbbi3:1=vF;e59~jace290:wE:j4:m``e=83;pD9k;;|lgaa<728qC8h:4}offa?6=9rB?i95rnege>5<6sA>n86sadg294?7|@=o?7p`kf083>4}O<l>0qcji2;295~N3m=1vbih<:182M2b<2wehk:50;3xL1c33tdoj84?:0yK0`2<ugnm:7>51zJ7a1=zfml<6=4>{I6f0>{ilo21<7?tH5g7?xhcn00;6<uG4d68ykbai3:1=vF;e59~ja`e290:wE:j4:m`ce=83;pD9k;;|lgba<728qC8h:4}ofea?6=9rB?i95rnede>5<6sA>n86sae1294?7|@=o?7p`j0083>4}O<l>0qck?2;295~N3m=1vbh><:182M2b<2wei=:50;3xL1c33tdn<84?:0yK0`2<ugo;:7>51zJ7a1=zfl:<6=4>{I6f0>{im921<7?tH5g7?xhb800;6<uG4d68ykc7i3:1=vF;e59~j`6e290:wE:j4:ma5e=83;pD9k;;|lf4a<728qC8h:4}og3a?6=9rB?i95rnd2e>5<6sA>n86sae0294?7|@=o?7p`j1083>4}O<l>0qck>2;295~N3m=1vbh?<:182M2b<2wei<:50;3xL1c33tdn=84?:0yK0`2<ugo::7>51zJ7a1=zfl;<6=4>{I6f0>{im821<7?tH5g7?xhb900;6<uG4d68ykc6i3:1=vF;e59~j`7e290:wE:j4:ma4e=83;pD9k;;|lf5a<728qC8h:4}og2a?6=9rB?i95rnd3e>5<6sA>n86sae3294?7|@=o?7p`j2083>4}O<l>0qck=2;295~N3m=1vbh<<:182M2b<2wei?:50;3xL1c33tdn>84?:0yK0`2<ugo9:7>51zJ7a1=zfl8<6=4>{I6f0>{im;21<7?tH5g7?xhb:00;6<uG4d68ykc5i3:1=vF;e59~j`4e290:wE:j4:ma7e=83;pD9k;;|lf6a<728qC8h:4}og1a?6=9rB?i95rnd0e>5<6sA>n86sae2294?7|@=o?7p`j3083>4}O<l>0qck<2;295~N3m=1vbh=<:182M2b<2wei>:50;3xL1c33tdn?84?:0yK0`2<ugo8:7>51zJ7a1=zfl9<6=4>{I6f0>{im:21<7?tH5g7?xhb;00;6<uG4d68ykc4i3:1=vF;e59~j`5e290:wE:j4:ma6e=83;pD9k;;|lf7a<728qC8h:4}og0a?6=9rB?i95rnd1e>5<6sA>n86sae5294?7|@=o?7p`j4083>4}O<l>0qck;2;295~N3m=1vbh:<:182M2b<2wei9:50;3xL1c33tdn884?:0yK0`2<ugo?:7>51zJ7a1=zfl><6=4>{I6f0>{im=21<7?tH5g7?xhb<00;6<uG4d68ykc3i3:1=vF;e59~j`2e290:wE:j4:ma1e=83;pD9k;;|lf0a<728qC8h:4}og7a?6=9rB?i95rnd6e>5<6sA>n86sae4294?7|@=o?7p`j5083>4}O<l>0qck:2;295~N3m=1vbh;<:182M2b<2wei8:50;3xL1c33tdn984?:0yK0`2<ugo>:7>51zJ7a1=zfl?<6=4>{I6f0>{im<21<7?tH5g7?xhb=00;6<uG4d68ykc2i3:1=vF;e59~j`3e290:wE:j4:ma0e=83;pD9k;;|lf1a<728qC8h:4}og6a?6=9rB?i95rnd7e>5<6sA>n86sae7294?7|@=o?7p`j6083>4}O<l>0qck92;295~N3m=1vbh8<:182M2b<2wei;:50;3xL1c33tdn:84?:0yK0`2<ugo=:7>51zJ7a1=zfl<<6=4>{I6f0>{im?21<7?tH5g7?xhb>00;6<uG4d68ykc1i3:1=vF;e59~j`0e290:wE:j4:ma3e=83;pD9k;;|lf2a<728qC8h:4}og5a?6=9rB?i95rnd4e>5<6sA>n86sae6294?7|@=o?7p`j7083>4}O<l>0qck82;295~N3m=1vbh9<:182M2b<2wei::50;3xL1c33tdn;84?:0yK0`2<ugo<:7>51zJ7a1=zfl=<6=4>{I6f0>{zutJKOv?>2985==>6l;3vLMLt0|BCT~{GH
\ No newline at end of file diff --git a/coregen/fifo_xlnx_2Kx36_2clk.sym b/coregen/fifo_xlnx_2Kx36_2clk.sym index ab6729a93..5d56b5c98 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.sym +++ b/coregen/fifo_xlnx_2Kx36_2clk.sym @@ -1,7 +1,7 @@ VERSION 5 BEGIN SYMBOL fifo_xlnx_2Kx36_2clk SYMBOLTYPE BLOCK -TIMESTAMP 2008 7 14 23 44 58 +TIMESTAMP 2009 9 3 17 25 13 SYMPIN 0 80 Input din[35:0] SYMPIN 0 144 Input wr_en SYMPIN 0 176 Input wr_clk @@ -10,9 +10,9 @@ SYMPIN 0 272 Input rd_clk SYMPIN 144 704 Input rst SYMPIN 576 80 Output dout[35:0] SYMPIN 576 208 Output full -SYMPIN 576 368 Output wr_data_count[10:0] +SYMPIN 576 368 Output wr_data_count[11:0] SYMPIN 576 432 Output empty -SYMPIN 576 592 Output rd_data_count[10:0] +SYMPIN 576 592 Output rd_data_count[11:0] BEGIN DISPLAY 32 32 TEXT fifo_xlnx_2Kx36_2clk FONT 40 "Arial" END DISPLAY @@ -56,7 +56,7 @@ BEGIN DISPLAY 540 208 PIN full ATTR PinName END DISPLAY BEGIN LINE W 576 368 544 368 END LINE -BEGIN DISPLAY 540 368 PIN wr_data_count[10:0] ATTR PinName +BEGIN DISPLAY 540 368 PIN wr_data_count[11:0] ATTR PinName ALIGNMENT RIGHT FONT 24 "Arial" END DISPLAY @@ -67,7 +67,7 @@ BEGIN DISPLAY 540 432 PIN empty ATTR PinName END DISPLAY BEGIN LINE W 576 592 544 592 END LINE -BEGIN DISPLAY 540 592 PIN rd_data_count[10:0] ATTR PinName +BEGIN DISPLAY 540 592 PIN rd_data_count[11:0] ATTR PinName ALIGNMENT RIGHT FONT 24 "Arial" END DISPLAY diff --git a/coregen/fifo_xlnx_2Kx36_2clk.v b/coregen/fifo_xlnx_2Kx36_2clk.v index c45dacdad..0762b3ae9 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.v +++ b/coregen/fifo_xlnx_2Kx36_2clk.v @@ -60,15 +60,15 @@ input wr_en; output [35 : 0] dout; output empty; output full; -output [10 : 0] rd_data_count; -output [10 : 0] wr_data_count; +output [11 : 0] rd_data_count; +output [11 : 0] wr_data_count; // synthesis translate_off FIFO_GENERATOR_V4_3 #( .C_COMMON_CLOCK(0), .C_COUNT_TYPE(0), - .C_DATA_COUNT_WIDTH(11), + .C_DATA_COUNT_WIDTH(12), .C_DEFAULT_VALUE("BlankString"), .C_DIN_WIDTH(36), .C_DOUT_RST_VAL("0"), @@ -108,19 +108,19 @@ output [10 : 0] wr_data_count; .C_PROG_FULL_THRESH_ASSERT_VAL(2047), .C_PROG_FULL_THRESH_NEGATE_VAL(2046), .C_PROG_FULL_TYPE(0), - .C_RD_DATA_COUNT_WIDTH(11), + .C_RD_DATA_COUNT_WIDTH(12), .C_RD_DEPTH(2048), .C_RD_FREQ(1), .C_RD_PNTR_WIDTH(11), .C_UNDERFLOW_LOW(0), - .C_USE_DOUT_RST(0), + .C_USE_DOUT_RST(1), .C_USE_ECC(0), .C_USE_EMBEDDED_REG(0), .C_USE_FIFO16_FLAGS(0), - .C_USE_FWFT_DATA_COUNT(0), + .C_USE_FWFT_DATA_COUNT(1), .C_VALID_LOW(0), .C_WR_ACK_LOW(0), - .C_WR_DATA_COUNT_WIDTH(11), + .C_WR_DATA_COUNT_WIDTH(12), .C_WR_DEPTH(2048), .C_WR_FREQ(1), .C_WR_PNTR_WIDTH(11), diff --git a/coregen/fifo_xlnx_2Kx36_2clk.veo b/coregen/fifo_xlnx_2Kx36_2clk.veo index bb691ff4d..af9191555 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.veo +++ b/coregen/fifo_xlnx_2Kx36_2clk.veo @@ -41,8 +41,8 @@ fifo_xlnx_2Kx36_2clk YourInstanceName ( .dout(dout), // Bus [35 : 0] .empty(empty), .full(full), - .rd_data_count(rd_data_count), // Bus [10 : 0] - .wr_data_count(wr_data_count)); // Bus [10 : 0] + .rd_data_count(rd_data_count), // Bus [11 : 0] + .wr_data_count(wr_data_count)); // Bus [11 : 0] // INST_TAG_END ------ End INSTANTIATION Template --------- diff --git a/coregen/fifo_xlnx_2Kx36_2clk.vhd b/coregen/fifo_xlnx_2Kx36_2clk.vhd index 834abf271..53033dc97 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.vhd +++ b/coregen/fifo_xlnx_2Kx36_2clk.vhd @@ -51,8 +51,8 @@ ENTITY fifo_xlnx_2Kx36_2clk IS dout: OUT std_logic_VECTOR(35 downto 0); empty: OUT std_logic; full: OUT std_logic; - rd_data_count: OUT std_logic_VECTOR(10 downto 0); - wr_data_count: OUT std_logic_VECTOR(10 downto 0)); + rd_data_count: OUT std_logic_VECTOR(11 downto 0); + wr_data_count: OUT std_logic_VECTOR(11 downto 0)); END fifo_xlnx_2Kx36_2clk; ARCHITECTURE fifo_xlnx_2Kx36_2clk_a OF fifo_xlnx_2Kx36_2clk IS @@ -68,8 +68,8 @@ component wrapped_fifo_xlnx_2Kx36_2clk dout: OUT std_logic_VECTOR(35 downto 0); empty: OUT std_logic; full: OUT std_logic; - rd_data_count: OUT std_logic_VECTOR(10 downto 0); - wr_data_count: OUT std_logic_VECTOR(10 downto 0)); + rd_data_count: OUT std_logic_VECTOR(11 downto 0); + wr_data_count: OUT std_logic_VECTOR(11 downto 0)); end component; -- Configuration specification @@ -88,7 +88,7 @@ end component; c_use_embedded_reg => 0, c_has_wr_rst => 0, c_wr_freq => 1, - c_use_dout_rst => 0, + c_use_dout_rst => 1, c_underflow_low => 0, c_has_meminit_file => 0, c_has_overflow => 0, @@ -102,21 +102,21 @@ end component; c_has_rd_rst => 0, c_has_almost_full => 0, c_has_rst => 1, - c_data_count_width => 11, + c_data_count_width => 12, c_has_wr_ack => 0, c_use_ecc => 0, c_wr_ack_low => 0, c_common_clock => 0, c_rd_pntr_width => 11, - c_use_fwft_data_count => 0, + c_use_fwft_data_count => 1, c_has_almost_empty => 0, - c_rd_data_count_width => 11, + c_rd_data_count_width => 12, c_enable_rlocs => 0, c_wr_pntr_width => 11, c_overflow_low => 0, c_prog_empty_type => 0, c_optimization_mode => 0, - c_wr_data_count_width => 11, + c_wr_data_count_width => 12, c_preload_regs => 1, c_dout_rst_val => "0", c_has_data_count => 0, diff --git a/coregen/fifo_xlnx_2Kx36_2clk.vho b/coregen/fifo_xlnx_2Kx36_2clk.vho index 3fd2e43f1..5165b0bc4 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.vho +++ b/coregen/fifo_xlnx_2Kx36_2clk.vho @@ -40,8 +40,8 @@ component fifo_xlnx_2Kx36_2clk dout: OUT std_logic_VECTOR(35 downto 0); empty: OUT std_logic; full: OUT std_logic; - rd_data_count: OUT std_logic_VECTOR(10 downto 0); - wr_data_count: OUT std_logic_VECTOR(10 downto 0)); + rd_data_count: OUT std_logic_VECTOR(11 downto 0); + wr_data_count: OUT std_logic_VECTOR(11 downto 0)); end component; -- Synplicity black box declaration diff --git a/coregen/fifo_xlnx_2Kx36_2clk.xco b/coregen/fifo_xlnx_2Kx36_2clk.xco index 3afc64a10..e25ad38da 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk.xco +++ b/coregen/fifo_xlnx_2Kx36_2clk.xco @@ -1,7 +1,7 @@ ############################################################## # -# Xilinx Core Generator version K.37 -# Date: Mon Jul 14 23:45:29 2008 +# Xilinx Core Generator version K.39 +# Date: Thu Sep 3 17:25:43 2009 # ############################################################## # @@ -39,7 +39,7 @@ CSET almost_empty_flag=false CSET almost_full_flag=false CSET component_name=fifo_xlnx_2Kx36_2clk CSET data_count=false -CSET data_count_width=11 +CSET data_count_width=12 CSET disable_timing_violations=false CSET dout_reset_value=0 CSET empty_threshold_assert_value=4 @@ -61,22 +61,22 @@ CSET programmable_empty_type=No_Programmable_Empty_Threshold CSET programmable_full_type=No_Programmable_Full_Threshold CSET read_clock_frequency=1 CSET read_data_count=true -CSET read_data_count_width=11 +CSET read_data_count_width=12 CSET reset_pin=true CSET reset_type=Asynchronous_Reset CSET underflow_flag=false CSET underflow_sense=Active_High -CSET use_dout_reset=false +CSET use_dout_reset=true CSET use_embedded_registers=false -CSET use_extra_logic=false +CSET use_extra_logic=true CSET valid_flag=false CSET valid_sense=Active_High CSET write_acknowledge_flag=false CSET write_acknowledge_sense=Active_High CSET write_clock_frequency=1 CSET write_data_count=true -CSET write_data_count_width=11 +CSET write_data_count_width=12 # END Parameters GENERATE -# CRC: a8b698f5 +# CRC: 2ae9f6ef diff --git a/coregen/fifo_xlnx_2Kx36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/coregen/fifo_xlnx_2Kx36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt index 7089f8c2d..5108be2c5 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +++ b/coregen/fifo_xlnx_2Kx36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> -<document OS="lin64" product="ISE" version="10.1.02"> +<document OS="lin64" product="ISE" version="10.1.03"> <!--The data in this file is primarily intended for consumption by Xilinx tools. The structure and the elements are likely to change over the next few releases. This means code written to parse this file will need to be revisited each subsequent release.--> - <application stringID="Xst" timeStamp="Mon Jul 14 16:45:03 2008"> + <application stringID="Xst" timeStamp="Thu Sep 3 10:25:17 2009"> <section stringID="XST_HDL_SYNTHESIS_REPORT"> - <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="2"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"></item> <item dataType="int" stringID="XST_COUNTERS" value="2"> <item dataType="int" stringID="XST_11BIT_UP_COUNTER" value="2"/> </item> <item dataType="int" stringID="XST_REGISTERS" value="31"> <item dataType="int" stringID="XST_1BIT_REGISTER" value="15"/> - <item dataType="int" stringID="XST_11BIT_REGISTER" value="13"/> + <item dataType="int" stringID="XST_11BIT_REGISTER" value="11"/> <item dataType="int" stringID="XST_2BIT_REGISTER" value="1"/> <item dataType="int" stringID="XST_3BIT_REGISTER" value="1"/> <item dataType="int" stringID="XST_36BIT_REGISTER" value="1"/> @@ -25,12 +25,12 @@ </section> <section stringID="XST_ADVANCED_HDL_SYNTHESIS_REPORT"> <item dataType="int" stringID="XST_FSMS" value="1"/> - <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="2"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"></item> <item dataType="int" stringID="XST_COUNTERS" value="2"> <item dataType="int" stringID="XST_11BIT_UP_COUNTER" value="2"/> </item> - <item dataType="int" stringID="XST_REGISTERS" value="199"> - <item dataType="int" stringID="XST_FLIPFLOPS" value="199"/> + <item dataType="int" stringID="XST_REGISTERS" value="189"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="189"/> </item> <item dataType="int" stringID="XST_XORS" value="91"> <item dataType="int" stringID="XST_1BIT_XOR2" value="90"/> @@ -38,8 +38,8 @@ </item> </section> <section stringID="XST_FINAL_REGISTER_REPORT"> - <item dataType="int" stringID="XST_REGISTERS" value="218"> - <item dataType="int" stringID="XST_FLIPFLOPS" value="218"/> + <item dataType="int" stringID="XST_REGISTERS" value="222"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="222"/> </item> </section> <section stringID="XST_PARTITION_REPORT"> @@ -49,33 +49,34 @@ </section> <section stringID="XST_FINAL_REPORT"> <section stringID="XST_FINAL_RESULTS"> - <item stringID="XST_TOP_LEVEL_OUTPUT_FILE_NAME" value="tmp/_cg/fifo_xlnx_2Kx36_2clk_fifo_generator_v4_3_xst_1.ngc"/> + <item stringID="XST_TOP_LEVEL_OUTPUT_FILE_NAME" value="/home/matt/coregen/tmp/_cg/fifo_xlnx_2Kx36_2clk_fifo_generator_v4_3_xst_1.ngc"/> <item stringID="XST_OUTPUT_FORMAT" value="NGC"/> <item stringID="XST_OPTIMIZATION_GOAL" value="SPEED"/> <item stringID="XST_KEEP_HIERARCHY" value="no"/> </section> <section stringID="XST_DESIGN_STATISTICS"> - <item stringID="XST_IOS" value="195"/> + <item stringID="XST_IOS" value="198"/> </section> <section stringID="XST_CELL_USAGE"> - <item dataType="int" stringID="XST_BELS" value="234"> + <item dataType="int" stringID="XST_BELS" value="283"> <item dataType="int" stringID="XST_GND" value="1"/> + <item dataType="int" stringID="XST_INV" value="1"/> <item dataType="int" stringID="XST_LUT1" value="22"/> - <item dataType="int" stringID="XST_LUT2" value="55"/> - <item dataType="int" stringID="XST_LUT2L" value="1"/> - <item dataType="int" stringID="XST_LUT3" value="11"/> - <item dataType="int" stringID="XST_LUT4" value="33"/> - <item dataType="int" stringID="XST_LUT4L" value="2"/> + <item dataType="int" stringID="XST_LUT2" value="63"/> + <item dataType="int" stringID="XST_LUT3" value="19"/> + <item dataType="int" stringID="XST_LUT3D" value="1"/> + <item dataType="int" stringID="XST_LUT3L" value="3"/> + <item dataType="int" stringID="XST_LUT4" value="62"/> + <item dataType="int" stringID="XST_LUT4D" value="2"/> <item dataType="int" stringID="XST_MUXCY" value="64"/> <item dataType="int" stringID="XST_VCC" value="1"/> <item dataType="int" stringID="XST_XORCY" value="44"/> </item> - <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="218"> + <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="222"> <item dataType="int" stringID="XST_FD" value="4"/> - <item dataType="int" stringID="XST_FDC" value="112"/> - <item dataType="int" stringID="XST_FDCE" value="52"/> - <item dataType="int" stringID="XST_FDE" value="36"/> - <item dataType="int" stringID="XST_FDP" value="9"/> + <item dataType="int" stringID="XST_FDC" value="103"/> + <item dataType="int" stringID="XST_FDCE" value="88"/> + <item dataType="int" stringID="XST_FDP" value="10"/> <item dataType="int" stringID="XST_FDPE" value="5"/> </item> <item dataType="int" stringID="XST_RAMS" value="4"> @@ -85,10 +86,10 @@ </section> <section stringID="XST_DEVICE_UTILIZATION_SUMMARY"> <item stringID="XST_SELECTED_DEVICE" value="3s2000fg456-5"/> - <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="138"/> - <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="218"/> - <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="124"/> - <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="195"/> + <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="162"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="222"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="173"/> + <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="198"/> <item AVAILABLE="333" dataType="int" stringID="XST_NUMBER_OF_BONDED_IOBS" value="0"/> <item AVAILABLE="40" dataType="int" stringID="XST_NUMBER_OF_BRAMS" value="4"/> </section> @@ -97,8 +98,8 @@ </section> <section stringID="XST_ERRORS_STATISTICS"> <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_ERRORS" value="0"/> - <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="199"/> - <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="28"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="196"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="29"/> </section> </application> diff --git a/coregen/fifo_xlnx_2Kx36_2clk_readme.txt b/coregen/fifo_xlnx_2Kx36_2clk_readme.txt index 86b8f03e1..1879503a9 100644 --- a/coregen/fifo_xlnx_2Kx36_2clk_readme.txt +++ b/coregen/fifo_xlnx_2Kx36_2clk_readme.txt @@ -1,5 +1,5 @@ The following files were generated for 'fifo_xlnx_2Kx36_2clk' in directory -/home/matt/usrp2/fpga/coregen: +/home/matt/gnuradio.git/usrp2/fpga/coregen/: fifo_xlnx_2Kx36_2clk.asy: Graphical symbol information file. Used by the ISE tools and some diff --git a/coregen/fifo_xlnx_512x36_2clk.ngc b/coregen/fifo_xlnx_512x36_2clk.ngc index 618ccf766..55486485a 100644 --- a/coregen/fifo_xlnx_512x36_2clk.ngc +++ b/coregen/fifo_xlnx_512x36_2clk.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII XILINX-XDM V1.4e -$4::40<,[o}e~g`n;"2*413&;$8,)=;;.jli`)ji}~$ob|jgdl,phv(Wjm$jdh`_ynm|Z36:q9=S?mck/ldk4=712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123457<9:1:"=?4200877<NFY__6IGN<2394;753:81EC^ZT;FJF956294:?6==:NWWTPR=LFK7?<4?>01877<H]]Z^X7J@B=12>5833:99?<<4378JJUSS2mce0>;50?37?60=G\^[YY4kotv?70<76;184i5<s3234ca3=?'>=6:>1:69MKVR\3NB\L2<:1<25>2=AGZ^X7JFPC>0>586:2>1CXZ_UU8GKUG;;3:5=?5;:NWWTPR=LFZI0>4?>0956>0><2<25;:468C26>0B<22?><?4959:45?530<?74899008=?OIX\^1MIJ]A=:94;75300BB][[:@FGVG:?294:i675IORVP?vugnUna}zv_ujqavn;03:5>856:HLSQQ<wzfmTi`~{y^vkv`uoWhyxiz38;2=60=>2@D[YY4rne\ahvsqV~c~h}g_ogdeqc;03:5=i56:HLSQQ<wzfmTjxbc_ujqavn;03:5>956:HLSQQ<wzfmTjxbc_ujqavnXizyn~y27:1<10>?=AGZ^X7~}of]eqijX|axneQaefcwa9>=87;3744@UURVP?bf|hUhcx`{<983:4d<13E^X][[:sf\`drfWje~by27:1<2f>?=G\^[YY4xr^fbpdYdg|d054?>99B@ATF49437LJKR@>2:==FLMXJ0?07;@FGVD:4611JHI\N<5<;?DBCZH6>255NDEPB838?3HNO^L28>`9B@ATF410;255NDEPB8=8?3HNO^O2?>99B@ATE48437LJKRC>1:==FLMXI0>07;@FGVG:3611JHI\M<4<;?DBCZK6=255NDEPA828f3HNO^O27:1<;?DBCZK63245NSXL@[WC@;2H^>55MUR]JJCI63J>0OL6N2:AF57=D@LI@SAGLEOQF[Q_WM;1HE95LLJC7?FJLJ:1H@_74CNONMQRBL8>0OB\J_FGMAWGSAFDTECH@7:AQADRBL81O>6JF6:FJE969?2NBM1??>69GMD:697=0HDO313<4?AOF4895;6JFA=37:2=CAH6:9394DHC?53803MCJ0<917:FJE97?6>1OEL2>9?48@LG;97=0HDO321<4?AOF4;;5;6JFA=01:2=CAH69?394DHC?61803MCJ0?;17:FJE9416>1OEL2=7?58@LG;:14<7IGN<3;=2>BNI585;6JFA=13:<=CAH68=7>17:FJE9566?1OEL2<>79GMD:36?1OEL2:>79GMD:16?1OEL28>79GMD:?6?1OEL26>79GMG:76>1OEO2>0?58@LD;984<7IGM<00=3>BNJ5;82:5KIC>20;1<L@H7=808;EKA8409?2NBN1?8>69GMG:607=0HDL318<5?AOE484<7IGM<32=3>BNJ58:2:5KIC>16;1<L@H7>>08;EKA8729?2NBN1<:>69GMG:5>7=0HDL326<4?AOE4;25;6JFB=0::3=CAK692:5KIC>04;?<L@H7?<4?>69GMG:497<0HDL33?48@LD;<7<0HDL35?48@LD;>7<0HDL37?48@LD;07<0HDL39?58@LVF494<7IG_A=3=3>BNXH69245KIQC?7?69?2NB\L2<>69GMUD;87=0HD^M<0<4?AOWJ58556JFPC>0>5803MC[N1=16:FLE969?2NDM1??>69GKD:697=0HBO313<4?AIF4895;6J@A=37:2=CGH6:9394DNC?53803MEJ0<917:FLE97?6>1OCL2>9?48@JG;97=0HBO321<4?AIF4;;5;6J@A=01:2=CGH69?394DNC?61803MEJ0?;17:FLE9416>1OCL2=7?58@JG;:14<7IAN<3;=2>BHI585;6J@A=13:<=CGH68=7>17:FLE9566?1OCL2<>79GKD:36?1OCL2:>79GKD:16?1OCL28>79GKD:?6?1OCL26>79GKG:76>1OCO2>0?58@JD;984<7IAM<00=3>BHJ5;82:5KOC>20;1<LFH7=808;EMA8409?2NDN1?8>69GKG:607=0HBL318<5?AIE484<7IAM<32=3>BHJ58:2:5KOC>16;1<LFH7>>08;EMA8729?2NDN1<:>69GKG:5>7=0HBL326<4?AIE4;25;6J@B=0::3=CGK692:5KOC>04;?<LFH7?<4?>69GKG:497<0HBL33?48@JD;<7<0HBL35?48@JD;>7<0HBL37?48@JD;07<0HBL39?58@JVF494<7IA_A=3=3>BHXH69245KOQC?7?69?2ND\L2<>69GKUD;87=0HB^M<0<4?AIWJ58556J@PC>0>5803ME[N1=13:GME6=BFK>0J?H?2:D;6>@C;2LOO95IDBG0?CBB;2LO\95IDQG6?Cgk{l;0K>5HNE08M54<A880E?<4I2:8MKOSXV:;46GAIUR\44><AGC_\R>=8:KMMQVX8:20ECG[P^27<>OIA]ZT<864IOKWTZ6102CEEY^P06;8MKOS[]K_I:5FNHV\451<AGC_S=?8;HLJPZ65?2CEEYQ?369JJLRX8==0ECG[_174?LHN\V:=;6GAIU]332=NF@^T<594IOKW[5?03@DBXR>N7:KMMQY7J>1BBDZP0B58MKOSW9N<7D@FT^2F3>OIA]U;J:5FNHV\551<AGC_S<?8;HLJPZ75?2CEEYQ>369JJLRX9==0ECG[_074?LHN\V;=;6GAIU]232=NF@^T=594IOKW[4?03@DBXR?N7:KMMQY6J>1BBDZP1B58MKOSW8N<7D@FT^3F3>OIA]U:J:5FNHV\651<AGC_S??8;HLJPZ45?2CEEYQ=369JJLRX:==0ECG[_374?LHN\V8=;6GAIU]132=NF@^T>594IOKW[7?03@DBXR<N7:KMMQY5J>1BBDZP2B58MKOSW;N<7D@FT^0F3>OIA]U9J:5FNHV\751<AGC_S>?8;HLJPZ55?2CEEYQ<369JJLRX;==0ECG[_274?LHN\V9=;6GAIU]032=NF@^T?594IOKW[6?03@DBXR=N7:KMMQY4J>1BBDZP3B58MKOSW:N<7D@FT^1F3>OIA]U8J;5FNHV\E3=NF@^TN>5FOC08HL4<DF<0@BOKEE58HJANKHF?7A[[159OQQ413E__>RB;;MWW73=K]]9T@95CUU66?HU@GG?0AXVLYb9Neoiu^lxxeb`l;LkmkwPbzzcdb?5A129M552<F8::86@>0318J4733G;:995A1047?K76?=1E=<6;;O32=6=I9;>0B<<?4:L2642<F88986@>2268J443<2D:>8:4N0050>H6:>>0B<<74:L26<5<F89?7C?<059M56733G;8>95A1217?K74<=1E=>;;;O3021=I9:=?7C?<859M56?43G;?86@>4168J426<2D:8?:4N0600>H6<=>0B<::4:L2032<F8><86@>4968J42>;2D:995A1427?K729=1E=8<;;O3631=I9<2?7C?:929M532<F8<;86@>6068J405<2D::>:4N0470>H6><>0B<874:L22<5<F8=?7C?8059M52733G;<>95A1617?K70<=1E=:;;;O3426=I9190B<7<;O037>H59:1E>?=4N310?K43;2D99>5A2718J7143G83?6@=929M755<F:;87C==3:L076=I;=90B>;<;O157>H4?:1E?5=4N2;0?K27;2D?=?5A639M37=I0;1E5>5A9718J<143G32j6@M_CWPTLHXX[E[_:5AEUULVN2<FFDN=6A=;NI2?U2<XHX_m6^FN^@VWLB_j2ZBBRLZSOCNA6=WZL;0]h5]AL@22ZU4>VY8:<5\129PMHYDGEFB_DAA_BJFGN0<[F_YOH94SSTBHZG03ZX]MAQM4:QPVD2<[ZXI86ZVPD11?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?2^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2346YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789>T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>:_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1232ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678>UYi~{ct002?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?4;463\:$kh!rg-dg}(ddbr$~iQnup\flh;978:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7>3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`33?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?0;463\:$kh!rg-dg}(ddbr$~iQnup\flh;=78:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7:3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`37?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?<;473\:$kh!rg-dg}(ddbr$~iQnup\flhX8;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU:>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_203?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\076<]9%l~k }f.e`|+ekcq%yhR~ats]amkY2:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS:<?;T2,cw`)zo%lou lljz,vaYwf}xTnd`P8348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw67898<7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?012263=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;=?94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos234475>2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>=269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567:88=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01113>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:8>?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos2341403\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=:>279V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567=;=0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?04312>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:=>n5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123247X[^:9o6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012554YT_88<7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?014163=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#jPpovq[be;878;7X> gsd-vc)`kq$h`fv re]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<2<14>S7'nxm"h gbz-gim'{nT|cz}_fa?0;473\:$kh!rg-dg}(ddbr$~iQnup\cf:26;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]35c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[47a3\:$kh!rg-dg}(ddbr$~iQnup\cfY59o1^<"i}f/pe+be&jf`t"|k_qlwvZadW:;m7X> gsd-vc)`kq$h`fv re]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS8?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_63e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb];63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT<?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\573<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT>?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<Q;299V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9V?946[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2[34?3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?P73:8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8U3>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:<><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1>1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=3=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj949:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf595><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1:1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=7=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj909:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5=5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb161219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^214>S7'nxm"h gbz-gim'~xT|cz}_ckm[4473\:$kh!rg-dg}(ddbr${Qnup\flhX:;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU8>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR:=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_403?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\276<]9%l~k }f.e`|+ekcq%|~R~ats]amkY0:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV29:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23434d3\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=8>1^QT47e<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<;?>_RU262=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;:?<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34515?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>81328Q5)`zo$yj"ilx/aoo})pzVzexQhc=2=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`848582_;#j|i.sd,cf~)keas#z|Ppovq[be;:78;7X> gsd-vc)`kq$h`fv ws]sjqtXoj682?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1:1219V4*aun'xm#jmw.bnh|*quWyd~Ril<4<14>S7'nxm"h gbz-gim'~xT|cz}_fa?2;473\:$kh!rg-dg}(ddbr${Qnup\cf:06;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k525=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS=?i;T2,cw`)zo%lou lljz,swYwf}xTknQ>1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_33e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]05c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[17a3\:$kh!rg-dg}(ddbr${Qnup\cfY29o1^<"i}f/pe+be&jf`t"y}_qlwvZadW?;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU<=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS5<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol050=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZ65=2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkR?=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZ45=2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkR==5:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZ25=2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkR;=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZ05=2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkR9=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZ>512_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj><1<1=>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:0<0=9:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb64;4956[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2868512_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj><5<1=>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:080=9:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb64?4956[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2828512_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj><9<1<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S=<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X9;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]16==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R==8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W=837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\17><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<Q9299V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9V=946[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2[=423\:$kh!rg-dg}(ddbr${Qnup\cfYg{:;<=<:;T2,cw`)zo%lou lljz,swYwf}xTknQwos2344423\:$kh!rg-dg}(ddbr${Qnup\cfYg{:;<?<:;T2,cw`)zo%lou lljz,swYwf}xTknQwos2346423\:$kh!rg-dg}(ddbr${Qnup\cfYg{:;<9<:;T2,cw`)zo%lou lljz,swYwf}xTknQwos2340423\:$kh!rg-dg}(ddbr${Qnup\cfYg{:;<;<:;T2,cw`)zo%lou lljz,swYwf}xTknQwos23424f3\:$kh!rg-dh5(ul&my=#|iwgv,VDKXZMUNBRHXFU31g>S7'nxm"h gm2-va)`z8$yjzh{/SCN[WBXMGUM[KZ>_00:?P6(o{l%~k!hl1,q`*au9'xm{kz R@O\V@AH]]UNB<=<;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTJ^CPFGf273=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^DPIZ@Al8'Bb>64U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe3.Mk76;:1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ@TEVLMh?=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTJ^CPFGf1)Lh402_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[CUJWOLo> Ga100;?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}Umn?94U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZo5m2_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^mq4567:o1^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_h]lv567889j7X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#@}zb^pg[aeXaVy~n=>?0^az8584i2_;#j|i.sd,ci6)zm%l~l}!gsf`5+tck&GxyoQ}d^f`[lYt}k:;<=Qly=3=7d=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)J{|hT~iQkc^k\wpd789:Tot2=>2c8Q5)`zo$yj"ic0/pg+btf{'myhn?!rea,IvseW{nThnQf_rwa4567Wjs7?3=n;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/LqvfZtcWmiTeR}zb1234Ze~4=48m6[?/fpe*w`(oe:%~i!hr`q-cwbd9'xoo"C|uc]q`ZbdW`Uxyo>?01]`}939;h1^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%FxlPre]ggZoX{|h;<=>Pcx>5:6g<]9%l~k }f.eo4+tc'nxj#i}db3-vae(EziSjPdb]j[vse89:;Snw37?1a?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+HurjVxoSimPi^qvf5678Vf~x1>13c9V4*aun'xm#jb?.sf,cwgt&nxoo< }db-NwpdXzmUooRgPst`3456Xd|~7=3=m;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/LqvfZtcWmiTeR}zb1234Zjr|585?o5Z0.eqb+ta'nf;"j gscp*btck8$yhn!Bst`\vaYckVcTxl?012\hpr;;79i7X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#@}zb^pg[aeXaVy~n=>?0^nvp929;k1^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%FxlPre]ggZoX{|h;<=>Pltv?1;5e3\:$kh!rg-dh5(ul&mym~ hrea2*wbd'Dy~nR|k_ea\mZurj9:;<Rbzt=4=7g=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)J{|hT~iQkc^k\wpd789:T`xz37?1a?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+HurjVxoSimPi^qvf5678Vf~x1613c9V4*aun'xm#jb?.sf,cwgt&nxoo< }db-NwpdXzmUooRgPst`3456Xpfx7<3=m;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/LqvfZtcWmiTeR}zb1234Z~hz5;5?o5Z0.eqb+ta'nf;"j gscp*btck8$yhn!Bst`\vaYckVcTxl?012\|jt;:79i7X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#@}zb^pg[aeXaVy~n=>?0^zlv959;k1^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%FxlPre]ggZoX{|h;<=>Pxnp?0;5e3\:$kh!rg-dh5(ul&mym~ hrea2*wbd'Dy~nR|k_ea\mZurj9:;<Rv`r=7=7g=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)J{|hT~iQkc^k\wpd789:Ttb|36?1a?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+HurjVxoSimPi^qvf5678Vrd~1913c9V4*aun'xm#jb?.sf,cwgt&nxoo< }db-NwpdXzmUooRgPst`3456Xpfx743<6;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/sf\`fYnW9827X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#jPdb]j[44>3\:$kh!rg-dh5(ul&mym~ hrea2*wbd'{nThnQf_30:?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+wbXljUbS><6;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/sf\`fYnW=827X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#jPdb]j[04>3\:$kh!rg-dh5(ul&mym~ hrea2*wbd'{nThnQf_70:?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+wbXljUbS:<6;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/sf\`fYnW1997X> gsd-vc)`d9$yh"i}ar,dvae6&{nh#jPdb]j[vse89:;0=0<2:W3+bta&{l$ka>!re-dvdu)o{nh=#|kc.pg[aeXaVy~n=>?0=3=77=R8&myj#|i/fn3*wb(o{kx"j|kc0,q`f)ulVnhSdQ|uc2345:56:80Y=!hrg,qb*ak8'xo#j|ns/eq`f7)zmi$~iQkc^k\wpd789:7?3==;T2,cw`)zo%l`= }d.eqev(`zmi:"jl/sf\`fYnWzi<=>?<5<06>S7'nxm"h gm2-va)`zhy%kjl1/pgg*tcWmiTeR}zb1234939;;1^<"i}f/pe+bj7&{n$ko|.fpgg4(ulj%yhRjl_h]pqg67896=2><4U1-dvc(un&mg<#|k/fpbw+aulj;%~im re]ggZoX{|h;<=>37?11?P6(o{l%~k!hl1,q`*auiz$l~im>.sf`+wbXljUbS~{m01238=8512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<1<1=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0<0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n> c`pq}kcs4;4956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw8685n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(ods"jcT0\,di4(j9;l0Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&mfyu hmZ3^*bkt&dy9j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$k`{w.foX6X(`ez$f?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"ibuy,di^5Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\<T$la~ bs318Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t28585;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~86:2?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x><3<17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:46;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:090=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]3[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x>_0]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z<Q=_`lg45679;h0Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:S>Qnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~8U?Sca{012357?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2?>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}6:2?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:56;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>0:7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV>R.fo2*h75n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(ods"jcT1\,div(j{;l0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&mfyu hmZ0^*bkt&dy9j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$k`{w.foX7X(`ez$f?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^2Z&ngx"`}=3:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0>3:75<]9%l~k }f.eo4+tc'nxj#||tr-`5*p64849?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$z<2=>318Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t28685;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~86?2?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$z<Q>_`lg45679;h0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W=Uecy>?01314>S7'nxm"h gm2-va)`zhy%~~z|/bmnt5473\:$kh!rg-dh5(ul&mym~ }suq,gjkw9;30Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\m66<]9%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi^mq4567;81^<"i}f/pe+bj7&{n$ko|.sqww*tfeVof|ywPfc]j[jt789::>>5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu07?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs9;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz=259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq55<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex9<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw172<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~=>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu510>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|1827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?4;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw30?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2>>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6:2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq585>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}949W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8685k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<2<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw34?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs783Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6>2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:26Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}909:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=4=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<6<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0:0Pru0b?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey0=0=a:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZ~hz5;5>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:56;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?7;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<5<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1;12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6=2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;?78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8=85l2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=:=[wr6n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:768l0Y=!hrg,qb*ak8'xo#~ats-`kphs484:j6[?/fpe*w`(oe:%~i!}povq+firf}692<h4U1-dvc(un&mg<#|k/srmpw)dg|d0>0>f:W3+bta&{l$ka>!re-qtkru'je~by2;>0d8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{<4<2b>S7'nxm"h gm2-va)uxg~y#naznu>5:4`<]9%l~k }f.eo4+tc'{zex!lotlw8286n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:?68o0Y=!hrg,qb*ak8'xo#~ats-`kphsW9;n7X> gsd-vc)`d9$yh"|nup,gjsi|V;:i6[?/fpe*w`(oe:%~i!}povq+firf}U9=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T?<k4U1-dvc(un&mg<#|k/srmpw)dg|dS9?j;T2,cw`)zo%l`= }d.psjqt(kfexR;>e:W3+bta&{l$ka>!re-qtkru'je~byQ91d9V4*aun'xm#jb?.sf,vuhsz&idyczP70g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_901?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28585:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95;5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2=>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?7;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64=49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1;1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>5:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;?7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:050=1:W3+bta&{l$ka>!re-qtkru'je~byQk1^215>S7'nxm"h gm2-va)uxg~y#naznu]g5Z7592_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9V89=6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R==1:W3+bta&{l$ka>!re-qtkru'je~byQk1^615>S7'nxm"h gm2-va)uxg~y#naznu]g5Z3592_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9V<9=6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R9=1:W3+bta&{l$ka>!re-qtkru'je~byQk1^:76>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*Kt}kU|~Rjnt`]`kphsW`Uxyo>?01]`}969<;1^<"i}f/pe+bj7&~x$kzo|.fugg5(plj%FxlPws]geqgXkfexRgPst`3456Xkp6:29<4U1-dvc(un&mg<#y}/fubw+aplj:%{im Mrwa[rtXlh~jSnaznu]j[vse89:;Snw32?61?P6(o{l%~k!hl1,tv*apiz$l{im?.vf`+HurjV}ySio{a^alqkrXaVy~n=>?0^az8683:2_;#j|i.sd,ci6){%l{l}!gvf`4+qck&GxyoQxr^fbpdYdg|dSdQ|uc2345Ydq5>58?5Z0.eqb+ta'nf;"z| gvcp*bqck9$|hn!Bst`\swYci}kTob{at^k\wpd789:Tot2:>508Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,IvseW~xThlzn_bmvjqYnWzi<=>?_b{?2;253\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'Dy~nRy}_ecweZeh}g~TeR}zb1234Ze~4>4??6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"C|uc]tvZbf|hUhcx`{_h]pqg6789Ugyy2?>518Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,IvseW~xThlzn_bmvjqYnWzi<=>?_mww8483;2_;#j|i.sd,ci6){%l{l}!gvf`4+qck&GxyoQxr^fbpdYdg|dSdQ|uc2345Yk}}6929=4U1-dvc(un&mg<#y}/fubw+aplj:%{im Mrwa[rtXlh~jSnaznu]j[vse89:;Sa{{<2<77>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*Kt}kU|~Rjnt`]`kphsW`Uxyo>?01]oqq:36=90Y=!hrg,qb*ak8'}y#jyns/et`f6)mi$A~{m_vp\`drfWje~byQf_rwa4567We080;3:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.OpqgYpzVnjxlQlotlw[lYt}k:;<=Qcuu>5:15<]9%l~k }f.eo4+qu'n}j#ixdb2-sae(EziSz|Pd`vb[firf}UbS~{m0123[iss4>4??6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"C|uc]tvZbf|hUhcx`{_h]pqg6789Ugyy27>518Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,IvseW~xThlzn_bmvjqYnWzi<=>?_ymq8583;2_;#j|i.sd,ci6){%l{l}!gvf`4+qck&GxyoQxr^fbpdYdg|dSdQ|uc2345Yg{6:29=4U1-dvc(un&mg<#y}/fubw+aplj:%{im Mrwa[rtXlh~jSnaznu]j[vse89:;Sua}<3<77>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*Kt}kU|~Rjnt`]`kphsW`Uxyo>?01]{kw:46=90Y=!hrg,qb*ak8'}y#jyns/et`f6)mi$A~{m_vp\`drfWje~byQf_rwa4567Wqey090;3:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.OpqgYpzVnjxlQlotlw[lYt}k:;<=Qwos>6:15<]9%l~k }f.eo4+qu'n}j#ixdb2-sae(EziSz|Pd`vb[firf}UbS~{m0123[}iu4?4??6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"C|uc]tvZbf|hUhcx`{_h]pqg6789Usc28>518Q5)`zo$yj"ic0/uq+bqf{'m|hn>!wea,IvseW~xThlzn_bmvjqYnWzi<=>?_ymq8=8492_;#j|i.sd,ci6){%l{l}!gvf`4+qck&}ySio{a^alqkrXaV:8=6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"y}_ecweZeh}g~TeR?<1:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.uq[agsiVidyczPi^005>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*quWmkmRm`uov\mZ5492_;#j|i.sd,ci6){%l{l}!gvf`4+qck&}ySio{a^alqkrXaV>8=6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"y}_ecweZeh}g~TeR;<1:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.uq[agsiVidyczPi^405>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*quWmkmRm`uov\mZ1492_;#j|i.sd,ci6){%l{l}!gvf`4+qck&}ySio{a^alqkrXaV28m6[?/fpe*w`(oe:%{!hw`q-crbd8'}oo"y}_ecweZeh}g~TeR}zb1234969;h1^<"i}f/pe+bj7&~x$kzo|.fugg5(plj%|~Rjnt`]`kphsW`Uxyo>?01>2:6g<]9%l~k }f.eo4+qu'n}j#ixdb2-sae({UomyoPcnwmpZoX{|h;<=>32?1b?P6(o{l%~k!hl1,tv*apiz$l{im?.vf`+rtXlh~jSnaznu]j[vse89:;0>0<a:W3+bta&{l$ka>!ws-dsdu)o~nh<#ykc.uq[agsiVidyczPi^qvf56785>5?l5Z0.eqb+ta'nf;"z| gvcp*bqck9$|hn!xr^fbpdYdg|dSdQ|uc2345:26:k0Y=!hrg,qb*ak8'}y#jyns/et`f6)mi${Qkauc\gjsi|VcTxl?012?2;5f3\:$kh!rg-dh5(pz&m|m~ hwea3*rbd'~xThlzn_bmvjqYnWzi<=>?<6<0e>S7'nxm"h gm2-sw)`hy%kzjl0/ugg*quWmkmRm`uov\mZurj9:;<161289V4*aun'xm#jb?.vp,crgt&~y"m>/bcqv|hb|5:5>45Z0.eqb+ta'nf;"z| gvcp*rus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&~x$kzo|.vqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.vp,crgt&~y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,tv*apiz$|y} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$|~"ixar,twqu(k8%}=1>1229V4*aun'xm#jb?.vp,crgt&~y"m>/w3?5;443\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q9585>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?33?00?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5929:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e6';T<Road123444e3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q9V;Tmcj?01226g=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+s7X:Vkeh=>?000a?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m>/w3\0Zhh|9:;<<<6;T2,cw`)zo%l`= xr.etev(p{}y$o?!laspzj`r;87827X> gsd-vc)`d9$|~"ixar,twqu(k;%hm|vndv?5;4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)di{xrbhz32?0:?P6(o{l%~k!hl1,tv*apiz$|y} c3-`ewt~fl~7?3<i;T2,cw`)zo%l`= xr.etev(p{}y$o?!hmtz-ch]7U'mf=#c>2g9V4*aun'xm#jb?.vp,crgt&~y"m=/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,tv*apiz$|y} c3-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)`e|r%k`U;]/enw+kt::1^<"i}f/pe+bj7&~x$kzo|.vqww*e5';7<3<<;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1=3=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7;:7887X> gsd-vc)`d9$|~"ixar,twqu(k;%}=1=1229V4*aun'xm#jb?.vp,crgt&~y"m=/w3?0;4e3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q9V:Tmcj?01226g=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7X9Vkeh=>?000a?P6(o{l%~k!hl1,tv*apiz$|y} c3-u5Z4Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m=/w3\7Zgil9:;<<<m;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1^6\jjr789::>=5Z0.eqb+ta'nf;"z| gvcp*rus{&ida}?=0:W3+bta&{l$ka>!ws-dsdu)z~x#nabp30;?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkWohTe?;4U1-dvc(un&mg<#y}/fubw+qt|z%ym`Qiumn\m7e<]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTeRa}01236a=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZ`rdeUbSb|?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k266=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{1368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr5:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by==4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp1433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d9?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov561=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}=986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at90:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7<3<l;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;87Uyx?74U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:66;i0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>2:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=0=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1<1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0>0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4:4T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;<78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?0;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>6:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2:>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1812b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5<5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4>49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az828Xz}8j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8585i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=3=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2=>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?3<n;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[}iu4=49m6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^zlv939:h1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQwos>5:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|37?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050=d:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz525Sz>f:W3+bta&{l$ka>!ws-ttkru'je~by2?>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<0<2b>S7'nxm"h gm2-sw)pxg~y#naznu>1:4`<]9%l~k }f.eo4+qu'~zex!lotlw8686n2_;#j|i.sd,ci6){%||cz}/bmvjq:368l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4<4:j6[?/fpe*w`(oe:%{!xpovq+firf}6=2<h4U1-dvc(un&mg<#y}/vrmpw)dg|d0:0>f:W3+bta&{l$ka>!ws-ttkru'je~by27>0g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_13f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^32a>S7'nxm"h gm2-sw)pxg~y#naznu]15`=R8&myj#|i/fn3*rt(yd~"m`uov\74c<]9%l~k }f.eo4+qu'~zex!lotlw[17b3\:$kh!rg-dh5(pz&}{by| cnwmpZ36m2_;#j|i.sd,ci6){%||cz}/bmvjqY19l1^<"i}f/pe+bj7&~x${}`{r.alqkrX?8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW1897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28=8592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V:9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R?=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^015>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z5592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V>9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R;=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^415>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z1592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V29>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1>1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>2:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;:7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90>0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=6=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:26;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm87:3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<6<16>S7'nxm"h gm2-sw)pxg~y#naznu]g69>9:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U;><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q>209V4*aun'xm#jb?.vp,suhsz&idyczPd3]164=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y4:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U?><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q:209V4*aun'xm#jb?.vp,suhsz&idyczPd3]564=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y0:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U3=;5Z0.eqb+ta'dof#iazt^k\440<]9%l~k }f.ofi*bh}}UbS<?8;T2,cw`)zo%fi`!kotv\mZ779>1^<"i}f/pe+hcj'me~xRgP1034?P6(o{l%~k!bel-gkprXaV;9=:5Z0.eqb+ta'dof#iazt^k\56703\:$kh!rg-nah)cg|~TeR?;169V4*aun'xm#`kb/emvpZoX9<;<7X> gsd-vc)jmd%ocxzPi^3552=R8&myj#|i/lgn+air|VcT=:?8;T2,cw`)zo%fi`!kotv\mZ7?9>1^<"i}f/pe+hcj'me~xRgP1835?P6(o{l%~k!bel-gkprXaV8:;6[?/fpe*w`(elg$hb{{_h]1441<]9%l~k }f.ofi*bh}}UbS??>7:W3+bta&{l$ahc dnww[lY5:8=0Y=!hrg,qb*kbe&ndyyQf_3123>S7'nxm"h mdo,`jssW`U98<94U1-dvc(un&gna"j`uu]j[736?2_;#j|i.sd,i`k(lfSdQ=6058Q5)`zo$yj"cjm.flqqYnW;=:;6[?/fpe*w`(elg$hb{{_h]1<41<]9%l~k }f.ofi*bh}}UbS?7>6:W3+bta&{l$ahc dnww[lY49>1^<"i}f/pe+hcj'me~xRgP3134?P6(o{l%~k!bel-gkprXaV9:=:5Z0.eqb+ta'dof#iazt^k\77703\:$kh!rg-nah)cg|~TeR=<169V4*aun'xm#`kb/emvpZoX;=;<7X> gsd-vc)jmd%ocxzPi^1653=R8&myj#|i/lgn+air|VcT8<84U1-dvc(un&gna"j`uu]j[0713\:$kh!rg-nah)cg|~TeR8>6:W3+bta&{l$ahc dnww[lY09?1^<"i}f/pe+hcj'me~xRgP8048Q5)`zo$yj"cjm.flqqYnW0;27X> gsd-vc)jmd%ocxzPmdo?4;7f3\:$kh!rg-nah)cg|~Tahc311<2e>S7'nxm"h mdo,`jssWdof0<?11`9V4*aun'xm#`kb/emvpZkbe5;92<o4U1-dvc(un&gna"j`uu]nah:6;7;j7X> gsd-vc)jmd%ocxzPmdo?5186i2_;#j|i.sd,i`k(lfS`kb<07=5d=R8&myj#|i/lgn+air|Vgna1?9>0c8Q5)`zo$yj"cjm.flqqYjmd6:;3?n;T2,cw`)zo%fi`!kotv\i`k;914:m6[?/fpe*w`(elg$hb{{_lgn84?9901^<"i}f/pe+hcj'me~xRcjm=3=5d=R8&myj#|i/lgn+air|Vgna1<?>0c8Q5)`zo$yj"cjm.flqqYjmd69=3?n;T2,cw`)zo%fi`!kotv\i`k;:;4:m6[?/fpe*w`(elg$hb{{_lgn87599h1^<"i}f/pe+hcj'me~xRcjm=07:4g<]9%l~k }f.ofi*bh}}Ufi`2=5?3b?P6(o{l%~k!bel-gkprXelg7>;0>a:W3+bta&{l$ahc dnww[hcj4;=5=l5Z0.eqb+ta'dof#iazt^ofi94?68k0Y=!hrg,qb*kbe&ndyyQbel>1=;7>3\:$kh!rg-nah)cg|~Tahc32?3b?P6(o{l%~k!bel-gkprXelg7?=0>a:W3+bta&{l$ahc dnww[hcj4:;5=l5Z0.eqb+ta'dof#iazt^ofi95568k0Y=!hrg,qb*kbe&ndyyQbel>07;7f3\:$kh!rg-nah)cg|~Tahc335<2e>S7'nxm"h mdo,`jssWdof0>;1189V4*aun'xm#`kb/emvpZkbe595=45Z0.eqb+ta'dof#iazt^ofi929901^<"i}f/pe+hcj'me~xRcjm=7=5<=R8&myj#|i/lgn+air|Vgna181189V4*aun'xm#`kb/emvpZkbe5=5=45Z0.eqb+ta'dof#iazt^ofi9>9901^<"i}f/pe+hcj'me~xRcjm=;=2`=R8&myj#|i/lgn+bdj&nhfk#immfc-jbcdk'hfk"lck^ofiZabflxjxb| v`nj`+et|{%ym`b`oqY3Y+tfe'x$z?Qaohljp+tfe&n{?;v<6/pbi45<]9%l~k }f.pbiZtcWld:;6[?/fpe*w`(zhgT~hi`uu]fj45<]9%l~k }f.pbiZquWld:h6[?/fpe*w`(zz~i`f!}d^pppZgtzlm9<6[?/fpe*w`(zz~i`f!}d^pppZgtzlmTh<<?;T2,cw`)zo%yylck.pg[wusWhyyijQk20a8Q5)`zo$yj"||tcnh+wbXzz~Tobcm1e9V4*aun'xm#}{bmi,vaYu{}Uhc`l>1d9V4*aun'xm#}{bmi,vaYu{}Uyij2>>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi32?3g?P6(o{l%~k!}su`oo*tcW{ySkh_03g?P6(o{l%~k!}su`oo*tcW{ySkh_33g?P6(o{l%~k!}su`oo*quW{ySl}}ef03?P6(o{l%~k!}su`oo*quW{ySl}}ef]g576<]9%l~k }f.pppgjl'~xT~~zParpfcZb59j1^<"i}f/pe+wusjea${Q}su]`khd6l2_;#j|i.sd,vvredb%|~R||t^alig76m2_;#j|i.sd,vvredb%|~R||t^pfc9699l1^<"i}f/pe+wusjea${Q}su]qab:668n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX88n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX9h1^_H\PAMKBWf=R[LXTZD]FBMG0?SED12\BIZQ[YQG0?RCF;2]NNo5XRHVF[COU[]i0[_G[E^OL@@YFk2]YEYKPMNFF[G7c3QCGECV"XE@#4+7'[]_I,= > @Q@ML3<PFXHU;5WSUNJF2=_[]ULBI94XRV\RFEe3QUHC_KPIODL2>^cjVCoj6Vkh^RqmhPbzzcdb<>4Xeo\Idlhz_oydaa119[`hYJageyZh||inl`?djjgz~Ti`~{yc9bhhit|Vl~`a84b`ahqub<jhi`y}Qbasifv6=ddbn0hlzn_bmvjq.7!m1omyoPcnwmp-7.l2njxlQlotlw,7/c3mkmRm`uov+7,b<lh~jSnaznu*7-a=ci}kTob{at)7*`>bf|hUhcx`{(7+g?agsiVidycz'7(f8`drfWje~by&7)e9geqgXkfex1>1f:fbpdYdg|d054?>69gflrbz{<0hd`'0(48`lh/9 =0hd`'11+4?aoi 8;";6jfn)31-2=cag":?$94dhl+51/03mce$<;&7:fjj-71!>1oec&>7(58`lh/91#<7iga(0;*2>bnf!8";6jfn)03-2=cag"9=$94dhl+67/03mce$?=&7:fjj-43!>1oec&=5(58`lh/:?#<7iga(35*3>bnf!83%:5kio*1=,0<l`d#?$94dhl+75/03mce$>?&7:fjj-55!>1oec&<3(58`lh/;=#<7iga(27*2>bnf!>":6jfn)7*2>bnf!<":6jfn)5*2>bnf!2":6jfn);*2>bnf5:5;6jfn=33:2=cag6:=394dhl?57803mce0<=17:fjj9736>1oec2>5?58`lh;9?4<7iga<05=3>bnf5;32:5kio>2=;0<l`d7=394dhl?65803mce0??17:fjj9456>1oec2=3?58`lh;:=4<7iga<37=3>bnf58=2:5kio>13;1<l`d7>508;ekm87?9>2nbb1<17:fjj9576>1oec2<1?58`lh;;;4<7iga<21=3>bnf59?245kio>01?69?2nbb1=:>79gmk:46?1oec2;>79gmk:26?1oec29>79gmk:06?1oec27>79gmk:>6>1ocxz'0(58`jss 8#37iazt)33-==cg|~#=<'7;emvp-75!11ocxz'12+;?air|!;?%55kotv+50/?3me~x%?9)99gkpr/9>#37iazt)3;-==cg|~#=4'8;emvp-4.02ndyy&=0(:8`jss ;;"46j`uu*16,><lf$?=&8:flqq.5< 20hb{{(37*<>bh}}"9:$64dnww,71.02ndyy&=8(:8`jss ;3";6j`uu*0-==cg|~#?='7;emvp-56!11ocxz'33+;?air|!98%55kotv+71/?3me~x%=:)69gkpr/< =0hb{{(4+4?air|!<";6j`uu*4-2=cg|~#4$94dnww,</03me~x1>18:flqq:68720hb{{<03=<>bh}}6:>364dnww845902ndyy2>4?:8`jss48?546j`uu>22;><lf0<918:flqq:60720hb{{<0;=3>bh}}6:255kotv?658?3me~x1<>>99gkpr;:;437iazt=00:==cg|~7>907;emvp942611ocxz327<;?air|58<255kotv?6=8?3me~x1<6>69gkpr;:720hb{{<22=<>bh}}68=364dnww864902ndyy2<3?:8`jss4:>5m6j`uu>01?6902ndyy2<5?58`jss4:4<7iazt=6=3>bh}}6>2:5kotv?2;1<lf0:08;emvp9>9?2ndyy26>99f`l`5fnn>7hctx0e?coagVmnbh|ntnp\r1Y4$)Rb`d`w BMQA%Abflxjxb|/11,250=aaoeTta`w_431|60X:jf`?>5iigm\|ihW<;9t>8P2bnh(coagVmnbh|ntnp\r1Y4$GEEI!@@ND1`7>`nnfUs`cvP500{73Y5kea'jdh`_fgmawgsg{U}8R=#{b]kevYnf}Uh`f3?,b]kevYtzz~6<!mPre]ev`w:9%iTdl}Pre]geqgXkfex0?#c^fjjZqnl}b6?;"l_icp[rtXlh~jSnaznu?2(fYa}efTjaohs^pppZpfd4;'oRgbpmgnakrf|`eeSywe<0/gZstmVofnhjkee]qab;7$jU|~Rh}ep?2(fYr{lUocxzPrrv>4)eX}gnn~kb`w^nls86+kVbjRayesdokr;7$jU{~hb`ae]oeqcikp7; nQkotv\slbs`49= nQbsfmm[sgk58&hSjPddrwl836:%iTdl}Puoffvcjh4:'oRfns^coijusWog`0>#c^jbwZtt|4;'oRjnt`]`kphsW~coxe36,b]kevYpzVkhg0>#c^wpaZcdk4:'oRm`mlmm[fjhkb7; nQxr^c`oZjh4:'oR|k_qlwvZqnl}b65!mPurg\br`sWmkmRm`uov>4)eX`hyTmac`su]fiur~59&hSjPd`vb[firf}U|eizg=8.`[jpbzofd{Rb`w<2/gZquWyd~Ryfduj>=)eXx{elShctx]w}uc:8%iT{Qkauc\gjsi|V}bhyf29-a\twckghnT~hi|=0.`[air|VxxxRxnl<2/gZnf{VnjxlQlotlw95*dWyxdkRhzlm]wlwct`Vdnklzj_wco9077$jU|~Rjjpuj>144+kVzycjQjmqvz[qnumzbTbhintd]uei;2$jU{~biPelrw}ZrozlycSl}|esv\rdj:<%iTdl}Pv`nj`86+kVzycjQiumn\pmtb{aUj~k}t^tbh8369%ida}aaeov\jdkb5ocmcRvcny]657~4>V8h`f"l_wcomaYkg~7; nQrho\bl`hW}s{i0;>2y15(fYwzfmTjxbc_u{sa86+kVgnab|v_u{sa87+u;l0jdh`_ynm|Z36:q9=S?mck^djbjY`mgoymya}_w6\7Z~t|V;?7k{cl69jjqYddb20bjmmuhng<>iqm{lgczo4psmd[`kw|p;?7}|`g^gntqX|axne&?)068twi`Wlg{xtQ{hsgpl-7.9=1{~biPelrw}Zrozlyc$?'>4:rqkbYbey~rSyf}erj+7,733yxdkRkbpu{\pmtb{a"?%<:4psmd[`kw|pUdk|h)7*51=wzfmTi`~{y^vkv`uo ?#:86~}of]fiur~W}byi~f'7(37?uthoVof|ywPtipfwm.?!8<0|ah_dosp|Ys`{oxd1650?3a?uthoVof|ywPtipfwmYf{zoyx%>&1c9svjaXmdzuRzgrdqk[dutm{~#=$?m;qplcZcjx}sTxe|jsi]bwvcu|!8"=o5rne\ahvsqV~c~h}g_`qpawr/; ;i7}|`g^gntqX|axneQnsrgqp-2.9k1{~biPelrw}ZrozlycSl}|esv+1,7e3yxdkRkbpu{\pmtb{aUj~k}t)4*5g=wzfmTi`~{y^vkv`uoWhyxiz'7(3a?uthoVof|ywPtipfwmYf{zoyx%6&1e9svjaXmdzuRzgrdqk[dutm{~747>11c9svjaXmdzuRzgrdqk[kc`i}o#<$?m;qplcZcjx}sTxe|jsi]mabgsm!;"=o5rne\ahvsqV~c~h}g_ogdeqc/: ;i7}|`g^gntqX|axneQaefcwa-5.9k1{~biPelrw}ZrozlycSckhaug+0,7e3yxdkRkbpu{\pmtb{aUeijo{e)7*5g=wzfmTi`~{y^vkv`uoWgolmyk'6(3a?uthoVof|ywPtipfwmYimnki%9&1c9svjaXmdzuRzgrdqk[kc`i}o#4$?k;qplcZcjx}sTxe|jsi]mabgsm521<374psmd[cskd890|ah_gwohZrozlyc$='>3:rqkbYa}efTxe|jsi*2-45<x{elSk{cl^vkv`uo ;#:?6~}of]eqijX|axne&<)018twi`Wog`Rzgrdqk,1/6;2zycjQiumn\pmtb{a">%<=4psmd[cskdV~c~h}g(7+27>vugnUmyabPtipfwm.0!890|ah_gwohZrozlyc$5'>5:rqkbYa}efTxe|jsi>;>586i2zycjQiumn\pmtb{aUj~k}t)2*5d=wzfmTjxbc_ujqavnXizyn~y&>)0c8twi`Wog`Rzgrdqk[dutm{~#>$?n;qplcZ`rdeUdk|h^cpw`ts :#:m6~}of]eqijX|axneQnsrgqp-2.9h1{~biPftno[qnumzbTm~}jru*6-4g<x{elSk{cl^vkv`uoWhyxiz'6(3b?uthoVl~`aQ{hsgplZgt{lx$:'>a:rqkbYa}efTxe|jsi]bwvcu|!2"=n5rne\bpjkW}byi~fParqfvq:?294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g<x{elSk{cl^vkv`uoWgolmyk'2(3b?uthoVl~`aQ{hsgplZhboh~n$>'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8k0|ah_gwohZrozlycSckhaug+2,7f3yxdkRhzlm]wlwct`Vdnklzj(6+2e>vugnUmyabPtipfwmYimnki%6&1b9svjaXn|fgSyf}erj\j`af|l636=09;sf\gim682xoSio{a^alqkr/8 ;;7jPd`vb[firf}":%<>4re]geqgXkfex%<&119q`Zbf|hUhcx`{(2+24>tcWmkmRm`uov+0,773{nThlzn_bmvjq.2!8:0~iQkauc\gjsi|!<"==5}d^fbpdYdg|d$:'>0:pg[agsiVidycz'8(33?wbXlh~jSnaznu>3:46<zmUomyoPcnwmp979991yhRjnt`]`kphs4;4:<6|k_ecweZeh}g~7?3??;sf\`drfWje~by2;>028vaYci}kTob{at=7=55=ulVnjxlQlotlw838682xoSio{a^alqkr;?7;97jPd`vb[firf}636=0>0:pg[agsiVidycz38?78vaYbf?1yhR||t29qwq1<{kci|;;rppp1=sz|o27x`kesdokr3<~hfbh;5xr^c`o3=pzVigg<>4ws]geqgXkfex%>&119tvZbf|hUhcx`{(0+24>quWmkmRm`uov+6,773~xThlzn_bmvjq.4!8:0{Qkauc\gjsi|!>"==5xr^fbpdYdg|d$8'>0:uq[agsiVidycz'6(33?rtXlh~jSnaznu*4-46<{UomyoPcnwmp->.991|~Rjnt`]`kphs494:<6y}_ecweZeh}g~7=3??;vp\`drfWje~by2=>028swYci}kTob{at=1=55=pzVnjxlQlotlw818682}ySio{a^alqkr;=7;;7z|Pd`vb[firf}6=2<>4ws]geqgXkfex191139tvZbf|hUhcx`{<983:46<{UomyoPcnwmp9>9=2}ySh`9;vp\vvrzHIzhjh5O@y39B?2=9rY?o7;?d;4956410<21?;jj4zl72=<63g>=57:4$545>1073tY?m7;?d;4956410<21?;jj4:Q203<29?0;6<==697;>60cm<1X8l4:1783>455>1?36>8ke69g146=83;1=v];c;73`?0=9:8=486537ff0>pS9j81<7?51;3`e~U3k3?;h7851205<0>=;?nn86*;5`8202=Q<?=1>v{>5182?p7293:0q)?ma;33?g3683:1:<4<:73xL13?3S>:69u=9;0b>`<c2t.:o:4:119'033==9l0e88n:188k03a290/=om557:8j4de2910c8;j:18'5ge==?20b<lm:098k03c290/=om557:8j4de2;10c8;l:18'5ge==?20b<lm:298k03e290/=om557:8j4de2=10c8;n:18'5ge==?20b<lm:498k03>290/=om557:8j4de2?10c8;7:18'5ge==?20b<lm:698k030290/=om557:8j4de2110e868:188k01d290/=om55978j4de2910c89m:18'5ge==1?0b<lm:098k01f290/=om55978j4de2;10c896:18'5ge==1?0b<lm:298k01?290/=om55978j4de2=10c898:18'5ge==1?0b<lm:498k011290/=om55978j4de2?10c89::18'5ge==1?0b<lm:698k013290/=om55978j4de2110c8?;:188k06b2900e89<:188m00d2900c9k>:18'5ge==9>0b<lm:198k1c7290/=om55168j4de2810c9ji:18'5ge==9>0b<lm:398k1bb290/=om55168j4de2:10c9jk:18'5ge==9>0b<lm:598k1bd290/=om55168j4de2<10c9jn:18'5ge==9>0b<lm:798k1b>290/=om55168j4de2>10c9j7:18'5ge==9>0b<lm:998k1b0290/=om55168j4de2010c9j9:18'5ge==9>0b<lm:`98k1b2290/=om55168j4de2k10c9j;:18'5ge==9>0b<lm:b98k1b4290/=om55168j4de2m10c9j=:18'5ge==9>0b<lm:d98k1b6290/=om55168j4de2o10c9mi:18'5ge==9>0b<lm:028?j2dm3:1(<ll:427?k7ej3;:76a;ce83>!7ek3?;86`>bc826>=h<ji1<7*>bb8641=i9kh1=>54o5aa>5<#9ki19=:4n0`a>42<3f>hm7>5$0``>0633g;in7?:;:m7g<<72-;io7;?4:l2fg<6>21d8n650;&2ff<28=1e=ol51698k1e0290/=om55168j4de28207b:l6;29 4dd2<:?7c?mb;3:?>i3m>0;6)?mc;730>h6jk0:m65`4d494?"6jj0><95a1c`95g=<g=o>6=4+1ca9152<f8hi6<m4;n6f0?6=,8hh68>;;o3af?7c32e?i>4?:%3ag?37<2d:no4>e:9l0`4=83.:nn4:059m5gd=9o10c9jm:18'5ge==9>0b<lm:328?j2c83:1(<ll:427?k7ej38:76a;c483>!7ek3?;86`>bc816>=h<j>1<7*>bb8641=i9kh1>>54i5;;>5<#9ki18ol4n0`a>5=<a=3<6=4+1ca90gd<f8hi6<54i5;5>5<#9ki18ol4n0`a>7=<a=3>6=4+1ca90gd<f8hi6>54i5;7>5<#9ki18ol4n0`a>1=<a=386=4+1ca90gd<f8hi6854i5;2>5<#9ki18ol4n0`a>3=<a=3;6=4+1ca90gd<f8hi6:54i5:e>5<#9ki18ol4n0`a>==<a=2n6=4+1ca90gd<f8hi6454i5:g>5<#9ki18ol4n0`a>d=<a=2h6=4+1ca90gd<f8hi6o54i5:a>5<#9ki18ol4n0`a>f=<a=2j6=4+1ca90gd<f8hi6i54i5::>5<#9ki18ol4n0`a>`=<a=236=4+1ca90gd<f8hi6k54i5:5>5<#9ki18ol4n0`a>46<3`>397>5$0``>1de3g;in7?>;:k7<1<72-;io7:mb:l2fg<6:21b85=50;&2ff<3jk1e=ol51298m1>5290/=om54c`8j4de28>07d:71;29 4dd2=hi7c?mb;36?>o3090;6)?mc;6af>h6jk0::65f46d94?"6jj0?no5a1c`952=<a==n6=4+1ca90gd<f8hi6<64;h64`?6=,8hh69lm;o3af?7>32c?5h4?:%3ag?2ej2d:no4>a:9j0<b=83.:nn4;bc9m5gd=9k10e97l:18'5ge=<kh0b<lm:0a8?l2>j3:1(<ll:5`a?k7ej3;o76g;9`83>!7ek3>in6`>bc82a>=n<031<7*>bb87fg=i9kh1=k54i5;1>5<#9ki18ol4n0`a>76<3`>3;7>5$0``>1de3g;in7<>;:k73f<72-;io7:mb:l2fg<5:21b8:l50;&2ff<3jk1e=ol52298m0312900n9;6:182>5<7sA>>46*>c6871<=h9k31<75rbg194?7=83:pD9;7;%3`3?`43fl96=44}c63>5<e93;<i7?lazJ71==]<80::v<=:3496<<5;38j6?;5e;f962<5038?6?652`8f>7?=::0o6?9527811?432;81q)?l7;727>"6<:0m=6*;5;725>"3j3?:>6*>b582f==h<?k1<75f57`94?=n=;;1<7*>bb8667=i9kh1<65f53294?"6jj0>>?5a1c`95>=n=8l1<7*>bb8667=i9kh1>65f50g94?"6jj0>>?5a1c`97>=n=8n1<7*>bb8667=i9kh1865f50a94?"6jj0>>?5a1c`91>=n=8h1<7*>bb8667=i9kh1:65f50c94?"6jj0>>?5a1c`93>=n=831<7*>bb8667=i9kh1465`52594?=n=?o1<75`56394?=n==k1<7*>bb860g=i9kh1<65f55;94?"6jj0>8o5a1c`95>=n==21<7*>bb860g=i9kh1>65f55594?"6jj0>8o5a1c`97>=n==<1<7*>bb860g=i9kh1865f55794?"6jj0>8o5a1c`91>=n==>1<7*>bb860g=i9kh1:65f55194?"6jj0>8o5a1c`93>=n==81<7*>bb860g=i9kh1465f57c94?=h=8=1<75`50:94?=n<?n1<75`54d94?"6jj0>:55a1c`94>=h=<o1<7*>bb862==i9kh1=65`54f94?"6jj0>:55a1c`96>=h=<i1<7*>bb862==i9kh1?65`54`94?"6jj0>:55a1c`90>=h=<k1<7*>bb862==i9kh1965`54;94?"6jj0>:55a1c`92>=h=<21<7*>bb862==i9kh1;65`54594?"6jj0>:55a1c`9<>=n=;h1<7*>bb866f=i9kh1<65f53c94?"6jj0>>n5a1c`95>=n=;31<7*>bb866f=i9kh1>65f53:94?"6jj0>>n5a1c`97>=n=;=1<7*>bb866f=i9kh1865f53494?"6jj0>>n5a1c`91>=n=;?1<7*>bb866f=i9kh1:65f53694?"6jj0>>n5a1c`93>=n=;91<7*>bb866f=i9kh1465f59594?=h=>i1<7*>bb86<0=i9kh1<65`56`94?"6jj0>485a1c`95>=h=>k1<7*>bb86<0=i9kh1>65`56;94?"6jj0>485a1c`97>=h=>21<7*>bb86<0=i9kh1865`56594?"6jj0>485a1c`91>=h=><1<7*>bb86<0=i9kh1:65`56794?"6jj0>485a1c`93>=h=>>1<7*>bb86<0=i9kh1465`50694?=h=9o1<75f55294?"6jj0>8<5a1c`94>=n=:l1<7*>bb8604=i9kh1=65f52g94?"6jj0>8<5a1c`96>=n=:n1<7*>bb8604=i9kh1?65f52a94?"6jj0>8<5a1c`90>=n=:h1<7*>bb8604=i9kh1965f52c94?"6jj0>8<5a1c`92>=n=:31<7*>bb8604=i9kh1;65f52:94?"6jj0>8<5a1c`9<>=n=>91<75f50794?=n<?o1<75f59:94?=h=?n1<75`56094?=h=>:1<75f57a94?=h<l;1<7*>bb8641=i9kh1<65`4d294?"6jj0><95a1c`95>=h<ml1<7*>bb8641=i9kh1>65`4eg94?"6jj0><95a1c`97>=h<mn1<7*>bb8641=i9kh1865`4ea94?"6jj0><95a1c`91>=h<mk1<7*>bb8641=i9kh1:65`4e;94?"6jj0><95a1c`93>=h<m21<7*>bb8641=i9kh1465`4e594?"6jj0><95a1c`9=>=h<m<1<7*>bb8641=i9kh1m65`4e794?"6jj0><95a1c`9f>=h<m>1<7*>bb8641=i9kh1o65`4e194?"6jj0><95a1c`9`>=h<m81<7*>bb8641=i9kh1i65`4e394?"6jj0><95a1c`9b>=h<jl1<7*>bb8641=i9kh1==54o5af>5<#9ki19=:4n0`a>47<3f>hh7>5$0``>0633g;in7?=;:m7gf<72-;io7;?4:l2fg<6;21d8nl50;&2ff<28=1e=ol51598k1ef290/=om55168j4de28?07b:l9;29 4dd2<:?7c?mb;35?>i3k10;6)?mc;730>h6jk0:;65`4b594?"6jj0><95a1c`95==<g=i=6=4+1ca9152<f8hi6<74;n6f3?6=,8hh68>;;o3af?7f32e?i;4?:%3ag?37<2d:no4>b:9l0`3=83.:nn4:059m5gd=9j10c9k;:18'5ge==9>0b<lm:0f8?j2b;3:1(<ll:427?k7ej3;n76a;e383>!7ek3?;86`>bc82b>=h<mh1<7*>bb8641=i9kh1>=54o5f3>5<#9ki19=:4n0`a>77<3f>h97>5$0``>0633g;in7<=;:m7g1<72-;io7;?4:l2fg<5;21b84650;&2ff<3jk1e=ol50:9j0<1=83.:nn4;bc9m5gd=921b84850;&2ff<3jk1e=ol52:9j0<3=83.:nn4;bc9m5gd=;21b84:50;&2ff<3jk1e=ol54:9j0<5=83.:nn4;bc9m5gd==21b84?50;&2ff<3jk1e=ol56:9j0<6=83.:nn4;bc9m5gd=?21b85h50;&2ff<3jk1e=ol58:9j0=c=83.:nn4;bc9m5gd=121b85j50;&2ff<3jk1e=ol5a:9j0=e=83.:nn4;bc9m5gd=j21b85l50;&2ff<3jk1e=ol5c:9j0=g=83.:nn4;bc9m5gd=l21b85750;&2ff<3jk1e=ol5e:9j0=>=83.:nn4;bc9m5gd=n21b85850;&2ff<3jk1e=ol51198m1>2290/=om54c`8j4de28;07d:74;29 4dd2=hi7c?mb;31?>o30:0;6)?mc;6af>h6jk0:?65f49094?"6jj0?no5a1c`951=<a=2:6=4+1ca90gd<f8hi6<;4;h6;4?6=,8hh69lm;o3af?7132c?;k4?:%3ag?2ej2d:no4>7:9j02c=83.:nn4;bc9m5gd=9110e99k:18'5ge=<kh0b<lm:0;8?l2>m3:1(<ll:5`a?k7ej3;j76g;9e83>!7ek3>in6`>bc82f>=n<0i1<7*>bb87fg=i9kh1=n54i5;a>5<#9ki18ol4n0`a>4b<3`>2m7>5$0``>1de3g;in7?j;:k7=<<72-;io7:mb:l2fg<6n21b84<50;&2ff<3jk1e=ol52198m1>0290/=om54c`8j4de2;;07d:8c;29 4dd2=hi7c?mb;01?>o3?k0;6)?mc;6af>h6jk09?65`47`94?=n<?i1<75f54694?"6jj0>985a1c`94>=n=<91<7*>bb8610=i9kh1=65f54094?"6jj0>985a1c`96>=n=<;1<7*>bb8610=i9kh1?65f54294?"6jj0>985a1c`90>=n==l1<7*>bb8610=i9kh1965f55g94?"6jj0>985a1c`92>=n==n1<7*>bb8610=i9kh1;65f55a94?"6jj0>985a1c`9<>=h<>=1<7*>bb873<=i9kh1<65`46494?"6jj0?;45a1c`95>=h<>?1<7*>bb873<=i9kh1>65`46694?"6jj0?;45a1c`97>=h<>91<7*>bb873<=i9kh1865`46094?"6jj0?;45a1c`91>=h<>;1<7*>bb873<=i9kh1:65`46294?"6jj0?;45a1c`93>=h<?l1<7*>bb873<=i9kh1465f52794?"6jj0>?;5a1c`94>=n=:>1<7*>bb8673=i9kh1=65f52194?"6jj0>?;5a1c`96>=n=:81<7*>bb8673=i9kh1?65f52394?"6jj0>?;5a1c`90>=n=::1<7*>bb8673=i9kh1965f53d94?"6jj0>?;5a1c`92>=n=;o1<7*>bb8673=i9kh1;65f53f94?"6jj0>?;5a1c`9<>=h<>k1<75f54494?=e<?91<7?50;2x 4e02o90D98=;I66<>ia:3:17pl;6583>4<729q/=n9544;8L1053A>>46a>b883>>{e<==1<7=50;2x 4e02lh0D98=;I66<>N4n2.:<=4=;h61>5<<a=n1<75`1cg94?=zj=?;6=4<:183!7d?3oi7E:92:J71==O;o1/==>52:k76?6=3`>o6=44o0`f>5<<uk>?:7>53;294~"6k>0nn6F;639K00><@:l0(<>?:39j07<722c?h7>5;n3aa?6=3th?8h4?:483>5}#9j=1j=5G4708L13?3A9m7)??0;08m14=831b894?::k7`?6=3`;ih7>5;n3aa?6=3th?8k4?:283>5}#9j=1io5G4708L13?3A9m7)??0;08m14=831b8i4?::m2f`<722wi89;50;794?6|,8i<6k>4H541?M2202B8j6*>0181?l252900e9:50;9j0a<722c:ni4?::m2f`<722wi89j50;694?6|,8i<6hh4H541?M2202.:<=4=;h61>5<<a=n1<75f1cf94?=h9ko1<75rb56`>5<3290;w)?l7;ge?M21:2B?955+11296>o3:3:17d:k:188m4dc2900c<lj:188yg22>3:187>50z&2g2<bn2B?:?5G44:8 4672;1b8?4?::k7`?6=3`;ih7>5;n3aa?6=3th?984?:583>5}#9j=1ik5G4708L13?3-;;<7<4i5094?=n<m0;66g>be83>>i6jl0;66sm2gf94?2=83:p(<m8:dd8L1053A>>46*>0186?l252900e9j50;9j5gb=831d=ok50;9~f7e4290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;i?6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?m::187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb3a5>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f7e0290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;i36=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?m6:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb3ab>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f7ee290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj:3h6=4;:183!7d?3om7E:92:J71==#99:1>6g;2;29?l2c2900e<lk:188k4db2900qo=6b;290?6=8r.:o:4jf:J727=O<<20(<>?:39j07<722c?h7>5;h3a`?6=3f;ii7>5;|`024<72=0;6=u+1b59af=O<?80D9;7;%334?4<a=81<75f4883>>o3l3:17b?me;29?xd4>;0;694?:1y'5f1=mj1C8;<4H57;?!778380e9<50;9j0<<722c?h7>5;n3aa?6=3th8:>4?:583>5}#9j=1in5G4708L13?3-;;<7<4i5094?=n<00;66g;d;29?j7em3:17pl<6583>1<729q/=n95eb9K034<@=?37)??0;08m14=831b844?::k7`?6=3f;ii7>5;|`020<72=0;6=u+1b59af=O<?80D9;7;%334?4<a=81<75f4883>>o3l3:17b?me;29?xd4>?0;694?:1y'5f1=mj1C8;<4H57;?!778380e9<50;9j0<<722c?h7>5;n3aa?6=3th8::4?:583>5}#9j=1in5G4708L13?3-;;<7<4i5094?=n<00;66g;d;29?j7em3:17pl<6983>1<729q/=n95eb9K034<@=?37)??0;08m14=831b844?::k7`?6=3f;ii7>5;|`02<<72=0;6=u+1b59af=O<?80D9;7;%334?4<a=81<75f4883>>o3l3:17b?me;29?xd5j80;6>4?:1y'5f1=9=30D98=;I66<>"6890:o6gi4;29?l`22900c<l8:188yg4f13:187>50z&2g2<6<o1C8;<4H57;?l212900e9k50;9j5f6=831d=o950;9~f7df29086=4?{%3`3?2192B?:?5G44:8m10=831b=9:50;9l5g1=831vn?l=:180>5<7s-;h;7?;9:J727=O<<20(<>?:0a8mc2=831bj84?::m2f2<722wi>lo50;694?6|,8i<6<:i;I656>N3=11b8;4?::k7a?6=3`;h<7>5;n3a3?6=3th9no4?:283>5}#9j=18;?4H541?M2202c?:7>5;h370?6=3f;i;7>5;|`1f6<72:0;6=u+1b5951?<@=<97E::8:&245<6k2cm87>5;hd6>5<<g8h<6=44}c0bf?6=<3:1<v*>c6820c=O<?80D9;7;h65>5<<a=o1<75f1b294?=h9k=1<75rb3``>5<4290;w)?l7;655>N3>;1C8864i5494?=n9=>1<75`1c594?=zj;h?6=4<:183!7d?3;?56F;639K00><,8:;6<m4ig694?=nn<0;66a>b683>>{e:hi1<7:50;2x 4e028>m7E:92:J71==n<?0;66g;e;29?l7d83:17b?m7;29?xd5jm0;6>4?:1y'5f1=<?;0D98=;I66<>o3>3:17d?;4;29?j7e?3:17pl=b483>6<729q/=n9515;8L1053A>>46*>0182g>oa<3:17dh::188k4d02900qo<nd;290?6=8r.:o:4>4g9K034<@=?37d:9:188m1c=831b=n>50;9l5g1=831vn?lj:180>5<7s-;h;7:91:J727=O<<20e9850;9j512=831d=o950;9~f7d129086=4?{%3`3?7312B?:?5G44:8 46728i0ek:50;9jb0<722e:n:4?::a6dc=83>1<7>t$0a4>42a3A>=>6F;599j03<722c?i7>5;h3`4?6=3f;i;7>5;|`1fc<72:0;6=u+1b59037<@=<97E::8:k72?6=3`;?87>5;n3a3?6=3th9n:4?:283>5}#9j=1=974H541?M2202.:<=4>c:ke0?6=3`l>6=44o0`4>5<<uk8jj7>54;294~"6k>0:8k5G4708L13?3`>=6=44i5g94?=n9j:1<75`1c594?=zj;i;6=4<:183!7d?3>==6F;639K00><a=<1<75f15694?=h9k=1<75rb3`;>5<4290;w)?l7;37=>N3>;1C8864$023>4e<ao>1<75ff483>>i6j>0;66sm2c294?2=83:p(<m8:06e?M21:2B?955f4783>>o3m3:17d?l0;29?j7e?3:17pl=c083>6<729q/=n954738L1053A>>46g;6;29?l73<3:17b?m7;29?xd5j00;6>4?:1y'5f1=9=30D98=;I66<>"6890:o6gi4;29?l`22900c<l8:188yg4d:3:1?7>50z&2g2<3>81C8;<4H57;?l212900e<:;:188k4d02900qo=;f;297?6=8r.:o:4>489K034<@=?37)??0;3`?l`32900ek;50;9l5g1=831vn>:8:187>5<7s-;h;7?;f:J727=O<<20e9850;9j0`<722c:o=4?::m2f2<722wi?8650;194?6|,8i<698>;I656>N3=11b8;4?::k201<722e:n:4?::a706=8391<7>t$0a4>42>3A>=>6F;599'556=9j1bj94?::ke1?6=3f;i;7>5;|`00=<72=0;6=u+1b5951`<@=<97E::8:k72?6=3`>n6=44i0a3>5<<g8h<6=44}c16=?6=;3:1<v*>c68724=O<?80D9;7;h65>5<<a8>?6=44o0`4>5<<uk9>=7>53;294~"6k>0:845G4708L13?3-;;<7?l;hd7>5<<ao?1<75`1c594?=zj:>26=4;:183!7d?3;?j6F;639K00><a=<1<75f4d83>>o6k90;66a>b683>>{e;<k1<7=50;2x 4e02=<:7E:92:J71==n<?0;66g>4583>>i6j>0;66sm34094?5=83:p(<m8:06:?M21:2B?955+11295f=nn=0;66gi5;29?j7e?3:17pl<4`83>1<729q/=n9515d8L1053A>>46g;6;29?l2b2900e<m?:188k4d02900qo=:b;297?6=8r.:o:4;609K034<@=?37d:9:188m4232900c<l8:188yg52;3:1?7>50z&2g2<6<01C8;<4H57;?!7783;h7dh;:188mc3=831d=o950;9~f62e290?6=4?{%3`3?73n2B?:?5G44:8m10=831b8h4?::k2g5<722e:n:4?::a70e=8391<7>t$0a4>1063A>=>6F;599j03<722c:894?::m2f2<722wi?8:50;194?6|,8i<6<:6;I656>N3=11/==>51b9jb1<722cm97>5;n3a3?6=3th88n4?:583>5}#9j=1=9h4H541?M2202c?:7>5;h6f>5<<a8i;6=44o0`4>5<<uk9>h7>53;294~"6k>0?:<5G4708L13?3`>=6=44i067>5<<g8h<6=44}c161?6=;3:1<v*>c6820<=O<?80D9;7;%334?7d3`l?6=44ig794?=h9k=1<75rb26g>5<3290;w)?l7;37b>N3>;1C8864i5494?=n<l0;66g>c183>>i6j>0;66sm34g94?5=83:p(<m8:542?M21:2B?955f4783>>o6<=0;66a>b683>>{e;<<1<7=50;2x 4e028>27E:92:J71==#99:1=n5ff583>>oa=3:17b?m7;29?xd4<l0;694?:1y'5f1=9=l0D98=;I66<>o3>3:17d:j:188m4e72900c<l8:188yg52n3:1?7>50z&2g2<3>81C8;<4H57;?l212900e<:;:188k4d02900qo=:7;297?6=8r.:o:4>489K034<@=?37)??0;3`?l`32900ek;50;9l5g1=831vn>8?:180>5<7s-;h;7:91:J727=O<<20e9850;9j512=831d=o950;9~f7bc290?6=4?{%3`3?73n2B?:?5G44:8m10=831b8h4?::k2g5<722e:n:4?::a6ae=83>1<7>t$0a4>42a3A>=>6F;599j03<722c?i7>5;h3`4?6=3f;i;7>5;|`1`g<72=0;6=u+1b5951`<@=<97E::8:k72?6=3`>n6=44i0a3>5<<g8h<6=44}c0ge?6=<3:1<v*>c6820c=O<?80D9;7;h65>5<<a=o1<75f1b294?=h9k=1<75rb3f:>5<3290;w)?l7;37b>N3>;1C8864i5494?=n<l0;66g>c183>>i6j>0;66sm2g294?2=83:p(<m8:06e?M21:2B?955f4783>>o3m3:17d?l0;29?j7e?3:17pl=eg83>1<729q/=n9515d8L1053A>>46g;6;29?l2b2900e<m?:188k4d02900qo<je;290?6=8r.:o:4>4g9K034<@=?37d:9:188m1c=831b=n>50;9l5g1=831vn?kk:187>5<7s-;h;7?;f:J727=O<<20e9850;9j0`<722c:o=4?::m2f2<722wi>hm50;694?6|,8i<6<:i;I656>N3=11b8;4?::k7a?6=3`;h<7>5;n3a3?6=3th8;o4?:583>5}#9j=1=9h4H541?M2202c?:7>5;h6f>5<<a8i;6=44o0`4>5<<uk9<m7>54;294~"6k>0:8k5G4708L13?3`>=6=44i5g94?=n9j:1<75`1c594?=zj:=26=4;:183!7d?3;?j6F;639K00><a=<1<75f4d83>>o6k90;66a>b683>>{e;>21<7:50;2x 4e028>m7E:92:J71==n<?0;66g;e;29?l7d83:17b?m7;29?xd4?>0;694?:1y'5f1=9=l0D98=;I66<>o3>3:17d:j:188m4e72900c<l8:188yg5?m3:187>50z&2g2<6<o1C8;<4H57;?l212900e9k50;9j5f6=831d=o950;9~f6>c290?6=4?{%3`3?73n2B?:?5G44:8m10=831b8h4?::k2g5<722e:n:4?::a7=e=83>1<7>t$0a4>42a3A>=>6F;599j03<722c?i7>5;h3`4?6=3f;i;7>5;|`0<g<72=0;6=u+1b5951`<@=<97E::8:k72?6=3`>n6=44i0a3>5<<g8h<6=44}c1;e?6=<3:1<v*>c6820c=O<?80D9;7;h65>5<<a=o1<75f1b294?=h9k=1<75rb0g:>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f4c?290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj8o<6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn<k9:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb0g6>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f4c3290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj8o86=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn<k=:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb0g2>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f72e290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;>j6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?:6:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb36;>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f720290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;>=6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?:::187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb367>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f724290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;386=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?7=:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb3;2>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f7?7290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;2m6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?6j:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb3:g>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f7>d290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;2i6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?=>:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb313>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f74a290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;8n6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?<k:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb30`>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f74e290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;8j6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?<6:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb3:2>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;2;6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb35e>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;=n6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb35g>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;=h6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb35a>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;=j6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb35:>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;;m6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb33f>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;;o6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb33`>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;;i6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb33b>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;;26=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb33;>5<3290;w)?l7;g`?M21:2B?955G3g9'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;;<6=4;:183!7d?3oh7E:92:J71==O;o1/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb32g>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f76d290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;:i6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?>n:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb32:>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f76?290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;:<6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?>9:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb326>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f70a290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;<n6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?8k:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb34`>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f70e290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj;<j6=4;:183!7d?3oh7E:92:J71==#99:1>6g;2;29?l2>2900e9j50;9l5gc=831vn?86:187>5<7s-;h;7kl;I656>N3=11/==>52:k76?6=3`>26=44i5f94?=h9ko1<75rb34;>5<3290;w)?l7;g`?M21:2B?955+11296>o3:3:17d:6:188m1b=831d=ok50;9~f700290?6=4?{%3`3?cd3A>=>6F;599'556=:2c?>7>5;h6:>5<<a=n1<75`1cg94?=zj:9?6=4::183!7d?3oo7E:92:J71==#99:1>6g;2;29?l232900e9750;9j0a<722e:nh4?::a765=83?1<7>t$0a4>`b<@=<97E::8:&245<53`>96=44i5694?=n<00;66g;d;29?j7em3:17pl<3383>0<729q/=n95ee9K034<@=?37)??0;08m14=831b894?::k7=?6=3`>o6=44o0`f>5<<uk98=7>55;294~"6k>0nh6F;639K00><,8:;6?5f4383>>o3<3:17d:6:188m1b=831d=ok50;9~f657290>6=4?{%3`3?cc3A>=>6F;599'556=:2c?>7>5;h67>5<<a=31<75f4e83>>i6jl0;66sm33d94?3=83:p(<m8:df8L1053A>>46*>0181?l252900e9:50;9j0<<722c?h7>5;n3aa?6=3th8>i4?:483>5}#9j=1ii5G4708L13?3-;;<7<4i5094?=n<=0;66g;9;29?l2c2900c<lj:188yg55k3:197>50z&2g2<a82B?:?5G44:8 4672<1b8?4?::k70?6=3`>o6=44i0`g>5<<g8hn6=44}c11a?6==3:1<v*>c68f`>N3>;1C8864$023>7=n<;0;66g;4;29?l2>2900e9j50;9l5gc=831vn><>:180>5<7s-;h;7:91:J727=O<<20e9850;9j512=831d=o950;9~f64729086=4?{%3`3?2192B?:?5G44:8m10=831b=9:50;9l5g1=831vn>?8:187>5<7s-;h;7?;f:J727=O<<20e9850;9j0`<722c:o=4?::m2f2<722wi?<h50;194?6|,8i<698>;I656>N3=11b8;4?::k201<722e:n:4?::a743=83>1<7>t$0a4>42a3A>=>6F;599j03<722c?i7>5;h3`4?6=3f;i;7>5;|`05`<72:0;6=u+1b59037<@=<97E::8:k72?6=3`;?87>5;n3a3?6=3th8=>4?:583>5}#9j=1=9h4H541?M2202c?:7>5;h6f>5<<a8i;6=44o0`4>5<<uk9:h7>53;294~"6k>0?:<5G4708L13?3`>=6=44i067>5<<g8h<6=44}c125?6=<3:1<v*>c6820c=O<?80D9;7;h65>5<<a=o1<75f1b294?=h9k=1<75rb23`>5<4290;w)?l7;655>N3>;1C8864i5494?=n9=>1<75`1c594?=zj::m6=4;:183!7d?3;?j6F;639K00><a=<1<75f4d83>>o6k90;66a>b683>>{e;8h1<7=50;2x 4e02=<:7E:92:J71==n<?0;66g>4583>>i6j>0;66sm31f94?2=83:p(<m8:06e?M21:2B?955f4783>>o3m3:17d?l0;29?j7e?3:17pl<1`83>6<729q/=n954738L1053A>>46g;6;29?l73<3:17b?m7;29?xd48k0;694?:1y'5f1=9=l0D98=;I66<>o3>3:17d:j:188m4e72900c<l8:188yg5613:1?7>50z&2g2<3>81C8;<4H57;?l212900e<:;:188k4d02900qo=?9;290?6=8r.:o:4>4g9K034<@=?37d:9:188m1c=831b=n>50;9l5g1=831vn>:9:186>5<7s-;h;7kk;I656>N3=11/==>52:k76?6=3`>?6=44i5;94?=n<m0;66a>bd83>>{e;=?1<7;50;2x 4e02ln0D98=;I66<>"689097d:=:188m12=831b844?::k7`?6=3f;ii7>5;|`001<72<0;6=u+1b59aa=O<?80D9;7;%334?4<a=81<75f4583>>o313:17d:k:188k4db2900qo=;3;291?6=8r.:o:4jd:J727=O<<20(<>?:39j07<722c?87>5;h6:>5<<a=n1<75`1cg94?=zj:>96=4::183!7d?3oo7E:92:J71==#99:1>6g;2;29?l232900e9750;9j0a<722e:nh4?::a717=83?1<7>t$0a4>`b<@=<97E::8:&245<53`>96=44i5694?=n<00;66g;d;29?j7em3:17pl<4183>0<729q/=n95ee9K034<@=?37)??0;08m14=831b894?::k7=?6=3`>o6=44o0`f>5<<uk98j7>55;294~"6k>0nh6F;639K00><,8:;6?5f4383>>o3<3:17d:6:188m1b=831d=ok50;9~f65b290>6=4?{%3`3?cc3A>=>6F;599'556=:2c?>7>5;h67>5<<a=31<75f4e83>>i6jl0;66sm2`094?2=83:p(<m8:da8L1053A>>46*>0181?l252900e9750;9j0a<722e:nh4?::a6<`=83>1<7>t$0a4>`e<@=<97E::8:&245<53`>96=44i5;94?=n<m0;66a>bd83>>{e:h<1<7:50;2x 4e02ll0D98=;I66<>"6890>7d:=:188m1b=831b=oj50;9l5gc=831vn?o::187>5<7s-;h;7ki;I656>N3=11/==>55:k76?6=3`>o6=44i0`g>5<<g8hn6=44}c1g0?6==3:1<v*>c68f`>N3>;1C8864$023>7=n<;0;66g;4;29?l2>2900e9j50;9l5gc=831vn>j<:186>5<7s-;h;7kk;I656>N3=11/==>52:k76?6=3`>?6=44i5;94?=n<m0;66a>bd83>>{e;m81<7;50;2x 4e02ln0D98=;I66<>"689097d:=:188m12=831b844?::k7`?6=3f;ii7>5;|`0`4<72<0;6=u+1b59aa=O<?80D9;7;%334?4<a=81<75f4583>>o313:17d:k:188k4db2900qo=k0;291?6=8r.:o:4jd:J727=O<<20(<>?:39j07<722c?87>5;h6:>5<<a=n1<75`1cg94?=zj:im6=4::183!7d?3oo7E:92:J71==#99:1>6g;2;29?l232900e9750;9j0a<722e:nh4?::a7fb=83?1<7>t$0a4>c6<@=<97E::8:&245<23`>96=44i5694?=n<m0;66g>be83>>i6jl0;66sm3ba94?3=83:p(<m8:df8L1053A>>46*>0181?l252900e9:50;9j0<<722c?h7>5;n3aa?6=3th8oh4?:483>5}#9j=1ii5G4708L13?3-;;<7<4i5094?=n<=0;66g;9;29?l2c2900c<lj:188yg5d93:1?7>50z&2g2<3>81C8;<4H57;?l212900e<:;:188k4d02900qo=l0;297?6=8r.:o:4;609K034<@=?37d:9:188m4232900c<l8:188yg5e?3:187>50z&2g2<6<o1C8;<4H57;?l212900e9k50;9j5f6=831d=o950;9~f6da29086=4?{%3`3?2192B?:?5G44:8m10=831b=9:50;9l5g1=831vn>l::187>5<7s-;h;7?;f:J727=O<<20e9850;9j0`<722c:o=4?::m2f2<722wi?ok50;194?6|,8i<698>;I656>N3=11b8;4?::k201<722e:n:4?::a7g5=83>1<7>t$0a4>42a3A>=>6F;599j03<722c?i7>5;h3`4?6=3f;i;7>5;|`0fa<72:0;6=u+1b59037<@=<97E::8:k72?6=3`;?87>5;n3a3?6=3th8n<4?:583>5}#9j=1=9h4H541?M2202c?:7>5;h6f>5<<a8i;6=44o0`4>5<<uk9io7>53;294~"6k>0?:<5G4708L13?3`>=6=44i067>5<<g8h<6=44}c1bb?6=<3:1<v*>c6820c=O<?80D9;7;h65>5<<a=o1<75f1b294?=h9k=1<75rb2`a>5<4290;w)?l7;655>N3>;1C8864i5494?=n9=>1<75`1c594?=zj:ko6=4;:183!7d?3;?j6F;639K00><a=<1<75f4d83>>o6k90;66a>b683>>{e;kk1<7=50;2x 4e02=<:7E:92:J71==n<?0;66g>4583>>i6j>0;66sm3``94?2=83:p(<m8:06e?M21:2B?955f4783>>o3m3:17d?l0;29?j7e?3:17pl<b883>6<729q/=n954738L1053A>>46g;6;29?l73<3:17b?m7;29?xd4i00;694?:1y'5f1=9=l0D98=;I66<>o3>3:17d:j:188m4e72900c<l8:188yg5b83:197>50z&2g2<bl2B?:?5G44:8 4672;1b8?4?::k70?6=3`>26=44i5f94?=h9ko1<75rb2ff>5<2290;w)?l7;d3?M21:2B?955+11291>o3:3:17d:;:188m1b=831b=oj50;9l5gc=831vn>ji:186>5<7s-;h;7kk;I656>N3=11/==>52:k76?6=3`>?6=44i5;94?=n<m0;66a>bd83>>{e;l;1<7;50;2x 4e02ln0D98=;I66<>"689097d:=:188m12=831b844?::k7`?6=3f;ii7>5;|`0a7<72<0;6=u+1b59aa=O<?80D9;7;%334?4<a=81<75f4583>>o313:17d:k:188k4db2900qo=j3;291?6=8r.:o:4jd:J727=O<<20(<>?:39j07<722c?87>5;h6:>5<<a=n1<75`1cg94?=zj:o?6=4::183!7d?3oo7E:92:J71==#99:1>6g;2;29?l232900e9750;9j0a<722e:nh4?::a7`3=83?1<7>t$0a4>`b<@=<97E::8:&245<53`>96=44i5694?=n<00;66g;d;29?j7em3:17pl<e783>0<729q/=n95ee9K034<@=?37)??0;08m14=831b894?::k7=?6=3`>o6=44o0`f>5<<uk9m47>55;294~"6k>0nh6F;639K00><,8:;6?5f4383>>o3<3:17d:6:188m1b=831d=ok50;9~f6`0290>6=4?{%3`3?cc3A>=>6F;599'556=:2c?>7>5;h67>5<<a=31<75f4e83>>i6jl0;66sm3g494?3=83:p(<m8:df8L1053A>>46*>0181?l252900e9:50;9j0<<722c?h7>5;n3aa?6=3th8j84?:483>5}#9j=1ii5G4708L13?3-;;<7<4i5094?=n<=0;66g;9;29?l2c2900c<lj:188yg5a<3:197>50z&2g2<bl2B?:?5G44:8 4672;1b8?4?::k70?6=3`>26=44i5f94?=h9ko1<75rb2d0>5<2290;w)?l7;gg?M21:2B?955+11296>o3:3:17d:;:188m1?=831b8i4?::m2f`<722wi?k<50;794?6|,8i<6hj4H541?M2202.:<=4=;h61>5<<a=>1<75f4883>>o3l3:17b?me;29?xd4n80;684?:1y'5f1=mm1C8;<4H57;?!778380e9<50;9j01<722c?57>5;h6g>5<<g8hn6=44}c1e4?6==3:1<v*>c68f`>N3>;1C8864$023>7=n<;0;66g;4;29?l2>2900e9j50;9l5gc=831vn9?9:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb536>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f173290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=;86=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9?=:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb532>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f16a290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=:n6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9>k:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb52`>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f16e290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=:j6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9>6:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb52;>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f160290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=:=6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9>;:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb520>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f165290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=::6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9>?:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb2de>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f6`b290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj:lo6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn>hl:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb2da>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f17d290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=;i6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9?n:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb53:>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f17?290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj=;<6=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9??:187>5<7s-;h;7kj;I656>N3=11/==>52:k76?6=3`>?6=44i5f94?=h9ko1<75rb526>5<3290;w)?l7;gf?M21:2B?955+11296>o3:3:17d:;:188m1b=831d=ok50;9~f6`f290?6=4?{%3`3?cb3A>=>6F;599'556=:2c?>7>5;h67>5<<a=n1<75`1cg94?=zj:l26=4;:183!7d?3on7E:92:J71==#99:1>6g;2;29?l232900e9j50;9l5gc=831vn9;=:180>5<7s-;h;7?;9:J727=O<<20(<>?:038mc2=831bj84?::m2f2<722wi89750;194?6|,8i<6<:6;I656>N3=11/==>5109jb1<722cm97>5;n3a3?6=3th98i4?:283>5}#9j=1=974H541?M2202.:<=4>6:ke0?6=3`l>6=44o0`4>5<<uk;nn7>53;294~"6k>0:845G4708L13?3-;;<7?9;hd7>5<<ao?1<75`1c594?=zj8n<6=4<:183!7d?3;?56F;639K00><,8:;6<84ig694?=nn<0;66a>b683>>{e9m<1<7=50;2x 4e028>27E:92:J71==#99:1=;5ff583>>oa=3:17b?m7;29?xd6l<0;6>4?:1y'5f1=9=30D98=;I66<>"6890::6gi4;29?l`22900c<l8:188yg7c<3:1?7>50z&2g2<6<01C8;<4H57;?!7783;=7dh;:188mc3=831d=o950;9~f4b429086=4?{%3`3?7312B?:?5G44:8 46728<0ek:50;9jb0<722e:n:4?::a5a4=8391<7>t$0a4>42>3A>=>6F;599'556=9?1bj94?::ke1?6=3f;i;7>5;|`2`4<72:0;6=u+1b5951?<@=<97E::8:&245<6>2cm87>5;hd6>5<<g8h<6=44}c3g4?6=;3:1<v*>c6820<=O<?80D9;7;%334?713`l?6=44ig794?=h9k=1<75rb0ae>5<4290;w)?l7;37=>N3>;1C8864$023>40<ao>1<75ff483>>i6j>0;66sm1bg94?5=83:p(<m8:06:?M21:2B?955+112953=nn=0;66gi5;29?j7e?3:17pl>ce83>6<729q/=n9515;8L1053A>>46*>01822>oa<3:17dh::188k4d02900qo?lc;297?6=8r.:o:4>489K034<@=?37)??0;35?l`32900ek;50;9l5g1=831vn<mm:180>5<7s-;h;7?;9:J727=O<<20(<>?:048mc2=831bj84?::m2f2<722wi=no50;194?6|,8i<6<:6;I656>N3=11/==>5179jb1<722cm97>5;n3a3?6=3th:o44?:283>5}#9j=1=974H541?M2202.:<=4>6:ke0?6=3`l>6=44o0`4>5<<uk;h47>53;294~"6k>0:845G4708L13?3-;;<7?9;hd7>5<<ao?1<75`1c594?=zj;>m6=4;:183!7d?3;?n6F;639K00><,8:;6<k4ig694?=nn<0;66gi6;29?j7e?3:17pl>ee83>1<729q/=n9515`8L1053A>>46*>0182a>oa<3:17dh::188mc0=831d=o950;9~f7g6290?6=4?{%3`3?73j2B?:?5G44:8 46728k0ek:50;9jb0<722cm:7>5;n3a3?6=3th99<4?:483>5}#9j=1=9j4H541?M2202.:<=4>8:ke0?6=3`l>6=44ig494?=nn>0;66a>b683>>{e9ll1<7;50;2x 4e028>o7E:92:J71==#99:1=55ff583>>oa=3:17dh9:188mc1=831d=o950;9~f7g?290>6=4?{%3`3?73l2B?:?5G44:8 4672=90ek:50;9jb0<722cm:7>5;hd4>5<<g8h<6=44}c0b0?6==3:1<v*>c6820a=O<?80D9;7;%334?7>3`l?6=44ig794?=nn?0;66gi7;29?j7e?3:17pl<9g83>6<729q/=n9515;8L1053A>>46*>0184?l`32900ek;50;9l5g1=831vn?7j:187>5<7s-;h;7?;b:J727=O<<20(<>?:g9jb1<722cm97>5;hd5>5<<g8h<6=44}c067?6=;3:1<v*>c6820<=O<?80D9;7;%334?713`l?6=44ig794?=h9k=1<75rb0d2>5<4290;w)?l7;37=>N3>;1C8864$023>40<ao>1<75ff483>>i6j>0;66sm24794?2=83:p(<m8:06a?M21:2B?955+11295`=nn=0;66gi5;29?l`12900c<l8:188yg7a;3:187>50z&2g2<6<k1C8;<4H57;?!7783;n7dh;:188mc3=831bj;4?::m2f2<722wi>4m50;794?6|,8i<6<:k;I656>N3=11/==>5c:ke0?6=3`l>6=44ig494?=nn>0;66a>b683>>{e:<=1<7;50;2x 4e028>o7E:92:J71==#99:1=55ff583>>oa=3:17dh9:188mc1=831d=o950;9~f4`2290>6=4?{%3`3?73l2B?:?5G44:8 4672820ek:50;9jb0<722cm:7>5;hd4>5<<g8h<6=44}c1:<?6=;3:1<v*>c6820<=O<?80D9;7;%334?7d3`l?6=44ig794?=h9k=1<75rb2:6>5<4290;w)?l7;37=>N3>;1C8864$023>4e<ao>1<75ff483>>i6j>0;66sm2gc94?5=83:p(<m8:06:?M21:2B?955+11295f=nn=0;66gi5;29?j7e?3:17pl=e683>6<729q/=n9515;8L1053A>>46*>0182g>oa<3:17dh::188k4d02900qo=67;291?6=8r.:o:4>4e9K034<@=?37)??0;3g?l`32900ek;50;9jb3<722cm;7>5;n3a3?6=3th8494?:483>5}#9j=1=9j4H541?M2202.:<=4>d:ke0?6=3`l>6=44ig494?=nn>0;66a>b683>>{e:o31<7;50;2x 4e028>o7E:92:J71==#99:1=i5ff583>>oa=3:17dh9:188mc1=831d=o950;9~f7c1290>6=4?{%3`3?73l2B?:?5G44:8 46728h0ek:50;9jb0<722cm:7>5;hd4>5<<g8h<6=44}c1:2?6==3:1<v*>c6820a=O<?80D9;7;%334?7c3`l?6=44ig794?=nn?0;66gi7;29?j7e?3:17pl<8283>0<729q/=n9515f8L1053A>>46*>0182`>oa<3:17dh::188mc0=831bj:4?::m2f2<722wi>k650;794?6|,8i<6<:k;I656>N3=11/==>51e9jb1<722cm97>5;hd5>5<<ao=1<75`1c594?=zj;o>6=4::183!7d?3;?h6F;639K00><,8:;6<l4ig694?=nn<0;66gi6;29?l`02900c<l8:188yg5>=3:197>50z&2g2<6<m1C8;<4H57;?!7783;o7dh;:188mc3=831bj;4?::ke3?6=3f;i;7>5;|`0<7<72<0;6=u+1b5951b<@=<97E::8:&245<6l2cm87>5;hd6>5<<ao<1<75ff683>>i6j>0;66sm2g594?3=83:p(<m8:06g?M21:2B?955+11295a=nn=0;66gi5;29?l`12900ek950;9l5g1=831vn?k;:186>5<7s-;h;7?;d:J727=O<<20(<>?:0`8mc2=831bj84?::ke2?6=3`l<6=44o0`4>5<<uk8mj7>54;294~"6k>0:8o5G4708L13?3-;;<7kn;hd7>5<<ao?1<75ff783>>i6j>0;66sm38g94?3=83:p(<m8:06g?M21:2B?955+1129a<=nn=0;66gi5;29?l`12900ek950;9l5g1=831vn>7;:186>5<7s-;h;7?;d:J727=O<<20(<>?:0f8mc2=831bj84?::ke2?6=3`l<6=44o0`4>5<<uk93=7>55;294~"6k>0:8i5G4708L13?3-;;<7?k;hd7>5<<ao?1<75ff783>>oa?3:17b?m7;29?xd5n?0;684?:1y'5f1=9=n0D98=;I66<>"6890:h6gi4;29?l`22900ek850;9jb2<722e:n:4?::a6`5=83?1<7>t$0a4>42c3A>=>6F;599'556=9k1bj94?::ke1?6=3`l=6=44ig594?=h9k=1<75rb23;>5<5290;w)?l7;37<>N3>;1C8864$023>2=nn=0;66a>b683>>{e;8<1<7<50;2x 4e028>37E:92:J71==#99:1;6gi4;29?j7e?3:17pl<1583>7<729q/=n9515:8L1053A>>46*>0184?l`32900c<l8:188yg56:3:1>7>50z&2g2<6<11C8;<4H57;?!7783=0ek:50;9l5g1=831vn>??:181>5<7s-;h;7?;8:J727=O<<20(<>?:69jb1<722e:n:4?::a75c=8381<7>t$0a4>42?3A>=>6F;599'556=?2cm87>5;n3a3?6=3th8<n4?:383>5}#9j=1=964H541?M2202.:<=48;hd7>5<<g8h<6=44}c13e?6=:3:1<v*>c6820==O<?80D9;7;%334?1<ao>1<75`1c594?=zj:h36=4=:183!7d?3;?46F;639K00><,8:;6:5ff583>>i6j>0;66sm3c494?4=83:p(<m8:06;?M21:2B?955+11293>oa<3:17b?m7;29?xd4j=0;6?4?:1y'5f1=9=20D98=;I66<>"6890<7dh;:188k4d02900qo=m2;296?6=8r.:o:4>499K034<@=?37)??0;58mc2=831d=o950;9~f6d729096=4?{%3`3?7302B?:?5G44:8 4672>1bj94?::m2f2<722wi?lk50;094?6|,8i<6<:7;I656>N3=11/==>57:ke0?6=3f;i;7>5;|`0ef<72;0;6=u+1b5951><@=<97E::8:&245<03`l?6=44o0`4>5<<uk9jm7>52;294~"6k>0:855G4708L13?3-;;<794ig694?=h9k=1<75rb201>5<5290;w)?l7;37<>N3>;1C8864$023>2=nn=0;66a>b683>>{e;j81<7<50;2x 4e028>37E:92:J71==#99:1;6gi4;29?j7e?3:17pl>f883>0<729q/=n9515f8L1053A>>46*>0182<>oa<3:17dh::188mc0=831bj:4?::m2f2<722wi=kl50;794?6|,8i<6<:k;I656>N3=11/==>51g9jb1<722cm97>5;hd5>5<<ao=1<75`1c594?=zj;?i6=4::183!7d?3;?h6F;639K00><,8:;6<64ig694?=nn<0;66gi6;29?l`02900c<l8:188yg42l3:197>50z&2g2<6<m1C8;<4H57;?!7783;m7dh;:188mc3=831bj;4?::ke3?6=3f;i;7>5;|`1=a<72<0;6=u+1b5951b<@=<97E::8:&245<d3`l?6=44ig794?=nn?0;66gi7;29?j7e?3:17pl;4083>dg=83:p(<m8:0`e?M21:2B?955U408b76=:803644>2;30>d<6<3h1=84r$01e>1=#9=:186*i8;68 c?=<2.mm7:4$g`90>"ak3>0(kj54:&2g6<43-;h87=4$022>1=#998186*>0287?!77<3>0(<>::59'550=<2.:<:4;;%33<?2<,8:2695+11c90>"68k0?7)??c;68 46c2=1/==k54:&24c<33-;:<7:4$032>1=#988186*>1287?!76<3>0(<?::59'540=<2.:=:4;;%32<?2<,8;2695+10c90>"69k0?7)?>c;68 47c2=1/=<k54:&25c<33-;9<7:4$002>1=#9;8186*>2287?!75<3>0(<<::59'570=<2.:>:4;;%31<?2<,882695+13c90>"6:k0?7)?=c;68 44c2=1/=?k54:&26c<33-;8<7:4$012>1=#9:8186*>3287?!74<3>0(<=::59'560=<2.:?:4;;%30<?2<,892695+12c90>"6;k0?7)?<c;68 45c2=1/=>k54:&71c<3=m1/jh4;;%3`5?7e>2.:8<4<;%376?5<,=?n69;k;%de>1=n<>0;66g;8;29?lc02900eh650;9j5f3=831b=n850;9j00d=831b88m50;9j71<72-;io7=<;o3af?6<3`996=4+1ca976=i9kh1=65f3083>!7ek3987c?mb;08?l57290/=om5329m5gd=;21b>k4?:%3ag?543g;in7:4;h0f>5<#9ki1?>5a1c`91>=n:m0;6)?mc;10?k7ej3<07d<l:18'5ge=;:1e=ol57:9j6g<72-;io7=<;o3af?><3`9n6=4+1ca97a=i9kh1<65f3b83>!7ek39o7c?mb;38?l5e290/=om53e9m5gd=:21b?l4?:%3ag?5c3g;in7=4;h1:>5<#9ki1?i5a1c`90>=n;10;6)?mc;1g?k7ej3?07d=8:18'5ge=;m1e=ol56:9j73<72-;io7=k;o3af?1<3`9>6=4+1ca97a=i9kh1465f6983>!7ek3<<7c?mb;28?l01290/=om5669m5gd=921b:94?:%3ag?003g;in7<4;h40>5<#9ki1::5a1c`97>=n>;0;6)?mc;44?k7ej3>07d8>:18'5ge=>>1e=ol55:9j25<72-;io788;o3af?0<3`?m6=4+1ca922=i9kh1;65f5d83>!7ek3<<7c?mb;:8?l3c290/=om5669m5gd=121b9n4?:%3ag?003g;in7o4;h7a>5<#9ki1::5a1c`9f>=n=00;6)?mc;44?k7ej3i07d;7:18'5ge=>>1e=ol5d:9j12<72-;io788;o3af?c<3`?=6=4+1ca922=i9kh1j65f5483>!7ek3<<7c?mb;33?>o2<3:1(<ll:758j4de28;07d;<:18'5ge=>>1e=ol51398m04=83.:nn497:l2fg<6;21b9<4?:%3ag?003g;in7?;;:k64?6=,8hh6;94n0`a>43<3`<m6=4+1ca922=i9kh1=;54i7g94?"6jj0=;6`>bc823>=n>m0;6)?mc;44?k7ej3;376g9c;29 4dd2?=0b<lm:0;8?l0e290/=om5669m5gd=9h10e;o50;&2ff<1?2d:no4>b:9j2<<72-;io788;o3af?7d32c=97>5$0``>31<f8hi6<j4;h7b>5<#9ki1::5a1c`95`=<a=l1<7*>bb853>h6jk0:j65f8883>!7ek3237c?mb;28?l>0290/=om5899m5gd=921b484?:%3ag?>?3g;in7<4;h:7>5<#9ki1455a1c`97>=n0:0;6)?mc;:;?k7ej3>07d6=:18'5ge=011e=ol55:9j<4<72-;io767;o3af?0<3`2;6=4+1ca9<==i9kh1;65f7g83>!7ek3237c?mb;:8?l1b290/=om5899m5gd=121b;i4?:%3ag?>?3g;in7o4;h5`>5<#9ki1455a1c`9f>=n?h0;6)?mc;:;?k7ej3i07d96:18'5ge=011e=ol5d:9j3=<72-;io767;o3af?c<3`=<6=4+1ca9<==i9kh1j65f7783>!7ek3237c?mb;33?>o0=3:1(<ll:9:8j4de28;07d9;:18'5ge=011e=ol51398m25=83.:nn478:l2fg<6;21b;?4?:%3ag?>?3g;in7?;;:k45?6=,8hh6564n0`a>43<3`3;6=4+1ca9<==i9kh1=;54i9d94?"6jj0346`>bc823>=n0l0;6)?mc;:;?k7ej3;376g7d;29 4dd2120b<lm:0;8?l>d290/=om5899m5gd=9h10e5l50;&2ff<?02d:no4>b:9j<d<72-;io767;o3af?7d32c3:7>5$0``>=><f8hi6<j4;h5a>5<#9ki1455a1c`95`=<a>:1<7*>bb8;<>h6jk0:j65f9483>!7ek33?7c?mb;28?l?4290/=om5959m5gd=921b5?4?:%3ag??33g;in7<4;h;2>5<#9ki1595a1c`97>=n1h0;6)?mc;;:?k7ej3:07d77:18'5ge=101e=ol51:9j=2<72-;io776;o3af?4<3`3=6=4+1ca9=<=i9kh1?65`b583>!7ek3h87c?mb;28?jd5290/=om5b29m5gd=921dn=4?:%3ag?d43g;in7<4;nce>5<#9ki1n>5a1c`97>=hil0;6)?mc;`0?k7ej3>07bok:18'5ge=j:1e=ol55:9lef<72-;io7l<;o3af?0<3fki6=4+1ca9f6=i9kh1;65`a`83>!7ek3h87c?mb;:8?jg>290/=om5b29m5gd=121dm54?:%3ag?d43g;in7o4;nc4>5<#9ki1n>5a1c`9f>=hi<0;6)?mc;`0?k7ej3i07bo;:18'5ge=j:1e=ol5d:9le6<72-;io7l<;o3af?c<3fk96=4+1ca9f6=i9kh1j65`a083>!7ek3h87c?mb;33?>if83:1(<ll:c18j4de28;07b7i:18'5ge=j:1e=ol51398k<c=83.:nn4m3:l2fg<6;21d5i4?:%3ag?d43g;in7?;;:m:g?6=,8hh6o=4n0`a>43<3fhi6=4+1ca9f6=i9kh1=;54occ94?"6jj0i?6`>bc823>=hj00;6)?mc;`0?k7ej3;376am8;29 4dd2k90b<lm:0;8?jd0290/=om5b29m5gd=9h10co850;&2ff<e;2d:no4>b:9lf0<72-;io7l<;o3af?7d32ei=7>5$0``>g5<f8hi6<j4;nc5>5<#9ki1n>5a1c`95`=<g0h1<7*>bb8a7>h6jk0:j65`e083>!7ek3o;7c?mb;28?jba290/=om5e19m5gd=921dhh4?:%3ag?c73g;in7<4;nfg>5<#9ki1i=5a1c`97>=hl<0;6)?mc;f7?k7ej3:07bj<:18'5ge=l=1e=ol51:9l`4<72-;io7j;;o3af?4<3fn;6=4+1ca9`1=i9kh1?65`cg83>!7ek3n?7c?mb;68?jeb290/=om5d59m5gd==21doi4?:%3ag?b33g;in784;na`>5<#9ki1h95a1c`93>=hkk0;6)?mc;f7?k7ej3207bmn:18'5ge=l=1e=ol59:9lg<<72-;io7j;;o3af?g<3fi36=4+1ca9`1=i9kh1n65`c783>!7ek3n?7c?mb;a8?je2290/=om5d59m5gd=l21do94?:%3ag?b33g;in7k4;na0>5<#9ki1h95a1c`9b>=hk;0;6)?mc;f7?k7ej3;;76al1;29 4dd2m>0b<lm:038?je7290/=om5d59m5gd=9;10coh50;&2ff<c<2d:no4>3:9lf`<72-;io7j;;o3af?7332eih7>5$0``>a2<f8hi6<;4;nf`>5<#9ki1h95a1c`953=<gmh1<7*>bb8g0>h6jk0:;65`d`83>!7ek3n?7c?mb;3;?>ic13:1(<ll:e68j4de28307bj7:18'5ge=l=1e=ol51`98ka1=83.:nn4k4:l2fg<6j21dh;4?:%3ag?b33g;in7?l;:mg6?6=,8hh6i:4n0`a>4b<3fi<6=4+1ca9`1=i9kh1=h54oca94?"6jj0o86`>bc82b>=hm?0;6)?mc;g6?k7ej3:07bk;:18'5ge=m<1e=ol51:9la6<72-;io7k:;o3af?4<3fo96=4+1ca9a0=i9kh1?65rb0d4>5<4290;w)?l7;37e>N3>;1C8864$023>40<ao>1<75ff483>>i6<<0;66sm1g:94?2=83:p(<m8:06`?M21:2B?955+112952=nn=0;66gi5;29?l`12900c<:::188yg4213:1?7>50z&2g2<6<h1C8;<4H57;?!7783;=7dh;:188mc3=831d=9;50;9~f73f290?6=4?{%3`3?73k2B?:?5G44:8 46728=0ek:50;9jb0<722cm:7>5;n371?6=3ty>:l4?:6y]13g<5;k:6k84=3c;>c1<5;k?6k94=3;f>c2<5;3h6k:4=3;g>c2<uz><47>564y]02g<V=<i7S;82:\635=Y<?k0R88k;_723>X2?81U9<64^414?[20?2T?;;5Q4678Z1133W><?6P;739]027<V==;7S:9f:?726<a:27?8h4;d:?700<3l27?8i4;d:?70f<3l27?9;4;d:?710<3l279hi4;e:?1`f<3m279ho4;e:?1`d<3m279h44;e:?1b5<3m279ik4;e:?1a`<3m279ii4;e:?1af<3m278;o4;e:?03d<3m278;44;e:?03=<3m278;:4;e:?0<`<3m2784i4;e:?0<f<3m2784o4;e:?0<d<3m278=:4;e:?050<3m278=>4;e:?054<3m278<k4;e:?04a<3m278<o4;e:?04<<3m278n:4;e:?0f0<3m278n>4;e:?0f4<3m278mk4;e:?0ea<3m278mo4;e:?0e<<3m27?8<4>c49>017=9j<019:>:57`?823932270:;1;:4?823932>70:;1;:7?823932870:;1;:1?823932:70:;1;:3?82393=m70:;1;5f?82393=o70:;1;5`?82393=j70:;1;5:?82393=370:;1;54?82393==70:;1;56?82393=?70:;1;50?82393=970:;1;52?823933;70:;1;:e?823932n70:;1;:g?823932h70:;1;:a?823932j70:;1;:5?82393=i70:;1;53?823933j70:;1;;;?823933<70:;1;;5?xu2>j0;6>uQ57a8912b28ho70:;5;3a`>{t=9o1<7<t^42f?84f>3;ii6s|59594?5|V<2<70=6f;d7?85>m3l?7p}:5783>3`|V<?=70:;7;61?823>3>970:;5;61?823l3>970:;c;61?84al3>970<l3;61?84d<3>970<l5;61?84d>3>970<l7;61?84d03>970<l9;61?84di3>970<lb;61?843j3>970<;a;61?84313>970<;8;61?843?3>970<;6;61?843=3>970<;4;61?843;3>970<63;61?84>:3>970<61;61?84>83>970<7f;61?84?m3>970<7d;61?84?k3>970<7b;61?84?93>970<70;61?840n3>970<8e;61?840l3>970<8c;61?840j3>970<8a;61?84013>970<?d;61?847k3>970<?b;61?847i3>970<?9;61?84703>970<?7;61?847>3>970<?5;61?854<3>970=<3;61?854:3>970=<1;61?85483>970==f;61?855l3>970==c;61?855m3>970=;6;61?853=3>970=;4;61?853;3>970=;2;61?85393>970=;0;61?854n3>970=<e;61?84f:3>970<6f;61?84f>3>970<n5;61?826>3>970:>5;61?826<3>970:>3;61?826:3>970:>1;61?827n3>970:?e;61?827l3>970:?c;61?827j3>970:?a;61?82713>970:?8;61?827?3>970:?6;61?827<3>970:?3;61?827:3>970:?1;61?82783>970=if;61?85am3>970=id;61?85ak3>970=ib;61?826k3>970:>b;61?826i3>970:>9;61?82603>970:>7;61?82683>970:?5;61?85ai3>970=i9;61?82393>37p}:1583>7}Y=8>01>7l:0`f?xu2?:0;68?t^450?82283>970:;e;61?823n3>970::6;61?822=3>970=6c;61?85>j3>970=91;61?851:3>970=93;61?851<3>970=95;61?851>3>970=97;61?85103>970=99;61?87b13>970?j8;61?87b?3>970?j6;61?87b=3>970?j4;61?87b;3>970?j2;61?87b93>970<<1;61?84483>970<=f;61?845m3>970<=d;61?845k3>970<=b;61?845i3>970<=9;61?846n3>970<>e;61?846l3>970<>c;61?846j3>970<>a;61?84613>970<>8;61?846?3>970<9f;61?841m3>970<9d;61?841k3>970<9b;61?841i3>970<99;61?84103>970<97;61?85c<3>970=k3;61?85c:3>970=k1;61?85c83>970=lf;61?85dl3>970=lc;61?85dm3>970=j0;61?85cm3>970=kf;61?85b93>970=j2;61?85b;3>970=j4;61?85b=3>970=j6;61?85a03>970=i7;61?85a>3>970=i5;61?85a<3>970=i3;61?85a:3>970=i1;61?85a83>970:;1;64?xu20?0;6?uQ56a8960>28hn7p}:8583>7}Y=>h01>87:0`f?xu20:0;6?uQ56c8960028hn7p}:8383>7}Y=>301>89:0`f?xu2080;6?uQ56:8960228hn7p}:8183>7}Y=>=01>8;:0`f?xu2?o0;6?uQ5648960428hn7p}:7d83>7}Y=>?01>8=:0`f?xu2?m0;6?uQ5668960628hn7p}:0483>7}Y<l;019?9:0`f?xu28:0;6?uQ4d28917228hn7p}:0383>7}Y<ml019?;:0`f?xu2880;6?uQ4eg8917428hn7p}:0183>7}Y<mn019?=:0`f?xu3no0;6?uQ4ea8917628hn7p};fe83>7}Y<mk019>i:0`f?xu3nj0;6?uQ4e;8916b28hn7p};fc83>7}Y<m2019>k:0`f?xu3nh0;6?uQ4e58916d28hn7p};f883>7}Y<m<019>m:0`f?xu3n10;6?uQ4e78916f28hn7p};f683>7}Y<m>019>6:0`f?xu3n?0;6?uQ4e18916?28hn7p};f483>7}Y<m8019>8:0`f?xu3n=0;6?uQ4e38916128hn7p};f383>7}Y<jl019>;:0`f?xu3n80;6?uQ4bg8916428hn7p};f183>7}Y<jn019>=:0`f?xu3mo0;6?uQ4ba8916628hn7p};ed83>7}Y<jh019>?:0`f?xu3mm0;6?uQ4bc896`a28hn7p};eb83>7}Y<j301>hj:0`f?xu3mk0;6?uQ4b:896`c28hn7p};e`83>7}Y<j=01>hl:0`f?xu3m00;6?uQ4b4896`e28hn7p}:0b83>7}Y<l=019?l:0`f?xu28k0;6?uQ4d48917e28hn7p}:0`83>7}Y<l?019?n:0`f?xu2800;6?uQ4d68917>28hn7p}:0983>7}Y<l9019?7:0`f?xu28>0;6?uQ4d08917028hn7p}:0783>7}Y<mh019??:0`f?xu3nl0;6?uQ4e28916228hn7p};f283>7}Y<j?01>hn:0`f?xu3m10;6?uQ4b6896`>28hn7p}:6883>7}Y=<l01?mm:0`f?xu2>>0;6?uQ54g897ef28hn7p}:6783>7}Y=<n01?m6:0`f?xu2><0;6?uQ54a897e?28hn7p}:6583>7}Y=<h01?m8:0`f?xu2>:0;6?uQ54c897e128hn7p}:6383>7}Y=<301?m::0`f?xu2>80;6?uQ54:897e328hn7p}:6183>7}Y=<=01?m<:0`f?xu3jj0;6?uQ48:8912620?0q~:ma;296~X31>1689?5699~w1d>2909wS:66:?704<1>2wx8o650;0xZ1?234>?=78;;|q7f2<72;qU84:4=562>35<uz>i:7>52z\7=6=:<=;1:?5rs5`7>5<5sW>2=63;40855>{t<k91<7<t^5;3?82393<;7p};b383>7}Y<1l019:>:4d8yv2e93:1>vP;8d9>017=1:1v9l?:181[2?l27?8<4:e:p0d`=838pR96l;<675?3c3ty?mh4?:3y]0=d<5=>:68m4}r6b`?6=:rT?4l5245391g=z{=kh6=4={_6;=>;3<80>56s|4``94?4|V=2370:;1;7;?xu3i00;6?uQ494891262<=0q~:n8;296~X30<1689?5579~w1g02909wS:74:?704<>:2wx8l850;0xZ1>434>?=7;:;|q7e0<72;qU85<4=562>02<uz>j87>52z\7<4=:<=;19>5rs5c0>5<5sW>3<63;40866>{t<h81<7<t^55e?82393?:7p};a083>7}Y<>o019:>:428yv2f83:1>vP;7e9>017=>o1v9m<:181[2>m27?8<49e:p0f4=838pR97k;<675??63ty?o<4?:3y]0<e<5=>:6;j4}r6`4?6=:rT?5o5245392f=z{=hm6=4={_6:e>;3<80=n6s|4cg94?4|V=3270:;1;4b?xu3jm0;6?uQ480891262?30q~:m5;296~X30>1689?5649~w1gf2909wS:8c:?704<2i2wx84h50;0xZ11e34>?=7:i;|q217<72lq68;:51c;897g>2=<01?ln:54896202=<01>;7:54897b>2=<01?kl:54896102=<01>6n:548967>2=<01>>6:54896d>2=<01>o6:54891262l=0q~:;6;297~;3<>0?h63;4782f`=:<=?1895rs564>5<5s4>?;7?me:?70<<a<2wx89h50;1x91372=n019:j:568912a28hn7p};5183>7}:<<:1=ok4=571>c2<uz>?97>53z?703<3l27?884>bd9>01?=n<1v9:j:180823m3;ii63;4g87`>;3=;0m96s|45:94?5|5=>o6<lk;<67g?7el27?844>b69~w12e2909=v3;4e82f`=::on1=oj4=3a0>1?<5;i?6974=3a6>1?<5;i=6974=3a4>1?<5;i36974=3a:>1?<5;ij6974=3aa>1?<5:9?6974=210>1?<5:996974=212>1?<5:9;6974=20e>1?<5:8o6974=20`>4dc3499i7:6;<172?2>349?97:6;<170?2>349??7:6;<176?2>349?=7:6;<174?2>3498j7:6;<10a?2>348j>7:6;<0:b?2>348j:7?md:?1e0<6jm1v9:n:1811~;3<j0:nh5225`90<=::=k1845225;90<=::=21845225590<=::=<1845225790<=::=>1845225190<=::091845228090<=::0;1845228290<=::1l1845229g90<=::1n1845229a90<=::1h1845229390<=::1:1845226d90<=::>o1845226f90<=::>i1845226`90<=::>k1845226;90<=::9n1845221a90<=::9h1845221c90<=::931845221:90<=::9=1845221490<=::9?1845rs572>5<4s4>>:7?md:?710<6jm1688<51c58yv22<3:1>:u244495gc<5:3h6<lk;<1:f?7el278:<4;9:?027<31278:>4;9:?021<31278:84;9:?023<31278::4;9:?02=<31278:44;9:?0`1<31278h>4;9:?0`7<31278h<4;9:?0`5<31278ok4;9:?0ga<6jm16?nm5489>7fc=<016?h>5489>7ac=9kn01>ji:5;896c62=301>k=:5;896c42=301>k;:5;896c22=301>k9:5;896`?2=301>h8:5;896`12=301>h::5;896`32=301>h<:5;896`52=301>h>:5;896`72=30q~::3;2960}:<<?1=ok4=0g:>1?<58o36974=0g4>1?<58o=6974=0g6>1?<58o?6974=0g0>1?<58o96974=0g2>1?<5;9:6974=313>1?<5;8m6974=30f>1?<5;8o6974=30`>1?<5;8i6974=30b>1?<5;826974=33e>1?<5;;n6974=33g>1?<5;;h6974=33a>1?<5;;j6974=33:>1?<5;;36974=334>1?<5;<m6974=34f>1?<5;<o6974=34`>1?<5;<i6974=34b>1?<5;<26974=34;>1?<5;<<6974}r0ea?6=:r79ji4;d:?1bc<6j>1v?hk:18784al3;ii63=a58e0>;51j0m963=9e8e1>{t:ji1<7<t=3a0>1b<5;hj6<l8;|q1ga<72;q6>n:54e9>6gd=9k=0q~<le;296~;5k<0?h63=bb82f2=z{;im6=4={<0`2?2c348ih7?m7:p6a6=838p1?m8:5f897db28h<7p}=d083>7}::j218i522cd95g1<uz8o>7>52z?1g<<3l279o=4>b69~w7b42909w0<la;6g?84d93;i;6s|2e694?4|5;ii69j4=3a1>4d03ty85i4?:2y>7<e=<m16?4l54e9>7<c=9k=0q~=6b;297~;41k0:nh5238d9b0=:;0o1j85rs24b>5<5s49==7:k;<16<?7e?2wx?;l50;0x96052=n01>;6:0`4?xu4>j0;6?u237190a=:;<k1=o94}r15`?6=:r78:94;d:?01g<6j>1v>8j:181851=3>o70=:c;3a3>{t;?l1<7<t=245>1b<5:?o6<l8;|q035<72;q6?;954e9>70c=9k=0q~=81;296~;4>10?h63<5g82f2=z{:=96=4={<15=?2c349=<7?m7:p66g=83?p1?l>:g6897g>2=o01?:<:0`f?84a>3l<70<j3;d7?xu4;<0;68u22c39b0=:;:o1=ok4=0ae>c3<5;o86k84=562>63<uz8i=7>53z?1f4<6j>16>l751b2897df28>?7p}=a883>6}::h31=o94=3cb>10<5;hi6984}r00f?6==r79n?4i4:?1ed<3m279894>bd9>6c0=n<16>h=5f49~w651290=w0<m2;d6?854n3;ii63>cg8e0>;6kl0m963=e28e3>;3<808:6s|2c094?5|5;h96<l8;<0be?7d8279no4>459~w7gf2908w0<na;3a3>;5ik0?:63=bb872>{t::i1<7;t=3`0>c2<5;ki69k4=366>4db348m;7h8;<0f0?`33ty8?:4?:7y>6g5=n<16?9>51cg894eb2o>01<mk:g7897c32o<019:>:258yv4e;3:1?v3=b282f2=::hh1=n>4=3``>4233ty9mo4?:2y>6dd=9k=01?ol:54897dc2=<0q~<<d;291~;5j=0m863=ab87a>;5<?0:nh522g59b0=::l>1j85rs21;>5<1s48i87h:;<175?7em27:oi4i4:?2gf<a=279i94i7:?704<402wx>o:50;1x97d328h<70<nc;3`4>;5jm0:895rs3c`>5<4s48jo7?m7:?1ea<3>279nh4;6:p66c=83?p1?l::g6897gc2=o01?:8:0`f?84a03l<70<j5;d7?xu4;00;6;u22c79b0=:;=81=ok4=0a`>c2<58ii6k;4=3g6>c0<5=>:6>74}r0a1?6=;r79n84>b69>6db=9j:01?lj:067?xu5im0;6>u22`f95g1<5;kn6984=3`e>10<uz88j7>55z?1f3<a<279mh4;e:?10=<6jl16>k65f49>6`3=n<1v>=n:18584e>3l>70=;3;3aa>;6kk0m863>c`8e1>;5m<0m;63;4080e>{t:k<1<7=t=3`5>4d0348ji7?l0:?1fc<6<=1v?oj:18084fm3;i;63=ag872>;5k90?:6s|25294?3|5;h<6k:4=3ce>1c<5;>26<lj;<0e=?`0348n:7h;;|q07g<72?q6>o95f49>712=9ko01<mn:g6894e>2o?01?k9:g4891262:h0q~<m7;297~;5j>0:n:522`d95f6<5;i;6<:;;|q1ec<72:q6>lh51c5897d72=<01?m>:548yv4393:19v3=b98e0>;5j90?i63=4`82f`=::o31j8522d49b0=z{:9h6=49{<0a<?`2349?97?me:?2g<<a<27:o54i5:?1a3<a?27?8<4<c:p6g>=839p1?l7:0`4?84e83;h<63=c08201=z{;h;6=4={<0a4?7e?279o?4;6:p614=83>p1?l6:g68972e28hn70<ia;d7?84b?3l?7p}<3e83>3}::k31j85221f90a=:;=<1=ok4=0a;>c2<5;o<6k;4=562>6c<uz8i57>52z?1f<<6j>16>n<51568yv5b?3:19v3<4g8e0>;4<>0?i63<f182f`=:9m=1j85245396g=z{8n36=4;{<17b?`234;n=7?me:?0=1<a?2784<4i7:p71`=839p1>:i:0`4?853?3;h<63<598201=z{:><6=4<{<173?7e?278854;6:?01<<3>2wx=i750;6x96372o>01<k=:0`f?85><3l>70=71;d6?xu4m10;6;u23429b0=:;=218h523g395gc<58n<6k:4=0f5>c3<5=>:6?m4}r164?6=;r789=4>b69>71>=9j:01>;6:067?xu4<10;6>u235:95g1<5:>26984=27b>10<uz9n57>56z?014<a<278844;e:?0b7<6jl16=i85f59>5a3=n<1689?52e9~w4bf290?w0=:1;d6?87b;3;ii63<948e3>;40;0m;6s|34394?5|5:?:6<l8;<17=?7d82789l4>459~w62>2908w0=;9;3a3>;4<h0?:63<5c872>{t9mh1<7:t=271>c2<58o?6<lj;<1:1?`23493>7h:;|q0ad<72?q6?8<5f49>71g=<l16?k=51cg894b22o>01<j;:g7891262;o0q~=:2;297~;4=;0:n:5235c95f6<5:?i6<:;;|q00d<72:q6?9o51c58962e2=<01>;l:548yv5bj3:1:v3<528e0>;4<k0?i63<f582f`=:9m>1j9521e19b0=:<=;1>k5rs0f`>5<3s49>?7h:;<3f1?7em2785;4i7:?0<6<a?2wx?8=50;1x963428h<70=;b;3`4>;4=j0:895rs26a>5<4s49?n7?m7:?00f<3>2789i4;6:p5ab=83>p1>;;:g6894c128hn70=66;d6?85?;3l>7p}<eb83>3}:;<>1j85235a90`=:;o?1=ok4=0f0>c2<58n96k;4=562>66<uz9>87>53z?011<6j>16?9m51b28963c28>?7p}<4b83>6}:;=i1=o94=26g>10<5:?n6984}r3ga?6=<r78984i4:?2a2<6jl16?495f69>7=2=n>1v>kk:185852=3l>70=;d;6f?85a>3;ii63>d38e0>;6l80m963;40805>{t;<?1<7=t=276>4d0349?h7?l0:?01`<6<=1v>:k:180853l3;i;63<4d872>;4=o0?:6s|1ed94?2|5:?=6k:4=0g;>4db3492;7h:;<1;0?`23ty8ih4?:7y>700=n<16?9k54d9>7c1=9ko01<j>:g6894b72o?019:>:208yv52>3:1?v3<5782f2=:;=o1=n>4=27e>4233ty88h4?:3y>71c=9k=01>8?:548yv5bn3:19v3<568e0>;5>o0?h63<f982f`=:9m:1j952453971=z{8o;6=4;{<163?`234;n57?me:?0==<a=278484i5:p701=838p1>;8:0`4?85183;?86s|2e:94?4|5;no6984=3f`>4d03ty9i?4?:3y>6ab=9j:01?k8:0`4?xu5nk0;6?u22ef95g1<5;lm6k84}r0g3?6=:r79hn4;6:?1`g<6j>1v?k>:18184ck3;h<63=e782f2=z{;n=6=4={<0gf?21348om7?m7:p6`6=838p1?jm:0a3?84b=3;i;6s|2e794?4|5;nj6984=3f:>4d03ty9hk4?:3y>6ag=9j:01?k;:0`4?xu5ll0;6?u22e;95f6<5;o86<l8;|q1ag<72;q6>k>5479>6``=9k=0q~<i5;296~;5n90:o=522gc95g1<uz8mo7>52z?1b5<6j>16>kh5f49~w7cf2909w0<jf;65?84bm3;i;6s|2g694?4|5;om6<m?;<0e=?7e?2wx>h750;0x97cb2=<01?kk:0`4?xu5n:0;6?u22dg95f6<5;l36<l8;|q1a=<72;q6>hj5479>6`e=9k=0q~<i2;296~;5mm0:o=522g595g1<uz8m=7>52z?1af<6k916>k851c58yv50>3:1>v3<7c872>;4?h0:n:5rs2:3>5<5s49<n7?l0:?0<0<6j>1v>76:181850j3;i;63<9d8e2>{t;>?1<7<t=25b>10<5:=26<l8;|q03c<72;q6?:o51b2896>328h<7p}<7583>7}:;>318;5236:95g1<uz9<i7>52z?03<<6k916?5=51c58yv50;3:1>v3<79872>;4?>0:n:5rs25g>5<5s49<47?l0:?0<7<6j>1v>9l:181850?3;h<63<8082f2=z{:226=4={<1;a?213493h7?m7:p7<5=838p1>6j:0a3?85>03;i;6s|38c94?4|5:2n6<l8;<1:a?`03ty8454?:3y>7=b=<?16?5m51c58yv5>:3:1>v3<8e82g5=:;0=1=o94}r1;3?6=:r784n4;6:?0<g<6j>1v>7>:18185?k3;h<63<9782f2=z{:2=6=4={<1;f?213493m7?m7:p7<6=838p1>6m:0a3?85>=3;i;6s|39d94?4|5:2j6<m?;<1:0?7e?2wx>?650;7x94c>2=n01?=>:0`f?87bj3l>70?jd;d7?87bn3l<7p}>e`83>7}:9l218i521d`95g1<uz;no7>52z?2a2<3l27:ii4>b69~w4cb290<w0?j6;6g?87bn3;i;63>f08e1>;6n:0m:63>f48e3>;6n00m;63>fc8e3>{t9o:1<7<t=0g6>1b<58l:6<l8;|q2b7<72;q6=h:54e9>5c5=9k=0q~?i4;296~;6m:0?h63>f482f2=z{8l=6=4={<3f6?2c34;m57?m7:p5cg=838p1<k>:5f894`e28h<7p}=8`83>0}::=h18i5228195gc<5;>o6k;4=36e>c2<5;?:6k94}r07g?6=:r798l4;d:?10a<6j>1v?:j:18184313>o70<;f;3a3>{t:<:1<79t=36;>1b<5;?:6<l8;<067?`2348>97h9;<063?`0348>n7h8;<06`?`03ty99?4?:3y>611=<m16>8=51c58yv42<3:1>v3=4787`>;5=<0:n:5rs375>5<5s48?97:k;<063?7e?2wx>8650;0x97232=n01?;m:0`4?xu5=j0;6?u225190a=::<n1=o94}r04<?6=:r795>4;d:?1<4<6jl1v?98:18184>:3>o70<70;3aa>{t:131<7:t=3;1>4db348?h7h;;<07b?`2348>=7h9;|q133<72;q6>4?54e9>62`=9ko0q~<78;297~;5180:nh5225d9b3=::<;1j85rs356>5<5s482<7:k;<04a?7em2wx>5950;0x97?728hn70<:1;d7?xu5?=0;6?u229d90a=::>n1=ok4}r0;2?6=>r794k4>bd9>605=n=16>8;5f49>601=n?16>8l5f49>60b=n<1v?9<:18184?m3>o70<8c;3aa>{t:1?1<7;t=3:f>4db348>97h;;<063?`2348>n7h;;<06`?`33ty9;?4?:3y>6=b=<m16>:l51cg8yv4?<3:18v3=8e82f`=::<=1j95224;9b0=::<k1j;5rs352>5<5s483o7:k;<04e?7em2wx>5=50;1x97>d28hn70<:9;d7?842i3l>7p}=7183>7}::1h18i5226;95gc<uz83>7>52z?1<g<6jl16>8o5f59~w7712909w0<<1;6g?846n3;ii6s|20794?4|5;9;69j4=33f>4db3ty9>:4?:5y>666=9ko01<km:g6894cc2o?01<ki:g48yv46<3:1>v3=2g87`>;59m0:nh5rs305>5<4s489j7?me:?2aa<a>27:ik4i5:p645=838p1?<j:5f8977d28hn7p}=2483>7}::;o1=ok4=0ge>c2<uz8:>7>52z?16a<3l279=o4>bd9~w743290=w0<=d;3aa>;6n80m863>f28e1>;6n<0m:63>f88e1>;6nk0m96s|20394?4|5;8h69j4=33b>4db3ty9>>4?:4y>67e=9ko01<h<:g6894`22o?01<h6:g6894`e2o>0q~<>0;296~;5:k0?h63=1882f`=z{;896=4;{<01f?7em27:j84i4:?2b2<a=27:j54i6:p65`=838p1?<n:5f8977?28hn7p}=2083>6}::;k1=ok4=0d4>c2<58l36k;4}r03a?6=:r79>44;d:?152<6jl1v?<?:18184513;ii63>f98e0>{t:?<1<7<t=3:2>1b<5;<m6<lj;|q120<72;q6>5>54e9>63c=9ko0q~<94;296~;5?o0?h63=6e82f`=z{;<86=4={<04a?2c348=o7?me:p634=838p1?9k:5f8970e28hn7p}=6083>7}::>i18i5227c95gc<uz8=<7>52z?13g<3l279:44>bd9~w73a2909w0<8a;6g?84103;ii6s|24g94?4|5;=269j4=344>4db3ty9<94?:3y>64`=<m16>=j51cg8yv47;3:1>v3=1d87`>;58j0:nh5rs321>5<5s48:h7:k;<03f?7em2wx>=?50;0x977d2=n01?>n:0`f?xu5890;6?u220`90a=::931=ok4}r3eb?6=:r79=l4;d:?14=<6jl1v<hj:18184613>o70<?7;3aa>{t9on1<7<t=33;>1b<5;:=6<lj;|q2bf<72;q6><954e9>653=9ko0q~<<2;296~;58j0?h63>c982f2=z{;986=4={<03f?2c34;h57?m7:p662=838p1?>n:5f894ef28h<7p}=3483>7}::9318i521b`95g1<uz88:7>52z?14=<3l27:on4>b69~w7502909w0<?7;6g?87dl3;i;6s|22:94?4|5;:=69j4=0af>4d03ty9?44?:3y>653=<m16=nh51c58yv4><3:1>v3=6d87`>;6l90:n:5rs3;6>5<5s48=h7:k;<3g5?7e?2wx>4850;0x970d2=n01<j=:0`4?xu51>0;6?u227`90a=:9m91=o94}r0:<?6=:r79:l4;d:?2`1<6j>1v?76:18184113>o70?k5;3a3>{t:0k1<7<t=34;>1b<58n=6<l8;|q1=g<72;q6>;954e9>5a1=9k=0q~<6c;2951}:;:>18952321901=:;:818952323901=:;::1895233d901=:;;n1895233a901=:;;o18952354901=:;=?18952356901=:;=918952350901=:;=;18952352901=:;:l1895232g901=::ol1j95228f95g1<uz9;47>52z?071<3l278><4>b69~w64e290?w0=<4;3aa>;4<?0?h63=f`8e1>;4:;0m86s|31594?4|5:9869j4=203>4d03ty8>l4?:5y>765=9ko01>:::5f897`>2o>01>?7:g68yv57>3:1>v3<3387`>;49o0:n:5rs20:>5<3s498>7?me:?001<3l279j44i6:?053<a<2wx?=;50;0x96562=n01>?j:0`4?xu4:10;69u232395gc<5:>869j4=3d;>c2<5:;?6k:4}r130?6=:r78?=4;d:?05a<6j>1v><8:18785483;ii63<4387`>;5n10m:63<138e0>{t;991<7<t=20e>1b<5:;h6<l8;|q063<72=q6??h51cg896262=n01?h8:g6896772o>0q~=?1;296~;4:m0?h63<1`82f2=z{:8?6=4;{<11`?7em278?k4;d:?1b3<a<278<n4i4:p756=838p1><l:5f8967>28h<7p}<2283>1}:;;i1=ok4=21f>1b<5;l=6k84=22b>c2<uz9;>7>52z?06`<3l278=o4>b69~w642290?w0==e;3aa>;4<90?h63=f68e2>;48l0m86s|30594?4|5:8:6984=234>4d03ty8>?4?:3y>777=9=>01><=:0`4?xu49<0;6>u2332903=:;8=18;5230795g1<uz9:47>53z?065<6<=16?<951b28967?28h<7p}<1283>6}:;8l18;52307903=:;891=o94}r122?6=;r78=k4>459>743=9j:01>?9:0`4?xu4980;6>u230g903=:;8918;5230395g1<uz9:87>53z?05`<6<=16?<=51b28967328h<7p}<0g83>6}:;8n18;52303903=:;9l1=o94}r126?6=;r78=i4>459>747=9j:01>?=:0`4?xu48m0;6>u230a903=:;9l18;5231f95g1<uz9:<7>53z?05f<6<=16?=h51b28967728h<7p}<0c83>6}:;8h18;5231f903=:;9h1=o94}r13a?6=;r78=o4>459>75b=9j:01>>j:0`4?xu4800;6>u230c903=:;9h18;5231;95g1<uz9;o7>53z?05d<6<=16?=l51b28966d28h<7p}<0`83>6}:;831=9:4=22:>4e7349;m7?m7:p6d5=838p1?o=:5f897g328h<7p}=a383>2}::h81=ok4=3c2>c3<5;k36k84=3c7>c0<5;3n6k84=3;`>c1<5;3o6k94}r0b4?6=:r795k4;d:?1e4<6j>1v?7i:18484>n3;ii63=a08e0>;5i10m963=a58e1>;51l0m963=9b8e2>;51m0m:6s|2`594?5|5;k=69j4=3c6>1b<5;k36<l8;|q1e0<72;q6>l;51cg897g?2o>0q~:;4;295a}:;m>189523e1901=:;m8189523e3901=:;m:189523bd901=:;jn189523ba901=:;jo189523d2901=:;mo189523ed901=:;l;189523d0901=:;l9189523d6901=:;l?189523d4901=:;o2189523g5901=:;o<189523g7901=:;o>189523g1901=:;o8189523g3901=:;o:1895238d95g1<5=>:69;m;|q0e=<72;q6?i:54e9>7f7=9k=0q~=lb;290~;4l=0:nh523d490a=:;021j9523b09b1=z{:k<6=4={<1g7?2c349h<7?m7:p7fg=83>p1>j<:0`f?85b=3>o70=67;d7?85e03l?7p}<a783>7}:;m818i523cd95g1<uz9h57>54z?0`7<6jl16?h:54e9>7<1=n?16?o85f59~w6g22909w0=k1;6g?85em3;i;6s|3b:94?2|5:n:6<lj;<1f7?2c3492:7h;;<1a0?`33ty8m94?:3y>7a6=<m16?oj51c58yv5d?3:18v3<d182f`=:;l818i523849b3=:;k81j95rs2c0>5<5s49hj7:k;<1ag?7e?2wx?n850;6x96ea28hn70=j1;6g?85>=3l?70=m0;d7?xu4i80;6?u23bf90a=:;kk1=o94}r1`0?6=<r78oi4>bd9>7a`=<m16?4:5f59>7de=n=1v>o?:18185dk3>o70=m9;3a3>{t;j91<7:t=2a`>4db349oi7:k;<1:0?`1349jm7h;;|q0e7<72;q6?nk54e9>7gd=9k=0q~=l5;290~;4kl0:nh523d290a=:;0?1j;523`g9b1=z{:h<6=4={<1`5?21349i;7?m7:p7f4=838p1>m>:067?85d:3;i;6s|3c794?5|5:i;6984=2`4>10<5:h>6<l8;|q0f=<72:q6?n>5156896d028i;70=m8;3a3>{t;k91<7=t=2`e>10<5:h>6984=2`0>4d03ty8n;4?:2y>7g`=9=>01>l::0a3?85e>3;i;6s|3c394?5|5:hn6984=2`0>10<5:h:6<l8;|q0f1<72:q6?ok5156896d428i;70=m4;3a3>{t;hl1<7=t=2`g>10<5:h:6984=2ce>4d03ty8n?4?:2y>7gb=9=>01>l>:0a3?85e:3;i;6s|3`f94?5|5:hh6984=2ce>10<5:ko6<l8;|q0f5<72:q6?om5156896ga28i;70=m0;3a3>{t;hh1<7=t=2`a>10<5:ko6984=2ca>4d03ty8mh4?:2y>7gd=9=>01>ok:0a3?85fm3;i;6s|3`;94?5|5:hj6984=2ca>10<5:k26<l8;|q0ef<72:q6?oo5156896ge28i;70=nc;3a3>{t;hk1<7=t=2`:>423349j57?l0:?0ed<6j>1v>j8:18085b83;ii63<f387`>;40;0m:6s|3e794?5|5:nn6<lj;<1e4?2c3493=7h9;|q0`3<72:q6?ih51cg896`62=n01>6>:g68yv5c03:1?v3<e082f`=:;o918i523909b1=z{:n26=4<{<1f6?7em278j94;d:?0<6<a>2wx?io50;1x96c428hn70=i5;6g?85?;3l?7p}<dc83>6}:;l>1=ok4=2d5>1b<5:2?6k84}r1gg?6=;r78i84>bd9>7c1=<m16?5:5f59~w6bc2908w0=j6;3aa>;4n10?h63<848e0>{t<=91<7<:{<622?2334>:97:;;<620?2334>:?7:;;<626?2334>:=7:;;<63b?2334>;i7:;;<63`?2334>;o7:;;<63f?2334>;m7:;;<63=?2334>;47:;;<633?2334>;:7:;;<630?2334>;?7:;;<636?2334>;=7:;;<634?23349mj7:;;<1ea?23349mh7:;;<1eg?23349mn7:;;<62g?2334>:n7:;;<62e?2334>:57:;;<62<?2334>:;7:;;<624?2334>;97:;;<1ee?23349m57:;;<0:a?7e?2wx8>750;0x91712=n019:>:d48yv2403:1>v3;1487`>;3<80o96s|42594?4|5=;?69j4=562>a5<uz>8:7>52z?756<3l27?8<4k1:p063=838p19?=:5f891262m:0q~:<4;296~;3980?h63;408`b>{t<:81<7<t=52e>1b<5=>:6nk4}r605?6=:r7?<h4;d:?704<dl2wx8>>50;0x916c2=n019:>:ba8yv25n3:1>v3;0b87`>;3<80n86s|43g94?4|5=:i69j4=562>fd<uz>9h7>52z?74d<3l27?8<4la:p07e=838p19>6:5f891262j30q~:=b;296~;3810?h63;408`<>{t<;k1<7<t=524>1b<5=>:6n84}r61=?6=:r7?<;4;d:?704<d=2wx8?950;0x91632=n019:>:b68yv25>3:1>v3;0287`>;3<80h?6s|43794?4|5=:969j4=562>`5<uz>987>52z?744<3l27?8<4l2:p075=838p19>?:5f891262j;0q~:=2;296~;4no0?h63;408`4>{t<;;1<7<t=2df>1b<5=>:6oh4}r614?6=:r78ji4;d:?704<em2wx8<h50;0x96`d2=n019:>:cf8yv26m3:1>v3<fc87`>;3<80oo6s|45294?4|5=;h69j4=562>ad<uz>8j7>52z?75g<3l27?8<4j2:p06c=838p19?n:5f891262mk0q~:<d;296~;3900?h63;408g=>{t<:i1<7<t=53;>1b<5=>:6i64}r60f?6=:r7?=:4;d:?704<c?2wx8>o50;0x91772=n019:>:e48yv24;3:1>v3;0487`>;3<80o>6s|43:94?4|5:lj69j4=562>f1<uz>:h7>52z?0b<<3l27?8<4mc:p014=838p1?7l:0`4?82393o37p}>a283>7}:9o31j;521g59513<uz;j97>52z?2bg<a>27:j54>449~w4g02909w0<:b;d5?84213;?96s|1`;94?4|5;?o6k84=37b>4223twx8om50;0xZ1??34>;6977;%663?7fl2wx8oo50;0xZ1?034>;6978;%663?7fm2wx8o750;0xZ1?134>;6979;%663?7fn2wx8o650;0xZ1?234>;697:;%663?7e82wx8o950;0xZ1?334>;697;;%663?72;2wx8o850;0xZ1?434>;697<;%663?72>2wx8o:50;0xZ1?634>;697>;%663?72k2wx8o=50;0xZ1?734>;697?;%663?71?2wx8o<50;0xZ1>a34>;696i;%663?70:2wx8o?50;0xZ1>b34>;696j;%663?70l2wx8o>50;0xZ1>c34>;696k;%663?7?<2wx8lh50;0xZ1>d34>;696l;%663?7?l2wx8lk50;0xZ1>e34>;696m;%663?7>=2wx8lj50;0xZ1>f34>;696n;%663?7>>2wx8lm50;0xZ1>>34>;6966;%663?7>?2wx8ll50;0xZ1>?34>;6967;%663?7>02wx8l750;0xZ1>134>;6969;%663?7>12wx8l650;0xZ1>234>;696:;%663?7>i2wx8l950;0xZ1>334>;696;;%663?7>j2wx8l850;0xZ1>434>;696<;%663?7>k2wx8l;50;0xZ1>534>;696=;%663?7>l2wx8l:50;0xZ1>634>;696>;%663?7>m2wx8l=50;0xZ1>734>;696?;%663?7>n2wx8l<50;0xZ11a34>;699i;%663?7f82wx8l?50;0xZ11b34>;699j;%663?7f92wx8l>50;0xZ11c34>;699k;%663?7f:2wx8n=50;0xZ1?b34>;697j;%663?7f;2wx8n<50;0xZ1?c34>;697k;%663?7f<2wx8n?50;0xZ1?d34>;697l;%663?7f=2wx8n>50;0xZ1?e34>;697m;%663?7f>2wx8oh50;0xZ1?f34>;697n;%663?7f?2wx8ok50;0xZ1?>34>;6976;%663?7f02wx8oj50;0xZ1?534>;697=;%663?7f12wx8o;50;0xZ1>034>;6968;%663?7fi2wx8lo50;0xZ11d34>;699l;%663?7fj2wx84h50;0xZ11e34>;699m;%663?7fk2wx98850;0xZ03134>;68;9;%663?7e92wx9;o50;0xZ00f34>;688n;%663?7e:2wx9;m50;0xZ00d34>;688l;%663?7e;2wx9:=50;0xZ01434>;689<;%663?72<2wx95950;0xZ0>034>;6868;%663?72=2wx9=;50;0xZ1c634>;69k>;%663?72?2wx9==50;0xZ1c734>;69k?;%663?7202wx9=<50;0xZ1ba34>;69ji;%663?7212wx9=?50;0xZ1bb34>;69jj;%663?72i2wx9=>50;0xZ1bc34>;69jk;%663?72j2wx8kh50;0xZ1bd34>;69jl;%663?72l2wx8kj50;0xZ1bf34>;69jn;%663?72m2wx8km50;0xZ1b>34>;69j6;%663?72n2wx8kl50;0xZ1b?34>;69j7;%663?7182wx8ko50;0xZ1b034>;69j8;%663?7192wx8k750;0xZ1b134>;69j9;%663?71:2wx8k650;0xZ1b234>;69j:;%663?71;2wx8k950;0xZ1b334>;69j;;%663?71<2wx8k850;0xZ1b434>;69j<;%663?71=2wx8k;50;0xZ1b534>;69j=;%663?71>2wx8k:50;0xZ1b634>;69j>;%663?7102wx8k<50;0xZ1ea34>;69mi;%663?7112wx8k?50;0xZ1eb34>;69mj;%663?71i2wx8k>50;0xZ1ec34>;69mk;%663?71j2wx8hh50;0xZ1ed34>;69ml;%663?71k2wx8hk50;0xZ1ee34>;69mm;%663?71l2wx8hj50;0xZ1ef34>;69mn;%663?71m2wx8hm50;0xZ1e>34>;69m6;%663?71n2wx8hl50;0xZ1e?34>;69m7;%663?7082wx8ho50;0xZ1e034>;69m8;%663?7092wx8h750;0xZ1e134>;69m9;%663?70;2wx9=m50;0xZ1c034>;69k8;%663?70<2wx9=l50;0xZ1c134>;69k9;%663?70=2wx9=o50;0xZ1c234>;69k:;%663?70>2wx9=750;0xZ1c334>;69k;;%663?70?2wx9=650;0xZ1c434>;69k<;%663?7002wx9=950;0xZ1c534>;69k=;%663?7012wx9=850;0xZ1be34>;69jm;%663?70i2wx8kk50;0xZ1b734>;69j?;%663?70j2wx8k=50;0xZ1e234>;69m:;%663?70k2wx8h650;0xZ1e334>;69m;;%663?70m2wx9=k50;0xZ06b34>;68>j;%663?70n2wx9<:50;0xZ07334>;68?;;%663?7?82wx9;750;0xZ03a34>;68;i;%663?7?92wx9;950;0xZ03b34>;68;j;%663?7?:2wx9;850;0xZ03c34>;68;k;%663?7?;2wx9;;50;0xZ03d34>;68;l;%663?7?=2wx9;:50;0xZ03e34>;68;m;%663?7?>2wx9;=50;0xZ03f34>;68;n;%663?7??2wx9;<50;0xZ03>34>;68;6;%663?7?02wx9;?50;0xZ03?34>;68;7;%663?7?12wx9;>50;0xZ03034>;68;8;%663?7?i2wx95850;0xZ01d34>;689l;%663?7?j2wx95:50;0xZ01e34>;689m;%663?7?k2wx95=50;0xZ01f34>;689n;%663?7?m2wx95<50;0xZ01>34>;6896;%663?7?n2wx95?50;0xZ01?34>;6897;%663?7>82wx95>50;0xZ01034>;6898;%663?7>92wx9:h50;0xZ01134>;6899;%663?7>:2wx9:k50;0xZ01234>;689:;%663?7>;2wx9:j50;0xZ01334>;689;;%663?7><2wvblj<:181M2202wemi:50;0xL13?3tdjh84?:3yK00><ugko:7>52zJ71==zfhn<6=4={I66<>{iim21<7<tH57;?xhfl00;6?uG44:8ykgci3:1>vF;599~jdbe2909wE::8:meae=838pD9;7;|lb`a<72;qC8864}ocga?6=:rB?955rn`fe>5<5sA>>46saad294?4|@=?37p`ne083>7}O<<20qcoj2;296~N3=11vblk<:181M2202wemh:50;0xL13?3tdji84?:3yK00><ugkn:7>52zJ71==zfho<6=4={I66<>{iil21<7<tH57;?xhfm00;6?uG44:8ykgbi3:1>vF;599~jdce2909wE::8:me`e=838pD9;7;|lbaa<72;qC8864}ocfa?6=:rB?955rn`ge>5<5sA>>46saag294?4|@=?37p`nf083>7}O<<20qcoi2;296~N3=11vblh<:181M2202wemk:50;0xL13?3tdjj84?:3yK00><ugkm:7>52zJ71==zfhl<6=4={I66<>{iio21<7<tH57;?xhfn00;6?uG44:8ykgai3:1>vF;599~jd`e2909wE::8:mece=838pD9;7;|lbba<72;qC8864}ocea?6=:rB?955rn`de>5<5sA>>46sab1294?4|@=?37p`m0083>7}O<<20qcl?2;296~N3=11vbo><:181M2202wen=:50;0xL13?3tdi<84?:3yK00><ugh;:7>52zJ71==zfk:<6=4={I66<>{ij921<7<tH57;?xhe800;6?uG44:8ykd7i3:1>vF;599~jg6e2909wE::8:mf5e=838pD9;7;|la4a<72;qC8864}o`3a?6=:rB?955rnc2e>5<5sA>>46sab0294?4|@=?37p`m1083>7}O<<20qcl>2;296~N3=11vbo?<:181M2202wen<:50;0xL13?3tdi=84?:3yK00><ugh::7>52zJ71==zfk;<6=4={I66<>{ij821<7<tH57;?xhe900;6?uG44:8ykd6i3:1>vF;599~jg7e2909wE::8:mf4e=838pD9;7;|la5a<72;qC8864}o`2a?6=:rB?955rnc3e>5<5sA>>46sab3294?4|@=?37p`m2083>7}O<<20qcl=2;296~N3=11vbo<<:181M2202wen?:50;0xL13?3tdi>84?:3yK00><ugh9:7>52zJ71==zfk8<6=4={I66<>{ij;21<7<tH57;?xhe:00;6?uG44:8ykd5i3:1>vF;599~jg4e2909wE::8:mf7e=838pD9;7;|la6a<72;qC8864}o`1a?6=:rB?955rnc0e>5<5sA>>46sab2294?4|@=?37p`m3083>7}O<<20qcl<2;296~N3=11vbo=<:181M2202we5=o50;3xL13?3td2:o4?:0yK00><ug3=o7>51z&20`<2>o1C8864}o;5`?6=9r.:8h4:6g9K00><ug3=i7>51z&20`<2>o1C8864}o;5b?6=9r.:8h4:6g9K00><ug3<<7>51z&20`<2>o1C8864}o;45?6=9r.:8h4:6g9K00><ug3<>7>51zJ71==zf0=86=4>{I66<>{i1>>1<7?tH57;?xh>?<0;6<uG44:8yk?0>3:1=vF;599~j<10290:wE::8:m=2>=83;pD9;7;|l:3<<728qC8864}o;4e?6=9rB?955rn85a>5<6sA>>46sa96a94?7|@=?37p`67e83>4}O<<20qc78e;295~N3=11vb49i:182M2202we55>50;3xL13?3td24<4?:0yK00><ug33>7>51zJ71==zf0286=4>{I66<>{i11>1<7?tH57;?xh>0<0;6<uG44:8yk??>3:1=vF;599~j<>0290:wE::8:m==>=83;pD9;7;|l:<<<728qC8864}o;;e?6=9rB?955rn8:a>5<6sA>>46sa99a94?7|@=?37p`68e83>4}O<<20qc77e;295~N3=11vb46i:182M2202we54>50;3xL13?3td25<4?:0yK00><ug32>7>51zJ71==zf0386=4>{I66<>{i10>1<7?tH57;?xh>1<0;6<uG44:8yk?>>3:1=vF;599~j<?0290:wE::8:m=<>=83;pD9;7;|l:=<<728qC8864}o;:e?6=9rB?955rn8;a>5<6sA>>46sa98a94?7|@=?37p`69e83>4}O<<20qc76e;295~N3=11vb47i:182M2202we5l>50;3xL13?3td2m<4?:0yK00><ug3j>7>51zJ71==zf0k86=4>{I66<>{i1h>1<7?tH57;?xh>i<0;6<uG44:8yk?f>3:1=vF;599~j<g0290:wE::8:m=d>=83;pD9;7;|l:e<<728qC8864}o;be?6=9rB?955rn8ca>5<6sA>>46sa9`a94?7|@=?37p`6ae83>4}O<<20qc7ne;295~N3=11vb4oi:182M2202we5o>50;3xL13?3td2n<4?:0yK00><ug3i>7>51zJ71==zf0h86=4>{I66<>{i1k>1<7?tH57;?xh>j<0;6<uG44:8yk?e>3:1=vF;599~j<d0290:wE::8:m=g>=83;pD9;7;|l:f<<728qC8864}o;ae?6=9rB?955rn8`a>5<6sA>>46sa9ca94?7|@=?37p`6be83>4}O<<20qc7me;295~N3=11vb4li:182M2202we5n>50;3xL13?3td2o<4?:0yK00><ug3h>7>51zJ71==zf0i86=4>{I66<>{i1j>1<7?tH57;?xh>k<0;6<uG44:8yk?d>3:1=vF;599~j<e0290:wE::8:m=f>=83;pD9;7;|l:g<<728qC8864}o;`e?6=9rB?955rn8aa>5<6sA>>46sa9ba94?7|@=?37p`6ce83>4}O<<20qc7le;295~N3=11vb4mi:182M2202we5i>50;3xL13?3td2h<4?:0yK00><ug3o>7>51zJ71==zf0n86=4>{I66<>{i1m>1<7?tH57;?xh>l<0;6<uG44:8yk?c>3:1=vF;599~j<b0290:wE::8:m=a>=83;pD9;7;|l:`<<728qC8864}o;ge?6=9rB?955rn8fa>5<6sA>>46sa9ea94?7|@=?37p`6de83>4}O<<20qc7ke;295~N3=11vb4ji:182M2202we5h>50;3xL13?3td2i<4?:0yK00><ug3n>7>51zJ71==zf0o86=4>{I66<>{i1l>1<7?tH57;?xh>m<0;6<uG44:8yk?b>3:1=vF;599~j<c0290:wE::8:m=`>=83;pD9;7;|l:a<<728qC8864}o;fe?6=9rB?955rn8ga>5<6sA>>46sa9da94?7|@=?37p`6ee83>4}O<<20qc7je;295~N3=11vb4ki:182M2202we5k>50;3xL13?3td2j<4?:0yK00><ug3m>7>51zJ71==zf0l86=4>{I66<>{i1o>1<7?tH57;?xh>n<0;6<uG44:8yk?a>3:1=vF;599~j<`0290:wE::8:m=c>=83;pD9;7;|l:b<<728qC8864}o;ee?6=9rB?955rn8da>5<6sA>>46sa9ga94?7|@=?37p`6fe83>4}O<<20qc7ie;295~N3=11vb4hi:182M2202wem=>50;3xL13?3tdj<<4?:0yK00><ugk;>7>51zJ71==zfh:86=4>{I66<>{ii9>1<7?tH57;?xhf8<0;6<uG44:8ykg7>3:1=vF;599~jd60290:wE::8:me5>=83;pD9;7;|lb4<<728qC8864}oc3e?6=9rB?955rn`2a>5<6sA>>46saa1a94?7|@=?37p`n0e83>4}O<<20qco?e;295~"6<l0>:k5G44:8ykg7n3:1=v*>4d862c=O<<20qco>0;295~N3=11vbl?>:182!73m3?=j6F;599~jd75290:wE::8:me45=83;p(<:j:44e?M2202wem<:50;3xL13?3tdj=84?:0y'51c==?l0D9;7;|lb53<728qC8864}oc23?6=9r.:8h4:6g9K00><ugk:47>51zJ71==zfh;26=4>{%37a?31n2B?955rn`3b>5<6sA>>46saa0`94?7|,8>n688i;I66<>{ii8i1<7?tH57;?xhf9m0;6<u+15g913`<@=?37p`n1d83>4}O<<20qco>f;295~"6<l0>:k5G44:8ykg583:1=v*>4d862c=O<<20qco=1;295~N3=11vbl<=:182!73m3?=j6F;599~jd44290:wE::8:me72=83;p(<:j:44e?M2202wem?;50;3xL13?3tdj>;4?:0y'51c==?l0D9;7;|lb62<728qC8864}oc1<?6=9r.:8h4:6g9K00><ugk957>51zJ71==zfh8j6=4>{%37a?31n2B?955rn`0a>5<6sA>>46saa3a94?7|,8>n688i;I66<>{ii;n1<7?tH57;?xhf:l0;6<u+15g913`<@=?37p`n2g83>4}O<<20qco<0;295~N3=11vbl=>:182M2202wem><50;3xL13?3tdj?>4?:0yK00><ugk887>51zJ71==zfh9>6=4>{I66<>{ii:<1<7?tH57;?xhf;>0;6<uG44:8ykg403:1=vF;599~jd5>290:wE::8:me6g=83;pD9;7;|lb7g<728qC8864}oc0g?6=9rB?955rn`1g>5<6sA>>46saa2g94?7|@=?37p`n3g83>4}O<<20qco;0;295~N3=11vbl:>:182M2202wem9<50;3xL13?3tdj8>4?:0yK00><ugk?87>51zJ71==zfh>>6=4>{I66<>{ii=<1<7?tH57;?xhf<>0;6<uG44:8ykg303:1=vF;599~jd2>290:wE::8:me1g=83;pD9;7;|lb0g<728qC8864}oc7g?6=9rB?955rn`6g>5<6sA>>46saa5g94?7|@=?37p`n4g83>4}O<<20qco:0;295~N3=11vbl;>:182M2202wem8<50;3xL13?3tdj9>4?:0yK00><ugk>87>51zJ71==zfh?>6=4>{I66<>{ii<<1<7?tH57;?xhf=>0;6<uG44:8ykg203:1=vF;599~jd3>290:wE::8:me0g=83;pD9;7;|lb1g<728qC8864}oc6g?6=9rB?955rn`7g>5<6sA>>46saa4g94?7|@=?37p`n5g83>4}O<<20qco90;295~N3=11vbl8>:182M2202wem;<50;3xL13?3tdj:>4?:0yK00><ugk=87>51zJ71==zfh<>6=4>{I66<>{ii?<1<7?tH57;?xhf>>0;6<uG44:8ykg103:1=vF;599~jd0>290:wE::8:me3g=83;pD9;7;|lb2g<728qC8864}oc5g?6=9rB?955rn`4g>5<6sA>>46saa7g94?7|@=?37p`n6g83>4}O<<20qco80;295~N3=11vbl9>:182M2202wem:<50;3xL13?3tdj;>4?:0yK00><ugk<87>51zJ71==zfh=>6=4>{I66<>{ii><1<7?tH57;?xhf?>0;6<uG44:8ykg003:1=vF;599~jd1>290:wE::8:me2g=83;pD9;7;|lb3g<728qC8864}oc4g?6=9rB?955rn`5g>5<6sA>>46saa6g94?7|@=?37p`n7g83>4}O<<20qco70;295~N3=11vbl6>:182M2202wem5<50;3xL13?3tdj4>4?:0yK00><ugk387>51zJ71==zfh2>6=4>{I66<>{ii1<1<7?tH57;?xhf0>0;6<uG44:8ykg?03:1=vF;599~jd>>290:wE::8:me=g=83;pD9;7;|lb<g<728qC8864}oc;g?6=9rB?955rn`:g>5<6sA>>46saa9g94?7|@=?37p`n8g83>4}O<<20qco60;295~N3=11vbl7>:182M2202wem4<50;3xL13?3tdj5>4?:0yK00><ugk287>51zJ71==zfh3>6=4>{I66<>{ii0<1<7?tH57;?xhf1>0;6<uG44:8ykg>03:1=vF;599~jd?>290:wE::8:me<g=83;pD9;7;|lb=g<728qC8864}oc:g?6=9rB?955rn`;g>5<6sA>>46saa8g94?7|@=?37p`n9g83>4}O<<20qcon0;295~N3=11vblo>:182M2202weml<50;3xL13?3tdjm>4?:0yK00><ugkj87>51zJ71==zfhk>6=4>{I66<>{iih<1<7?tH57;?xhfi>0;6<uG44:8ykgf03:1=vF;599~jdg>290:wE::8:medg=83;pD9;7;|lbeg<728qC8864}ocbg?6=9rB?955rn`cg>5<6sA>>46saa`g94?7|@=?37p`nag83>4}O<<20qcom0;295~N3=11vbll>:182M2202wemo<50;3xL13?3tdjn>4?:0yK00><ugki87>51zJ71==zfhh>6=4>{I66<>{iik<1<7?tH57;?xhfj>0;6<uG44:8ykge03:1=vF;599~jdd>290:wE::8:megg=83;pD9;7;|lbfg<728qC8864}ocag?6=9rB?955rn``g>5<6sA>>46saacg94?7|@=?37p`nbg83>4}O<<20qcol0;295~N3=11vblm>:182M2202wemn<50;3xL13?3tdjo>4?:0yK00><ugkh87>51zJ71==zfhi>6=4>{I66<>{iij<1<7?tH57;?xhfk>0;6<uG44:8ykgd03:1=vF;599~jde>290:wE::8:mefg=83;pD9;7;|lbgg<728qC8864}oc`g?6=9rB?955rn`ag>5<6sA>>46saabg94?7|@=?37p`ncg83>4}O<<20qcok0;295~N3=11vblj>:182M2202wemi<50;3xL13?3twvqMNL{bdf>f41mjli?pNOBz2~DEV|uIJ
\ No newline at end of file +$4g64g<,[o}e~g`n;"2*413&;$>"9 > %17?*nhel%fmyz cnpfc`h(|dz$Sni fhdl[}jipV?:>u=9_3aoo+h`g81;56>?0123456382:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789>0<=6?4:2;452<8J:?=6?<;0,35<=683E^X][[:ecweZeh}g~757>11b924?IR\Y__6jPd`vb[firf}626=0>c:33>JSSX\^1{Qkauc\gjsi|531<3:415235>433;:;<?5=800877<NFY__6IGN<2394;753:81EC^ZT;FJF956294:?6==:NWWTPR=LFK7?<4?>01877<H]]Z^X7J@B=12>586:29=6D@_UU8gmk:4=3:5=95<6;MVPUSS2me~x1=::1<g?6u589:mk9;9-438047<<3CE\XZ5DHRB86<768;087GAPTV9@LVE4:0;2<<44;MVPUSS2ME[M1=50?31?1<H]]Z^X7J@PC>0>5833<>>9<594:43G54<>;80:4:468;50>0>I880:N:46BA@6>0B:2=M>66?4::3454<0;;0595601;1?<0330<=5<<49;KMTPR=IMNYM1650?31?<<NFY__6LJKRC>;>586m231EC^ZT;rqkbYbey~rSyf}erj?<?69:<126D@_UU8svjaXmdzuRzgrdqk[dutm{~747>1249:>LHW]]0{~biPelrw}ZrozlycSckhaug?<?699m126D@_UU8svjaXn|fgSyf}erj?<?69:=126D@_UU8svjaXn|fgSyf}erj\evubz}636=0=4:;9MKVR\3zycjQiumn\pmtb{aUeijo{e=:94;2<I98386O=A@:8EABUI5:546OKDSC?5;><IMNYM1<18:CG@WG;;720MIJ]A=6=<>GCL[K79364AEFQE90902KOH_O37?c8EABUI521<364AEFQE9>902KOH_L30?:8EABUJ5;546OKDS@?6;><IMNYN1=18:CG@WD;<720MIJ]B=7=<>GCL[H7:364AEFQF919i2KOH_L38;2=<>GCL[H74374AR[MGZTBO=1I?5>;;CCBE6=E];20NX]PIODL5>E53J<?7N8LC59@E=G53JO:>6MGEBI\HLEBFZOTXT^J2:AJ0>EKCH>0OAEM3:AOV<=DGDGBXYKK159@KWCXOLDN^LZFOO]JJCI03JXNMYKK1:F1?AO13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>5;6JFA=36:2=CAH6::394DHC?52803MCJ0<617:FJE97>6?1OEL2>>69GMD:587=0HDO320<4?AOF4;85;6JFA=00:2=CAH698394DHC?60803MCJ0?817:FJE9406>1OEL2=8?58@LG;:04=7IGN<3<4?AOF4::556JFA=12>5803MCJ0>?16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;1<L@H7=;08;EKA8419?2NBN1?7>69GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1<L@H7>908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?58@LVF484<7IG_A=0==>BNXH686=08;EKSE959?2NB\O2?>69GMUD;97=0HD^M<3<:?AOWJ591<394DHRA86813MEJ0=08;EMB8469?2NDM1?>>69GKD:6:7=0HBO312<4?AIF48>5;6J@A=36:2=CGH6::394DNC?52803MEJ0<617:FLE97>6?1OCL2>>69GKD:587=0HBO320<4?AIF4;85;6J@A=00:2=CGH698394DNC?60803MEJ0?817:FLE9406>1OCL2=8?58@JG;:04=7IAN<3<4?AIF4::556J@A=12>5803MEJ0>?16:FLE959>2NDM1:16:FLE939>2NDM1816:FLE919>2NDM1616:FLE9?9>2NDN1>17:FLF9776>1OCO2>1?58@JD;9;4<7IAM<01=3>BHJ5;?2:5KOC>21;1<LFH7=;08;EMA8419?2NDN1?7>69GKG:617<0HBL31?58@JD;:94<7IAM<33=3>BHJ5892:5KOC>17;1<LFH7>908;EMA8739?2NDN1<9>69GKG:5?7=0HBL329<4?AIE4;35:6J@B=0=3>BHJ59;245KOC>05?69?2NDN1=>>79GKG:46?1OCO2;>79GKG:26?1OCO29>79GKG:06?1OCO27>79GKG:>6>1OC]O30?58@JVF484<7IA_A=0==>BHXH686=08;EMSE959?2ND\O2?>69GKUD;97=0HB^M<3<:?AIWJ591<394DNRA86863L>0I?M?3:GME6=BFK>0J=972:D;6>@C;2LOO95IDBG7?CBDX:1MH]:4FERF0>@A?O?0Jlb|e09D7>AIL81B>6G?2:K26>O5:2C846GAIUR\45><AGC_\R>>8:KMMQVX8;20ECG[P^20<>OIA]ZT<964IOKWTZ6202CEEY^P07:8MKOSXV:<56GAIUQWEQC03@DBXR>?7:KMMQY79>1BBDZP0358MKOSW99<7D@FT^273>OIA]U;9:5FNHV\431<AGC_S=98;HLJPZ6??2CEEYQ?969JJLRX8H=0ECG[_1@4?LHN\V:H;6GAIU]3@2=NF@^T<H94IOKW[5@03@DBXR??7:KMMQY69>1BBDZP1358MKOSW89<7D@FT^373>OIA]U:9:5FNHV\531<AGC_S<98;HLJPZ7??2CEEYQ>969JJLRX9H=0ECG[_0@4?LHN\V;H;6GAIU]2@2=NF@^T=H94IOKW[4@03@DBXR<?7:KMMQY59>1BBDZP2358MKOSW;9<7D@FT^073>OIA]U99:5FNHV\631<AGC_S?98;HLJPZ4??2CEEYQ=969JJLRX:H=0ECG[_3@4?LHN\V8H;6GAIU]1@2=NF@^T>H94IOKW[7@03@DBXR=?7:KMMQY49>1BBDZP3358MKOSW:9<7D@FT^173>OIA]U89:5FNHV\731<AGC_S>98;HLJPZ5??2CEEYQ<969JJLRX;H=0ECG[_2@4?LHN\V9H;6GAIU]0@2=NF@^T?H94IOKW[6@13@DBXRO9;HLJPZD43@D]?6G@B39OM7=KG?1GCLJJD69OKBODIE>0@XZ>4:NVP70<D\^9SI:4LTV02>JR\:UO:6BZT2]O0>JR\=?0A^I@N49NQ]E^k2Gjfb|Yesqjkke<E`dd~[k}shmm7>H79;1E=>5A1168J466<2D:<?=4N037?K76>=1E=<9;;O32<1=I98387C?=4:L2652<F88:86@>2368J444<2D:>9:4N0060>H6:?>0B<<84:L26=2<F882?6@>359M56633G;8=95A1207?K74;=1E=>:;;O3011=I9:<?7C?<759M56>33G;85>5A1568J427<2D:8<:4N0610>H6<:>0B<:;4:L2002<F8>=86@>4668J42?<2D:84=4N077?K728=1E=8?;;O3661=I9<9?7C?:859M50?43G;=86@>6168J406<2D::?:4N0400>H6>=>0B<8:4:L2232<F8<<?6@>759M52633G;<=95A1607?K70;=1E=::;;O3411=I9><?7C?8759M52>33G;<5>5A1918J4?53G887C<?3:L156=I:;90B?=<;O077>H5=:1E>;=4N357?K409:1E>5=4N3;0?K57;2D8=>5A3318J6543G9??6@<529M735<F:=87C=73:L0=7=I<:1E8==4N530?K36:2D=>6@82:L;6>H>;2D2:>5A9618J<?a3GHTNX]_IO]SVJVT?2DNXZA]K59MKKC63F80CF?4P59SEWRf3YCESO[\IEZa?UOIWK_XBLCJ3:RQA4=Vm2XJAO?9_R15[V5192Y:?6]FM^ALHIOTAFDTOEKLK79PKPTDM>1X^[OC_@58WWPFDVH?7^]]A59PWWD33]S[I><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw6789UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=?PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0121[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567;VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<9Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?017\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4561W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;;R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?01]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3457XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89:9S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?3^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2341YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789?T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>9_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1233ZTb{|f=??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec2?>338Q5)`zo$yj"ilx/aoo})ulVzexQmio>2:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:56;;0Y=!hrg,qb*adp'iggu!}d^rmpwYeag682??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec2;>338Q5)`zo$yj"ilx/aoo})ulVzexQmio>6:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:16;;0Y=!hrg,qb*adp'iggu!}d^rmpwYeag6<2??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec27>328Q5)`zo$yj"ilx/aoo})ulVzexQmio]365=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ7582_;#j|i.sd,cf~)keas#jPpovq[goiW;8;7X> gsd-vc)`kq$h`fv re]sjqtXj`dT??>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ;219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^714>S7'nxm"h gbz-gim'{nT|cz}_ckm[3473\:$kh!rg-dg}(ddbr$~iQnup\flhX?;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU3>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123471<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<=?=6:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4566:>1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?1005?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt78989;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0121570<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<><8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34555:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?4358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678=;9:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012662=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;9<<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp3450502_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>91004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789<9>o5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r1232Zdcl98=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01513>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:<=?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1>1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<0<14>S7'nxm"h gbz-gim'{nT|cz}_fa?6;473\:$kh!rg-dg}(ddbr$~iQnup\cf:46;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k5>5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh080=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm36?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>4:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg9>99o1^<"i}f/pe+be&jf`t"|k_qlwvZadW9;m7X> gsd-vc)`kq$h`fv re]sjqtXojU:=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS??i;T2,cw`)zo%lou lljz,vaYwf}xTknQ<1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_53e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]65c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[37a3\:$kh!rg-dg}(ddbr$~iQnup\cfY09o1^<"i}f/pe+be&jf`t"|k_qlwvZadW18=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<1<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5;5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>1:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm7?3<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8185>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1;1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:16;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi37?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`414996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^211>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV;996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^611>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV?996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^411>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV=996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^:1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0=0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6484956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2878512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><2<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:090=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64<4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2838512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><6<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:050=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W9837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\57><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<Q=299V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9V9946[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2[14?3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?P53:8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8U=>55Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5Z1502_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj>_906?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw67898>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0006?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678;8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0206?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678=8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0406?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678?8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0602?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?4;463\:$kh!rg-dg}(ddbr${Qnup\flh;978:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7>3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`33?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?0;463\:$kh!rg-dg}(ddbr${Qnup\flh;=78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7:3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`37?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?<;473\:$kh!rg-dg}(ddbr${Qnup\flhX8;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_203?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\076<]9%l~k }f.e`|+ekcq%|~R~ats]amkY2:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS:<?;T2,cw`)zo%lou lljz,swYwf}xTnd`P8348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw67898<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?012263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;=?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234475>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>=269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567:88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01113>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:8>?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2341403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=:>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567=;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?04312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:=>55Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r1232475?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>923`8Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?Uihi>=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4560:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?7003?P6(o{l%~k!hcy,`hn~({U{by|Pgb>3:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg979:91^<"i}f/pe+be&jf`t"y}_qlwvZad4;49<6[?/fpe*w`(ojr%oaew/vp\tkruWni7?3<?;T2,cw`)zo%lou lljz,swYwf}xTkn2;>328Q5)`zo$yj"ilx/aoo})pzVzexQhc=7=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`838582_;#j|i.sd,cf~)keas#z|Ppovq[be;?78;7X> gsd-vc)`kq$h`fv ws]sjqtXoj632<h4U1-dvc(un&mht#mcky-tvZvi|{UloR>>f:W3+bta&{l$knv!cmi{+rtXxg~ySjmP10d8Q5)`zo$yj"ilx/aoo})pzVzexQhc^02b>S7'nxm"h gbz-gim'~xT|cz}_fa\74`<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ26n2_;#j|i.sd,cf~)keas#z|Ppovq[beX=8l0Y=!hrg,qb*adp'iggu!xr^rmpwY`kV<:j6[?/fpe*w`(ojr%oaew/vp\tkruWniT;<h4U1-dvc(un&mht#mcky-tvZvi|{UloR6=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc969:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2>>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;:78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<2<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5>5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>6:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7:3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8285>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk161249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY7:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ>249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY5:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ<249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY3:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ:249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY1:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ8249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY?:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=2=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1?1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9585>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5959:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=6=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1;1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95<5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5919:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=:=6==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R>=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W8837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\67><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<Q<299V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9V>946[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg^f2[04?3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?P63:8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8U<>55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z>5=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp3451402_;#j|i.sd,ci6)zm%l~< hrea1*wbd'DkohR|k_ea\mZgclzi<=>?111;?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IdbcW{nThnQf_`fgwpd789::>>64U1-dvc(un&mg<#|k/fp2*btck;$yhn!Baef\vaYckVcTmij|uc234573;>1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&GjhiQ}d^f`[lYflmy~n=>?0314?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IdbcW{nThnQf_`fgwpd789:??:5Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"Cnde]q`ZbdW`Ujhi}zb12343503\:$kh!rg-dh5(ul&my=#i}db0-vae(EhnoSjPdb]j[dbc{|h;<=>73b9V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.Ob`aYulVnhSdQndeqvf5678Vir0<0<8:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[f;87937X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pcx>2:6><]9%l~k }f.eo4+tc'nx:"j|kc3,q`f)J{|hThdhi_vp\vaYseyUhu1<1399V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.OpqgYcaolT{Q}d^vntZe~4:4846[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_b{?0;5?3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzTot2:>2:8Q5)`zo$yj"ic0/pg+bt6&nxoo? }db-NwpdXl`lmSz|Pre]wiuYdq5<5?55Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"C|uc]gmc`X{UyhRzbp^az828412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sa{{<1<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWe0<0<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[iss4;4856[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_mww868412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sa{{<5<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWe080<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[iss4?4856[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_mww828412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sa{{<9<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWqey0=0<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[}iu484856[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_ymq878412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sua}<2<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWqey090<9:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[}iu4<4856[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#@}zb^fjbcYpzVxoSyc_ymq838412_;#j|i.sd,ci6)zm%l~< hrea1*wbd'Dy~nRjffg]tvZtcW}g{Sua}<6<0=>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWqey050<0:W3+bta&{l$ka>!re-dv4(`zmi9"jl/ekebZquW{nTx`~30?0;?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcT<?64U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lY6:11^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^01<>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS><7;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoX<;20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]66==R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeR8=8:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnW>837X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$~iQkc^k\<7><]9%l~k }f.eo4+tc'nx:"j|kc3,q`f)ulVnhSdQ6309V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=2=77=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx12369699:;0Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6:2><4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?2>>012?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?6;553\:$kh!rg-dh5(ul&my=#i}db0-vae(zmUooRgPmtz3454;:7;8=6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:90>0<2:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnWds<=>=<2<274=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236929;;1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^ov|567:5>5=>:4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?2;>03274=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236939;;1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^ov|567:5?5=>?4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?29>278Q5)`zo$yj"ic0/pg+bt6&nxoo? }db-q`ZbdW`Ufyu>?03>5:ZUP9:;0Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6<2>=4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?28>0303>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS`{w012182869VY\<><4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?28>312?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?<;543\:$kh!rg-dh5(ul&my=#i}db0-vae(zmUooRgPmtz3454;079:??5Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"|k_ea\mZkrp9:;>1614248Q5)`zo$yj"ic0/pg+bt6&nxoo? }db-q`ZbdW`Ufyu>?03>;:1YT_99=7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$~iQkc^k\ip~7898743:PSV301>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS`{w01218=8X[^:8=6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:9040<2:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnWds<=>=<8<26d=R8&myj#|i/fn3*wb(o{;%~kyit.PBIZTCWLDTJZH[13;8Q5)`zo$yj"ic0/pg+bt6&{l|jy!]AL]QABIR\VOE=?l4U1-dvc(un&mg<#|k/fp2*w`pn}%YM@QYAMKG[CQA\8;8?6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWOYFSKHk1248Q5)`zo$yj"ic0/pg+bt6&{l|jy!lusp\br`sWz~jxhQISL]EBa7*Ag937X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXNZGTJKj>-Hl2565<]9%l~k }f.eo4+tc'nx:"hxfu-`qwtXn~lS~zntd]EWHYANm88:6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWOYFSKHk2,Km7==R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^DPIZ@Al;'Bb<?=8:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXnk8<7X> gsd-vc)`d9$yh"i}1/pescr(mdzuRhxfu]j6`=R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSdQ`r12347`<]9%l~k }f.eo4+tc'nx:"hxfu-fiur~Wo}mxRgPos234575=2_;#j|i.sd,ci6)zm%l~< }fvdw+pubzV|j`dj=9:W3+bta&{l$ka>!re-dvdu)zz~x#n> c`pq}kcs494956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw848512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<3<1=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0>0=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`4*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0=0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>2:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64;49?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z<2<>318Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t28185j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~8U;Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`4*p6W8Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]7[kis89:;=?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:76;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>2:7?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2=>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}682?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV:R.fop*hu5;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~86;2?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><0<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:56;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:0>0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0>7:7d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W9Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y6Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[7Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]0[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_5]mkq6789;9<6[?/fpe*w`(oe:%~i!hr`q-vvrt'jef|=<?;T2,cw`)zo%l`= }d.eqev(u{}y$obc13;8Q5)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTe>>4U1-dvc(un&mg<#|k/fpbw+tt|z%ym`Qjmqvz[cdXaVey<=>?309V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?01225c=R8&myj#|i/fn3*wb(zhgTzlbfd^dtbq443\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu310>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|;8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{3368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr3:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by;=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp3433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d;?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov;6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1>12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5:5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4849o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az848Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?6;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw32?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2<>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp682R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5>5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}929W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8085k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<4<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw36?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7:3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6<2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:06Vx>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:76;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?5;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<3<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1=12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6?2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;=78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8385i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=5=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc27>3f8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx743Q}t0d8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{<1<2b>S7'nxm"h gm2-va)uxg~y#naznu>2:4`<]9%l~k }f.eo4+tc'{zex!lotlw8786n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:468l0Y=!hrg,qb*ak8'xo#~ats-`kphs4=4:j6[?/fpe*w`(oe:%~i!}povq+firf}6>2<h4U1-dvc(un&mg<#|k/srmpw)dg|d0;0>f:W3+bta&{l$ka>!re-qtkru'je~by28>0d8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{<9<2a>S7'nxm"h gm2-va)uxg~y#naznu]35`=R8&myj#|i/fn3*wb(zyd~"m`uov\54c<]9%l~k }f.eo4+tc'{zex!lotlw[77b3\:$kh!rg-dh5(ul&x{by| cnwmpZ56m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY39l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX=8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW?;n7X> gsd-vc)`d9$yh"|nup,gjsi|V=:i6[?/fpe*w`(oe:%~i!}povq+firf}U3>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2?>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?5;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64;49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1=1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>7:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;=7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0;0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=5=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:?6;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T<??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P1338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\677<]9%l~k }f.eo4+tc'{zex!lotlw[a7X;;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T8??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P5338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\277<]9%l~k }f.eo4+tc'{zex!lotlw[a7X?;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T4?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:76;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>2:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2=>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}682?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!ws-dsdu)z~x#n? glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV:R.fop*hu5;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86;2?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><0<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:56;90Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:0>0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>7:7d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W9Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y6Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[7Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0]0[dhc89:;=?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_5]mkq6789;956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw858512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<0<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0?0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs4:49j6[?/fpe*w`(oe:%{!hw`q-svrt'j8$k`{w.foX4X(`e8$f=?h4U1-dvc(un&mg<#y}/fubw+qt|z%h>"ibuy,di^7Z&ngx"`}=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\:T$la~ bs3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR9V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP8P hmr,nw75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64949?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2>>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28785;2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8682?=4U1-dvc(un&mg<#y}/fubw+qt|z%h>"x><5<1f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y7Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[4Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]1[dhc89:;=?l4U1-dvc(un&mg<#y}/fubw+qt|z%h>"x>_2]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<Q;_omw45679;:0Y=!hrg,qb*ak8'}y#jyns/uppv)dgdz:>=5Z0.eqb+ta'nf;"z| gvcp*rus{&ida}<=8:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZ`eW`8>7X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_h0`?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkW`Ud~=>?03f8Q5)`zo$yj"ic0/uq+bqf{'}xx~!}al]eqijXaVey<=>?12a8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.Ob`aYpzVnjxlQlotlw[lYflm:;<=??3b9V4*aun'xm#jb?.vp,crbd9'}oohv{/Lcg`ZquWmkmRm`uov\mZgcl9:;<<<<c:W3+bta&{l$ka>!ws-dsae6&~nhiuz M`fg[rtXlh~jSnaznu]j[dbc89:;=9=m;T2,cw`)zo%l`= xr.et`f7)minty!Baef\swYci}kTob{at^k\eab789:9?o5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678=9i7X> gsd-vc)`d9$|~"ixdb3-saebp}%FmijPws]geqgXkfexRgPaef34561;k1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234=273\:$kh!rg-dh5(pz&m|hn?!weaf|q)JimnT{Qkauc\gjsi|VcTmij?012\g|:66=:0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GjhiQxr^fbpdYdg|dSdQnde2345Ydq5258?5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vir050>15;8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.Ob`aYpzVnjxlQlotlw[lYflm:;<=Qwos>2:47XAG\T<9=4U1-dvc(un&mg<#y}/fugg4(pljosx"Cnde]tvZbf|hUhcx`{_h]b`a6789Usc2=>0377>S7'nxm"h gm2-sw)`mi:"zjleyv,IdbcW~xThlzn_bmvjqYnWhno<=>?_ymq86869=>0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GjhiQxr^fbpdYdg|dSdQnde2345Yg{6?2<?>429V4*aun'xm#jb?.vp,crbd9'}oohv{/Lcg`ZquWmkmRm`uov\mZgcl9:;<Rv`r=6=57243\:$kh!rg-dh5(pz&m|hn?!weaf|q)JimnT{Qkauc\gjsi|VcTmij?012\|jt;=7;:8>5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vrd~1811060?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NeabX{UomyoPcnwmpZoXimn;<=>Pxnp?3;76<11^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234Z~hz5=5=<?PSV373>S7'nxm"h gm2-sw)`mi:"zjleyv,IdbcW~xThlzn_bmvjqYnWhno<=>?_ymq82869VY\<9=4U1-dvc(un&mg<#y}/fugg4(pljosx"Cnde]tvZbf|hUhcx`{_h]b`a6789Usc27>0303>S7'nxm"h gm2-sw)`mi:"zjleyv,IvseWmcmjRy}_sf\phvXkp6;2>94U1-dvc(un&mg<#y}/fugg4(pljosx"C|uc]gmc`X{UyhRzbp^az8484?2_;#j|i.sd,ci6){%l{im>.vf`a}r(EziSigif^uq[wbX|dzTot2=>258Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.OpqgYcaolT{Q}d^vntZe~4:48;6[?/fpe*w`(oe:%{!hwea2*rbdmq~$A~{m_ekebZquW{nTx`~Pcx>7:61<]9%l~k }f.eo4+qu'n}oo< xdbg{p*Kt}kUoekhPws]q`ZrjxVir080<7:W3+bta&{l$ka>!ws-dsae6&~nhiuz Mrwa[aoanV}ySjPtlr\g|:16:=0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GxyoQkigd\swYulV~f|Rmv<6<0<>S7'nxm"h gm2-sw)`mi:"zjleyv,IvseWmcmjRy}_sf\phvXd|~7<3=7;T2,cw`)zo%l`= xr.et`f7)minty!Bst`\`l`aW~xT~iQ{mq]oqq:66:20Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GxyoQkigd\swYulV~f|Rbzt=0=7==R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HurjVnbjkQxr^pg[qkwWe0>0<8:W3+bta&{l$ka>!ws-dsae6&~nhiuz Mrwa[aoanV}ySjPtlr\hpr;<7937X> gsd-vc)`d9$|~"ixdb3-saebp}%FxlPdhde[rtXzmUa}Qcuu>6:6><]9%l~k }f.eo4+qu'n}oo< xdbg{p*Kt}kUoekhPws]q`ZrjxVf~x181399V4*aun'xm#jb?.vp,crbd9'}oohv{/LqvfZbnnoU|~R|k_uos[iss4>4846[?/fpe*w`(oe:%{!hwea2*rbdmq~$A~{m_ekebZquW{nTx`~Pltv?<;5?3\:$kh!rg-dh5(pz&m|hn?!weaf|q)J{|hThdhi_vp\vaYseyUsc2?>2:8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.OpqgYcaolT{Q}d^vntZ~hz5;5?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#@}zb^fjbcYpzVxoSyc_ymq878402_;#j|i.sd,ci6){%l{im>.vf`a}r(EziSigif^uq[wbX|dzTtb|33?1;?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NwpdXl`lmSz|Pre]wiuYg{6?2>64U1-dvc(un&mg<#y}/fugg4(pljosx"C|uc]gmc`X{UyhRzbp^zlv939;11^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'Dy~nRjffg]tvZtcW}g{Sua}<7<0<>S7'nxm"h gm2-sw)`mi:"zjleyv,IvseWmcmjRy}_sf\phvXpfx7;3=7;T2,cw`)zo%l`= xr.et`f7)minty!Bst`\`l`aW~xT~iQ{mq]{kw:?6;l0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&nbjkQxr^pg[qkw4949j6[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcT<?h4U1-dvc(un&mg<#y}/fugg4(pljosx"y}_ecweZeh}g~TeR?=f:W3+bta&{l$ka>!ws-dsae6&~nhiuz ws]geqgXkfexRgP23d8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.uq[agsiVidyczPi^11b>S7'nxm"h gm2-sw)`mi:"zjleyv,swYci}kTob{at^k\07`<]9%l~k }f.eo4+qu'n}oo< xdbg{p*quWmkmRm`uov\mZ35n2_;#j|i.sd,ci6){%l{im>.vf`a}r({UomyoPcnwmpZoX>;l0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&}ySio{a^alqkrXaV=9j6[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcT4?h4U1-dvc(un&mg<#y}/fugg4(pljosx"y}_ecweZeh}g~TeR7<8:W3+bta&{l$ka>!ws-dsae6&~nhiuz ws]geqgXkfexRgPaef3456;97937X> gsd-vc)`d9$|~"ixdb3-saebp}%|~Rjnt`]`kphsW`Ujhi>?01>1:6><]9%l~k }f.eo4+qu'n}oo< xdbg{p*quWmkmRm`uov\mZgcl9:;<1=1399V4*aun'xm#jb?.vp,crbd9'}oohv{/vp\`drfWje~byQf_`fg45674=4846[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcTmij?012?1;5?3\:$kh!rg-dh5(pz&m|hn?!weaf|q)pzVnjxlQlotlw[lYflm:;<=29>2:8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.uq[agsiVidyczPi^cg`56785=5?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#z|Pd`vb[firf}UbSljk01238=86l2_;#j|i.sd,ci6){%ym`Qxr^gm[l75;2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov261=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at207?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7;3<l;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;?7Uyx?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;878j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx783<n;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[}iu4<49m6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^zlv909:h1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQwos>4:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=2=5c=R8&myj#|i/fn3*rt(yd~"m`uov?5;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9499o1^<"i}f/pe+bj7&~x${}`{r.alqkr;;7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5>5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~793?i;T2,cw`)zo%l`= xr.usjqt(kfex1811g9V4*aun'xm#jb?.vp,suhsz&idycz37?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=:=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?30?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28485:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64<49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=181239V4*aun'xm#jb?.vp,suhsz&idyczPd0>4:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;078:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S5<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g6979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54149=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R>=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^315>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z4592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V99=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R:=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^715>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z0592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V=9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R6>6:W3+bta&{l$ahc dnww[lY79?1^<"i}f/pe+hcj'me~xRgP1058Q5)`zo$yj"cjm.flqqYnW8::;6[?/fpe*w`(elg$hb{{_h]2541<]9%l~k }f.ofi*bh}}UbS<<>7:W3+bta&{l$ahc dnww[lY6;8=0Y=!hrg,qb*kbe&ndyyQf_0623>S7'nxm"h mdo,`jssW`U:9<94U1-dvc(un&gna"j`uu]j[406?2_;#j|i.sd,i`k(lfSdQ>7058Q5)`zo$yj"cjm.flqqYnW82:;6[?/fpe*w`(elg$hb{{_h]2=40<]9%l~k }f.ofi*bh}}UbS??8;T2,cw`)zo%fi`!kotv\mZ479>1^<"i}f/pe+hcj'me~xRgP2034?P6(o{l%~k!bel-gkprXaV89=:5Z0.eqb+ta'dof#iazt^k\66703\:$kh!rg-nah)cg|~TeR<;169V4*aun'xm#`kb/emvpZoX:<;<7X> gsd-vc)jmd%ocxzPi^0552=R8&myj#|i/lgn+air|VcT>:?8;T2,cw`)zo%fi`!kotv\mZ4?9>1^<"i}f/pe+hcj'me~xRgP2835?P6(o{l%~k!bel-gkprXaV9:;6[?/fpe*w`(elg$hb{{_h]0441<]9%l~k }f.ofi*bh}}UbS>?>7:W3+bta&{l$ahc dnww[lY4:8=0Y=!hrg,qb*kbe&ndyyQf_2123>S7'nxm"h mdo,`jssW`U88<94U1-dvc(un&gna"j`uu]j[636>2_;#j|i.sd,i`k(lfSdQ;179V4*aun'xm#`kb/emvpZoX=8<0Y=!hrg,qb*kbe&ndyyQf_735?P6(o{l%~k!bel-gkprXaV=::6[?/fpe*w`(elg$hb{{_h];53=R8&myj#|i/lgn+air|VcT5<74U1-dvc(un&gna"j`uu]nah:768k0Y=!hrg,qb*kbe&ndyyQbel>24;7f3\:$kh!rg-nah)cg|~Tahc310<2e>S7'nxm"h mdo,`jssWdof0<<11`9V4*aun'xm#`kb/emvpZkbe5;82<o4U1-dvc(un&gna"j`uu]nah:6<7;j7X> gsd-vc)jmd%ocxzPmdo?5086i2_;#j|i.sd,i`k(lfS`kb<04=5d=R8&myj#|i/lgn+air|Vgna1?8>0c8Q5)`zo$yj"cjm.flqqYjmd6:43?n;T2,cw`)zo%fi`!kotv\i`k;904:56[?/fpe*w`(elg$hb{{_lgn8486i2_;#j|i.sd,i`k(lfS`kb<32=5d=R8&myj#|i/lgn+air|Vgna1<>>0c8Q5)`zo$yj"cjm.flqqYjmd69>3?n;T2,cw`)zo%fi`!kotv\i`k;::4:m6[?/fpe*w`(elg$hb{{_lgn87299h1^<"i}f/pe+hcj'me~xRcjm=06:4g<]9%l~k }f.ofi*bh}}Ufi`2=6?3b?P6(o{l%~k!bel-gkprXelg7>:0>a:W3+bta&{l$ahc dnww[hcj4;25=l5Z0.eqb+ta'dof#iazt^ofi94>6830Y=!hrg,qb*kbe&ndyyQbel>1:4g<]9%l~k }f.ofi*bh}}Ufi`2<0?3b?P6(o{l%~k!bel-gkprXelg7?<0>a:W3+bta&{l$ahc dnww[hcj4:85=l5Z0.eqb+ta'dof#iazt^ofi95468k0Y=!hrg,qb*kbe&ndyyQbel>00;7f3\:$kh!rg-nah)cg|~Tahc334<2=>S7'nxm"h mdo,`jssWdof0>0>9:W3+bta&{l$ahc dnww[hcj4=4:56[?/fpe*w`(elg$hb{{_lgn808612_;#j|i.sd,i`k(lfS`kb<7<2=>S7'nxm"h mdo,`jssWdof0:0>9:W3+bta&{l$ahc dnww[hcj414:56[?/fpe*w`(elg$hb{{_lgn8<81m2_;#j|i.sd,i`k(okg%koch.f`ncd(iolih"och/cnh[hcjWnoeio{os-ueioc&jy~"|nmmmlt^6Z&{kf"!y2^llmkos&{kf#i~<6y15*wgj9k1^<"i}f/pe+hcj'}g{Sob_sf\ak7d3\:$kh!rg-nah)seyUym`Q}d^gm545<]9%l~k }f.pbiZtcWld:;6[?/fpe*w`(zhgT~hi`uu]fj45<]9%l~k }f.pbiZquWld:h6[?/fpe*w`(zz~i`f!}d^pppZgtzlm9<6[?/fpe*w`(zz~i`f!}d^pppZgtzlmTh<<?;T2,cw`)zo%yylck.pg[wusWhyyijQk20a8Q5)`zo$yj"||tcnh+wbXzz~Tobcm1e9V4*aun'xm#}{bmi,vaYu{}Uhc`l>1d9V4*aun'xm#}{bmi,vaYu{}Uyij2?>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi31?3f?P6(o{l%~k!}su`oo*tcW{ySkh<3<2`>S7'nxm"h rrvahn)ulVxxxR|jg^22`>S7'nxm"h rrvahn)ulVxxxR|jg^32`>S7'nxm"h rrvahn)ulVxxxR|jg^02`>S7'nxm"h rrvahn)pzVxxxRo|rde14>S7'nxm"h rrvahn)pzVxxxRo|rde\`4473\:$kh!rg-qwqdkc&}yS}{_`qqabYc:8i0Y=!hrg,qb*tt|kf`#z|Prrv\gjke9m1^<"i}f/pe+wusjea${Q}su]`khd69l1^<"i}f/pe+wusjea${Q}su]qab:768o0Y=!hrg,qb*tt|kf`#z|Prrv\v`a;97;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W9;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W8k0Y^K]_@NJEVe<]ZOYS[G\ICNF7>PDK01]EHYPTXRF7>QBI:1\IOl4WSKWAZ@NZZ^h7Z\FTD]NKACXIj1\^DZJ_LMGAZD6l2RB@D@W-YFA$5(6(Z^^N->!1!CPGLO23QEYOT84XRVOMG1<PZ^TKCJ8;YQW[SEDj2RTOB\J_HLEK3=_lkUBhk5Wdi]SvlkQm{ybcc??;Yfn[Hgmg{\n~~g`n028\akXE`dd~[k}shmmg>gkefyShctx`8eikh{}Umyab9;cc`opvc3kkhgx~Pm`phaw5<keao7io{a^alqkr/8 n0hlzn_bmvjq.6!m1omyoPcnwmp-4.l2njxlQlotlw,6/c3mkmRm`uov+0,b<lh~jSnaznu*6-a=ci}kTob{at)4*`>bf|hUhcx`{(6+g?agsiVidycz'8(f8`drfWje~by&6)e9geqgXkfex1>1f:fbpdYdg|d044?>69gflrbz{<0hd`'0(48`lh/9 =0hd`'11+4?aoi 8;";6jfn)31-2=cag":?$94dhl+51/03mce$<;&7:fjj-71!>1oec&>7(58`lh/91#<7iga(0;*2>bnf!8";6jfn)03-2=cag"9=$94dhl+67/03mce$?=&7:fjj-43!>1oec&=5(58`lh/:?#<7iga(35*3>bnf!83%:5kio*1=,0<l`d#?$94dhl+75/03mce$>?&7:fjj-55!>1oec&<3(58`lh/;=#<7iga(27*2>bnf!>":6jfn)7*2>bnf!<":6jfn)5*2>bnf!2":6jfn);*2>bnf5:5;6jfn=33:2=cag6:=394dhl?57803mce0<=17:fjj9736>1oec2>5?58`lh;9?4<7iga<05=3>bnf5;32:5kio>2=;0<l`d7=394dhl?65803mce0??17:fjj9456>1oec2=3?58`lh;:=4<7iga<37=3>bnf58=2:5kio>13;1<l`d7>508;ekm87?9>2nbb1<17:fjj9576>1oec2<1?58`lh;;;4<7iga<21=3>bnf59?245kio>01?69?2nbb1=:>79gmk:46?1oec2;>79gmk:26?1oec29>79gmk:06?1oec27>79gmk:>6>1ocxz'0(58`jss 8#37iazt)33-==cg|~#=<'7;emvp-75!11ocxz'12+;?air|!;?%55kotv+50/?3me~x%?9)99gkpr/9>#37iazt)3;-==cg|~#=4'8;emvp-4.02ndyy&=0(:8`jss ;;"46j`uu*16,><lf$?=&8:flqq.5< 20hb{{(37*<>bh}}"9:$64dnww,71.02ndyy&=8(:8`jss ;3";6j`uu*0-==cg|~#?='7;emvp-56!11ocxz'33+;?air|!98%55kotv+71/?3me~x%=:)69gkpr/< =0hb{{(4+4?air|!<";6j`uu*4-2=cg|~#4$94dnww,</03me~x1>18:flqq:68720hb{{<03=<>bh}}6:>364dnww845902ndyy2>4?:8`jss48?546j`uu>22;><lf0<918:flqq:60720hb{{<0;=3>bh}}6:255kotv?658?3me~x1<>>99gkpr;:;437iazt=00:==cg|~7>907;emvp942611ocxz327<;?air|58<255kotv?6=8?3me~x1<6>69gkpr;:720hb{{<22=<>bh}}68=364dnww864902ndyy2<3?:8`jss4:>5m6j`uu>01?6902ndyy2<5?58`jss4:4<7iazt=6=3>bh}}6>2:5kotv?2;1<lf0:08;emvp9>9?2ndyy26>99f`l`5fnn>7hctx11?coagVmnbh|ntnp\r1Y4$)Rb`d`w BMQA%Abflxjxb|/11,2*556=2lbjbQwloz\144;?U9oae<3:djbjYdgrT9<<w37]1gim+n`ldSjkaescwkwYq<V9'BB@J,OMMA6e13ocmcRvcny]657~4>V8h`f"iigm\c`hbzh~d~Rx;_2.xgZnf{VcexRmck<2/gZnf{Vyyy3?,b]q`Z`umx7: nQgar]q`Zbf|hUhcx`{=0.`[aoiW~coxe3<6-a\lduX{UomyoPcnwmp87+kVl~`aQil`ep[wusWkg1<"l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1>8#c^opcjhX~hf6=!mPre]gauro5<;9 nQgar]vjacunee|1="l_icp[djjgz~Tjxbc=1.`[mgtW{y1<"l_ecweZeh}g~T{dj{h<33(fYoizU|~Rolk<2/gZstmVoho0>#c^alihiiWjfdof3?,b]tvZgdcVfd{0>#c^pg[uhszV}bhyf29-a\qvcXn~lSio{a^alqkr:9%iTdl}PamolwqYbey~r1="l_sf\`drfWje~byQxievk946+kVe}ihcov]okr;7$jU|~R~ats]tmaro50&hS}|`g^gntqX|pzn1="l_vp\`drfWje~byQxievk946+kVzyiaand^pfcv;6$jUocxzPrrv\rdj:8%iTdl}Pd`vb[firf}7; nQrne\bpjkW}byi~fPndebp`Yqie7>=="l_vp\``vs`4?:>!mPpsmd[`kw|pUdk|h^lfcdrbWkg18"l_qplcZcjx}sTxe|jsi]bwvcu|V|j`0:#c^jbwZpfd`n6<!mPpsmd[cskdV~c~h}g_`qpawrX~hf69<?#cnoskkci|Vdjah3iigm\|ihW<;9t>8P2bnh(fYqiecoSaax=1.`[utneVlbjbQ{yqg>144;?&hS}|`g^dvhiYsqyo6<!mPmdolv|Ysqyo6=!s=f:djbjYdgrT9<<w37]1gimXn`ldSjkaescwkwYq<V9Tt~zP159eqij03`dSnbd8:ldggsndm20c{k}fmmte>vugnUna}zv159svjaXmdzuRzgrdqk,5/6<2zycjQjmqvz[qnumzb#=$?;;qplcZcjx}sTxe|jsi*1-42<x{elShctx]wlwct`!9"=95rne\ahvsqV~c~h}g(5+20>vugnUna}zv_ujqavn/= ;?7}|`g^gntqX|axne&9)068twi`Wlg{xtQ{hsgpl-1.9=1{~biPelrw}Zrozlyc$5'>6:rqkbYbey~rSyf}erj?<?699k1{~biPelrw}ZrozlycSl}|esv+4,7e3yxdkRkbpu{\pmtb{aUj~k}t)3*5g=wzfmTi`~{y^vkv`uoWhyxiz'2(3a?uthoVof|ywPtipfwmYf{zoyx%=&1c9svjaXmdzuRzgrdqk[dutm{~#8$?m;qplcZcjx}sTxe|jsi]bwvcu|!?"=o5rne\ahvsqV~c~h}g_`qpawr/> ;i7}|`g^gntqX|axneQnsrgqp-1.9k1{~biPelrw}ZrozlycSl}|esv+<,7c3yxdkRkbpu{\pmtb{aUj~k}t=:94;7e3yxdkRkbpu{\pmtb{aUeijo{e)2*5g=wzfmTi`~{y^vkv`uoWgolmyk'1(3a?uthoVof|ywPtipfwmYimnki%<&1c9svjaXmdzuRzgrdqk[kc`i}o#?$?m;qplcZcjx}sTxe|jsi]mabgsm!>"=o5rne\ahvsqV~c~h}g_ogdeqc/= ;i7}|`g^gntqX|axneQaefcwa-0.9k1{~biPelrw}ZrozlycSckhaug+3,7e3yxdkRkbpu{\pmtb{aUeijo{e):*5a=wzfmTi`~{y^vkv`uoWgolmyk38;2==>vugnUmyab>3:rqkbYa}efTxe|jsi*3-45<x{elSk{cl^vkv`uo 8#:?6~}of]eqijX|axne&=)018twi`Wog`Rzgrdqk,6/6;2zycjQiumn\pmtb{a"?%<=4psmd[cskdV~c~h}g(4+27>vugnUmyabPtipfwm.1!890|ah_gwohZrozlyc$:'>3:rqkbYa}efTxe|jsi*;-43<x{elSk{cl^vkv`uo410;2<o4psmd[cskdV~c~h}g_`qpawr/8 ;j7}|`g^dvhiYs`{oxdRo|sdpw,4/6i2zycjQiumn\pmtb{aUj~k}t)0*5d=wzfmTjxbc_ujqavnXizyn~y&<)0c8twi`Wog`Rzgrdqk[dutm{~#8$?n;qplcZ`rdeUdk|h^cpw`ts <#:m6~}of]eqijX|axneQnsrgqp-0.9h1{~biPftno[qnumzbTm~}jru*4-4g<x{elSk{cl^vkv`uoWhyxiz'8(3`?uthoVl~`aQ{hsgplZgt{lx054?>0c8twi`Wog`Rzgrdqk[kc`i}o#<$?n;qplcZ`rdeUdk|h^lfcdrb 8#:m6~}of]eqijX|axneQaefcwa-4.9h1{~biPftno[qnumzbTbhintd*0-4g<x{elSk{cl^vkv`uoWgolmyk'4(3b?uthoVl~`aQ{hsgplZhboh~n$8'>a:rqkbYa}efTxe|jsi]mabgsm!<"=l5rne\bpjkW}byi~fPndebp`.0!8k0|ah_gwohZrozlycSckhaug+<,7d3yxdkRhzlm]wlwct`Vdnklzj<983:3=ulVigg<>4re]geqgXkfex%>&119q`Zbf|hUhcx`{(0+24>tcWmkmRm`uov+6,773{nThlzn_bmvjq.4!8:0~iQkauc\gjsi|!>"==5}d^fbpdYdg|d$8'>0:pg[agsiVidycz'6(33?wbXlh~jSnaznu*4-46<zmUomyoPcnwmp->.991yhRjnt`]`kphs 0#:<6|k_ecweZeh}g~7<3??;sf\`drfWje~by2>>028vaYci}kTob{at=0=55=ulVnjxlQlotlw868682xoSio{a^alqkr;<7;;7jPd`vb[firf}6>2<>4re]geqgXkfex181119q`Zbf|hUhcx`{<6<24>tcWmkmRm`uov?<;753{nThlzn_bmvjq:>294:<6|k_ecweZeh}g~753;4re]fj3=ulVxxx>5}su58wgosm{x?7~||t59wvpc>3|doihcov78rdjnl?1|~Rolk79tvZekc8:0{Qkauc\gjsi|!:"==5xr^fbpdYdg|d$<'>0:uq[agsiVidycz'2(33?rtXlh~jSnaznu*0-46<{UomyoPcnwmp-2.991|~Rjnt`]`kphs <#:<6y}_ecweZeh}g~#:$??;vp\`drfWje~by&8)028swYci}kTob{at):*55=pzVnjxlQlotlw,</682}ySio{a^alqkr;87;;7z|Pd`vb[firf}6:2<>4ws]geqgXkfex1<1119tvZbf|hUhcx`{<2<24>quWmkmRm`uov?0;773~xThlzn_bmvjq:268:0{Qkauc\gjsi|5<5==5xr^fbpdYdg|d0:0>0:uq[agsiVidycz38?31?rtXlh~jSnaznu>:>58682}ySio{a^alqkr;17?0{Qjn79tvZtt|tJK|h=>;AB{5?@=<3;p_8k55779=?74:0::;7<n194xj1da281e8n>54:&7fa<3j>1v_8m55779=?74:0::;7<n1948W43c2<<n6=4>33;352<5i82<7^;l:44f>5<6;;3;=:4=a0:;?a3103:1=7?tS4g9133=13;8>4>>7;0b5=0<~];n=7>51;395`c|[<o19;;59;306<66?38j=584$5`2>43b3_>ii7<tu04;>4=r9?31<6s+1e;952=e=?21<78<:2857~N3io1Q9<4;{b8a>40=9<0v(<k9:44;?!2ek3?=;6g:c583>>i2l>0;6)?kb;7f5>h6lh0;76a:d783>!7cj3?n=6`>d`82?>i2l<0;6)?kb;7f5>h6lh0976a:d583>!7cj3?n=6`>d`80?>i2l:0;6)?kb;7f5>h6lh0?76a:d383>!7cj3?n=6`>d`86?>i2l80;6)?kb;7f5>h6lh0=76a:d183>!7cj3?n=6`>d`84?>i2ko0;6)?kb;7f5>h6lh0376a:cd83>!7cj3?n=6`>d`8:?>i2j10;6)?kb;7`6>h6lh0;76a:b683>!7cj3?h>6`>d`82?>i2j?0;6)?kb;7`6>h6lh0976a:b483>!7cj3?h>6`>d`80?>i2j=0;6)?kb;7`6>h6lh0?76a:b283>!7cj3?h>6`>d`86?>i2j;0;6)?kb;7`6>h6lh0=76a:b083>!7cj3?h>6`>d`84?>i2j90;6)?kb;7`6>h6lh0376a:ag83>!7cj3?h>6`>d`8:?>o2m:0;66a:6b83>>i2>?0;66g:ce83>>o2k?0;66a:3883>!7cj3?>o6`>d`83?>i2;10;6)?kb;76g>h6lh0:76a:3683>!7cj3?>o6`>d`81?>i2;?0;6)?kb;76g>h6lh0876a:3483>!7cj3?>o6`>d`87?>i2;=0;6)?kb;76g>h6lh0>76a:3383>!7cj3?>o6`>d`85?>i2;80;6)?kb;76g>h6lh0<76a:3183>!7cj3?>o6`>d`8;?>i2:o0;6)?kb;76g>h6lh0276a:2d83>!7cj3?>o6`>d`8b?>i2:m0;6)?kb;76g>h6lh0i76a:2b83>!7cj3?>o6`>d`8`?>i2:k0;6)?kb;76g>h6lh0o76a:2`83>!7cj3?>o6`>d`8f?>i2:00;6)?kb;76g>h6lh0m76a:2683>!7cj3?>o6`>d`824>=h=;<1<7*>dc861f=i9mk1=<54o406>5<#9mh198m4n0fb>44<3f?987>5$0fa>03d3g;om7?<;:m666<72-;on7;:c:l2`d<6<21d9?<50;&2`g<2=j1e=io51498k046290/=il554a8j4bf28<07b;=0;29 4be2<?h7c?ka;34?>i29o0;6)?kb;76g>h6lh0:465`50g94?"6lk0>9n5a1ec95<=<g<9m6=4+1e`910e<f8nj6<o4;n70a?6=,8ni68;l;o3ge?7e32e>?i4?:%3gf?32k2d:hl4>c:9l16e=83.:ho4:5b9m5ag=9m10c8=m:18'5ad==<i0b<jn:0g8?j34i3:1(<jm:47`?k7ci3;m76a:3283>!7cj3?>o6`>d`814>=h=;21<7*>dc861f=i9mk1><54o43g>5<#9mh198m4n0fb>74<3f?:o7>5$0fa>03d3g;om7<<;:k7b5<72-;on7;>3:l2`d<732c?ik4?:%3gf?36;2d:hl4>;:k7a`<72-;on7;>3:l2`d<532c?ii4?:%3gf?36;2d:hl4<;:k7af<72-;on7;>3:l2`d<332c?io4?:%3gf?36;2d:hl4:;:k7a<<72-;on7;>3:l2`d<132c?i54?:%3gf?36;2d:hl48;:k7a2<72-;on7;>3:l2`d<?32c?i;4?:%3gf?36;2d:hl46;:k7a0<72-;on7;>3:l2`d<f32c?i94?:%3gf?36;2d:hl4m;:k7a6<72-;on7;>3:l2`d<d32c?i?4?:%3gf?36;2d:hl4k;:k7a4<72-;on7;>3:l2`d<b32c?i=4?:%3gf?36;2d:hl4i;:k7``<72-;on7;>3:l2`d<6821b8ij50;&2`g<29:1e=io51098m1bd290/=il55018j4bf28807d:kb;29 4be2<;87c?ka;30?>o3lh0;6)?kb;727>h6lh0:865f4e;94?"6lk0>=>5a1ec950=<a=n36=4+1e`9145<f8nj6<84;h6g3?6=,8ni68?<;o3ge?7032c?h;4?:%3gf?36;2d:hl4>8:9j0a3=83.:ho4:129m5ag=9010e9h9:18'5ad==890b<jn:0c8?l2a=3:1(<jm:430?k7ci3;i76g;f583>!7cj3?:?6`>d`82g>=n<o91<7*>dc8656=i9mk1=i54i5d1>5<#9mh19<=4n0fb>4c<3`>m=7>5$0fa>0743g;om7?i;:k7ad<72-;on7;>3:l2`d<5821b8ih50;&2`g<29:1e=io52098m1b3290/=il55018j4bf2;807d:k3;29 4be2<;87c?ka;00?>o2il0;66l;b183>4<729qC8lh4$0g5>1d73f;o47>5;|`24=<7280;6=uG4`d8 4c128:37b??7;29?xd283:1n94>a182a`}O<hl0V8?517y06?e=j39=6l4<4;35>67=9<0897=<:`8`>40=j3996<;537801?532:91?<4r$0g5>00e3-;>m7??6:&63?3112.>h7;9a:&2`6<6l>1b9n;50;9l1=`=831b9n650;9l0f7=831d9nl50;9j0f2=831b95=50;&2`g<20=1e=io50:9j1=4=83.:ho4:859m5ag=921b95?50;&2`g<20=1e=io52:9j1=6=83.:ho4:859m5ag=;21b9:h50;&2`g<20=1e=io54:9j12c=83.:ho4:859m5ag==21b9:j50;&2`g<20=1e=io56:9j12e=83.:ho4:859m5ag=?21b9:l50;&2`g<20=1e=io58:9j1f2=831d9;h50;9l1a1=83.:ho4:e09m5ag=821d9i850;&2`g<2m81e=io51:9l1a3=83.:ho4:e09m5ag=:21d9i:50;&2`g<2m81e=io53:9l1a5=83.:ho4:e09m5ag=<21d9i<50;&2`g<2m81e=io55:9l1a7=83.:ho4:e09m5ag=>21d9i>50;&2`g<2m81e=io57:9l1f`=83.:ho4:e09m5ag=021d9nk50;&2`g<2m81e=io59:9l1g>=83.:ho4:c39m5ag=821d9o950;&2`g<2k;1e=io51:9l1g0=83.:ho4:c39m5ag=:21d9o;50;&2`g<2k;1e=io53:9l1g2=83.:ho4:c39m5ag=<21d9o=50;&2`g<2k;1e=io55:9l1g4=83.:ho4:c39m5ag=>21d9o?50;&2`g<2k;1e=io57:9l1g6=83.:ho4:c39m5ag=021d9lh50;&2`g<2k;1e=io59:9j1de=83.:ho4:ae9m5ag=821b9ll50;&2`g<2im1e=io51:9j1dg=83.:ho4:ae9m5ag=:21b9l750;&2`g<2im1e=io53:9j1d>=83.:ho4:ae9m5ag=<21b9l950;&2`g<2im1e=io55:9j1d0=83.:ho4:ae9m5ag=>21b9l;50;&2`g<2im1e=io57:9j1d2=83.:ho4:ae9m5ag=021b9h=50;9l0f`=83.:ho4;d09m5ag=821d8nk50;&2`g<3l81e=io51:9l0fb=83.:ho4;d09m5ag=:21d8nm50;&2`g<3l81e=io53:9l0fd=83.:ho4;d09m5ag=<21d8no50;&2`g<3l81e=io55:9l0f?=83.:ho4;d09m5ag=>21d8n650;&2`g<3l81e=io57:9l0f1=83.:ho4;d09m5ag=021d8n850;&2`g<3l81e=io59:9l13e=831d9;850;9j1<>=83.:ho4:989m5ag=821b94950;&2`g<2101e=io51:9j1<0=83.:ho4:989m5ag=:21b94;50;&2`g<2101e=io53:9j1<2=83.:ho4:989m5ag=<21b94=50;&2`g<2101e=io55:9j1<4=83.:ho4:989m5ag=>21b94?50;&2`g<2101e=io57:9j1<6=83.:ho4:989m5ag=021b9nj50;9j13b=831b8n;50;9j1`2=831d9n950;9l1fe=831d8n<50;9l1fg=831b9n850;9l16?=83.:ho4:5b9m5ag=821d9>650;&2`g<2=j1e=io51:9l161=83.:ho4:5b9m5ag=:21d9>850;&2`g<2=j1e=io53:9l163=83.:ho4:5b9m5ag=<21d9>:50;&2`g<2=j1e=io55:9l164=83.:ho4:5b9m5ag=>21d9>?50;&2`g<2=j1e=io57:9l166=83.:ho4:5b9m5ag=021d9?h50;&2`g<2=j1e=io59:9l17c=83.:ho4:5b9m5ag=i21d9?j50;&2`g<2=j1e=io5b:9l17e=83.:ho4:5b9m5ag=k21d9?l50;&2`g<2=j1e=io5d:9l17g=83.:ho4:5b9m5ag=m21d9?750;&2`g<2=j1e=io5f:9l171=83.:ho4:5b9m5ag=9910c8<9:18'5ad==<i0b<jn:038?j35=3:1(<jm:47`?k7ci3;976a:2583>!7cj3?>o6`>d`827>=h=;91<7*>dc861f=i9mk1=954o401>5<#9mh198m4n0fb>43<3f?9=7>5$0fa>03d3g;om7?9;:m665<72-;on7;:c:l2`d<6?21d9<h50;&2`g<2=j1e=io51998k07b290/=il554a8j4bf28307b;<f;29 4be2<?h7c?ka;3b?>i2;l0;6)?kb;76g>h6lh0:n65`52f94?"6lk0>9n5a1ec95f=<g<9h6=4+1e`910e<f8nj6<j4;n70f?6=,8ni68;l;o3ge?7b32e>?l4?:%3gf?32k2d:hl4>f:9l165=83.:ho4:5b9m5ag=:910c8<7:18'5ad==<i0b<jn:338?j36l3:1(<jm:47`?k7ci38976a:1b83>!7cj3?>o6`>d`817>=n=>31<7*>dc863d=i9mk1<65f56:94?"6lk0>;l5a1ec95>=n=>=1<7*>dc863d=i9mk1>65f56494?"6lk0>;l5a1ec97>=n=>?1<7*>dc863d=i9mk1865f56694?"6lk0>;l5a1ec91>=n=>91<7*>dc863d=i9mk1:65f56094?"6lk0>;l5a1ec93>=n=>;1<7*>dc863d=i9mk1465f4g294?"6lk0>=>5a1ec94>=n<ll1<7*>dc8656=i9mk1=65f4dg94?"6lk0>=>5a1ec96>=n<ln1<7*>dc8656=i9mk1?65f4da94?"6lk0>=>5a1ec90>=n<lh1<7*>dc8656=i9mk1965f4d;94?"6lk0>=>5a1ec92>=n<l21<7*>dc8656=i9mk1;65f4d594?"6lk0>=>5a1ec9<>=n<l<1<7*>dc8656=i9mk1565f4d794?"6lk0>=>5a1ec9e>=n<l>1<7*>dc8656=i9mk1n65f4d194?"6lk0>=>5a1ec9g>=n<l81<7*>dc8656=i9mk1h65f4d394?"6lk0>=>5a1ec9a>=n<l:1<7*>dc8656=i9mk1j65f4eg94?"6lk0>=>5a1ec955=<a=no6=4+1e`9145<f8nj6<?4;h6gg?6=,8ni68?<;o3ge?7532c?ho4?:%3gf?36;2d:hl4>3:9j0ag=83.:ho4:129m5ag=9=10e9j6:18'5ad==890b<jn:078?l2c03:1(<jm:430?k7ci3;=76g;d683>!7cj3?:?6`>d`823>=n<m<1<7*>dc8656=i9mk1=554i5f6>5<#9mh19<=4n0fb>4?<3`>m:7>5$0fa>0743g;om7?n;:k7b0<72-;on7;>3:l2`d<6j21b8k:50;&2`g<29:1e=io51b98m1`4290/=il55018j4bf28n07d:i2;29 4be2<;87c?ka;3f?>o3n80;6)?kb;727>h6lh0:j65f4dc94?"6lk0>=>5a1ec965=<a=nm6=4+1e`9145<f8nj6??4;h6g0?6=,8ni68?<;o3ge?4532c?h>4?:%3gf?36;2d:hl4=3:9j0f5=831b9l<50;&2`g<2i:1e=io50:9j1d7=83.:ho4:a29m5ag=921b9l>50;&2`g<2i:1e=io52:9j1<`=83.:ho4:a29m5ag=;21b94k50;&2`g<2i:1e=io54:9j1<b=83.:ho4:a29m5ag==21b94m50;&2`g<2i:1e=io56:9j1<d=83.:ho4:a29m5ag=?21b94o50;&2`g<2i:1e=io58:9j1=b=83.:ho4:8d9m5ag=821b95m50;&2`g<20l1e=io51:9j1=d=83.:ho4:8d9m5ag=:21b95o50;&2`g<20l1e=io53:9j1=?=83.:ho4:8d9m5ag=<21b95650;&2`g<20l1e=io55:9j1=1=83.:ho4:8d9m5ag=>21b95850;&2`g<20l1e=io57:9j1=3=83.:ho4:8d9m5ag=021d9:>50;9l0a4=831b9lk50;9a0gg=83;1<7>t$0g5>46?3A>i56F;ag9l551=831vn9lm:182>5<7s-;n:7:m0:J7f<=O<hl0c<j7:188yg2>k3:1?7>50z&2a3<an2B?n45G4`d8L1b<,8<=68m6;%322?4<a<81<75f5g83>>i6lm0;66sm4`594?5=83:p(<k9:gd8L1d>3A>jj6F;d:&223<2k01/=<852:k66?6=3`?m6=44o0fg>5<<uk>2n7>53;294~"6m?0mj6F;b89K0d`<@=n0(<89:4a:?!76>380e8<50;9j1c<722e:hi4?::a0d3=83?1<7>t$0g5>4633A>i56F;ag9K0a=#9?<19n74$035>7=n=;0;66g:6;29?l3a2900e<jl:188k4bc2900qo:n6;297?6=8r.:i;4if:J7f<=O<hl0D9j4$045>0e>3-;::7<4i4094?=n=o0;66a>de83>>{e<0k1<7;50;2x 4c128:?7E:m9:J7ec=O<m1/=;855b;8 4712;1b9?4?::k62?6=3`?m6=44i0f`>5<<g8no6=44}c6b0?6=<3:1<v*>e78246=O<k30D9oi;%322?4<a<81<75f5g83>>o6lj0;66a>de83>>{e<h91<7:50;2x 4c128:87E:m9:J7ec=#98<1>6g:2;29?l3a2900e<jl:188k4bc2900qo:n2;290?6=8r.:i;4>029K0g?<@=km7)?>6;08m04=831b9k4?::k2`f<722e:hi4?::a0db=83>1<7>t$0g5>4643A>i56F;ag9'540=:2c>>7>5;h7e>5<<a8nh6=44o0fg>5<<uk>jo7>54;294~"6m?0:<>5G4c;8L1ga3-;::7<4i4094?=n=o0;66g>db83>>i6lm0;66sm32;94?2=83:p(<k9:020?M2e12B?mk5+1049<>o2:3:17d;i:188m4bd2900c<jk:188yg4cm3:197>50z&2a3<68;1C8o74H5ce?!76>380e8<50;9j1g<722c>j7>5;h3gg?6=3f;oh7>5;|`1`c<72<0;6=u+1d49554<@=h27E:nf:&253<53`?96=44i4`94?=n=o0;66g>db83>>i6lm0;66sm2d294?3=83:p(<k9:021?M2e12B?mk5+10496>o2:3:17d;m:188m0`=831b=im50;9l5ab=831vn?k>:186>5<7s-;n:7??2:J7f<=O<hl0(<?9:39j17<722c>n7>5;h7e>5<<a8nh6=44o0fg>5<<uk8n>7>55;294~"6m?0:<?5G4c;8L1ga3-;::7<4i4094?=n=k0;66g:f;29?l7ck3:17b?kd;29?xd5m:0;684?:1y'5`0=9980D9l6;I6bb>"69?097d;=:188m0d=831b9k4?::k2`f<722e:hi4?::a6`2=83?1<7>t$0g5>4653A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75f1ea94?=h9mn1<75rb3g6>5<2290;w)?j6;336>N3j01C8lh4$035>7=n=;0;66g:b;29?l3a2900e<jl:188k4bc2900qo<j6;291?6=8r.:i;4>039K0g?<@=km7)?>6;08m04=831b9o4?::k6b?6=3`;oo7>5;n3g`?6=3th9i:4?:483>5}#9l<1==<4H5`:?M2fn2.:=;4=;h71>5<<a<h1<75f5g83>>o6lj0;66a>de83>>{e;hn1<7:50;2x 4c128:87E:m9:J7ec=#98<1>6g:2;29?l3a2900e<jl:188k4bc2900qo=nc;290?6=8r.:i;4>029K0g?<@=km7)?>6;08m04=831b9k4?::k2`f<722e:hi4?::a7`6=83>1<7>t$0g5>4673A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75`1ef94?=zj:o:6=4;:183!7b>3;;<6F;b89K0d`<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo=j2;290?6=8r.:i;4>019K0g?<@=km7)?>6;08m04=831b9o4?::k6b?6=3f;oh7>5;|`0a6<72=0;6=u+1d49556<@=h27E:nf:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e;l>1<7:50;2x 4c128:;7E:m9:J7ec=#98<1>6g:2;29?l3e2900e8h50;9l5ab=831vn>k::187>5<7s-;n:7??0:J7f<=O<hl0(<?9:39j17<722c>n7>5;h7e>5<<g8no6=44}c1f2?6=<3:1<v*>e78245=O<k30D9oi;%322?4<a<81<75f5c83>>o2n3:17b?kd;29?xd4m>0;694?:1y'5`0=99:0D9l6;I6bb>"69?097d;=:188m0d=831b9k4?::m2`a<722wi?h650;694?6|,8o=6<>?;I6a=>N3io1/=<852:k66?6=3`?i6=44i4d94?=h9mn1<75rb2g:>5<3290;w)?j6;334>N3j01C8lh4$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg4dj3:1?7>50z&2a3<6>91C8o74H5ce?!76>38i7d??a;29?l77j3:17b?k6;29?xd5k:0;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg4c<3:1?7>50z&2a3<3j11C8o74H5ce?l3?2900e<;m:188k4b12900qo<lc;297?6=8r.:i;4>619K0g?<@=km7)?>6;0a?l77i3:17d??b;29?j7c>3:17pl=c583>1<729q/=h851758L1d>3A>jj6g:8;29?l072900e<ji:188k4b12900qo<k5;297?6=8r.:i;4;b99K0g?<@=km7d;7:188m43e2900c<j9:188yg4dl3:1?7>50z&2a3<6>91C8o74H5ce?!76>38i7d??a;29?l77j3:17b?k6;29?xd5k<0;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg4c>3:1?7>50z&2a3<3j11C8o74H5ce?l3?2900e<;m:188k4b12900qo<le;297?6=8r.:i;4>619K0g?<@=km7)?>6;0a?l77i3:17d??b;29?j7c>3:17pl=c783>1<729q/=h851758L1d>3A>jj6g:8;29?l072900e<ji:188k4b12900qo<k7;297?6=8r.:i;4;b99K0g?<@=km7d;7:188m43e2900c<j9:188yg4dn3:1?7>50z&2a3<6>91C8o74H5ce?!76>38i7d??a;29?l77j3:17b?k6;29?xd5k>0;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg4c03:1?7>50z&2a3<3j11C8o74H5ce?l3?2900e<;m:188k4b12900qo<k0;297?6=8r.:i;4>619K0g?<@=km7)?>6;0a?l77i3:17d??b;29?j7c>3:17pl=c983>1<729q/=h851758L1d>3A>jj6g:8;29?l072900e<ji:188k4b12900qo<k9;297?6=8r.:i;4;b99K0g?<@=km7d;7:188m43e2900c<j9:188yg4c93:1?7>50z&2a3<6>91C8o74H5ce?!76>38i7d??a;29?l77j3:17b?k6;29?xd5k00;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg4ci3:1?7>50z&2a3<3j11C8o74H5ce?l3?2900e<;m:188k4b12900qo<k2;297?6=8r.:i;4>619K0g?<@=km7)?>6;0a?l77i3:17d??b;29?j7c>3:17pl=c`83>1<729q/=h851758L1d>3A>jj6g:8;29?l072900e<ji:188k4b12900qo<kb;297?6=8r.:i;4;b99K0g?<@=km7d;7:188m43e2900c<j9:188yg4c;3:1?7>50z&2a3<6>91C8o74H5ce?!76>38i7d??a;29?l77j3:17b?k6;29?xd5lj0;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl<ce83>6<729q/=h851728L1d>3A>jj6*>1781f>o68h0;66g>0c83>>i6l?0;66sm3b794?2=83:p(<k9:044?M2e12B?mk5f5983>>o183:17d?kf;29?j7c>3:17pl<d783>6<729q/=h854c:8L1d>3A>jj6g:8;29?l72j3:17b?k6;29?xd4kl0;6>4?:1y'5`0=9?:0D9l6;I6bb>"69?09n6g>0`83>>o68k0;66a>d783>>{e;j<1<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd4l>0;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl<cg83>6<729q/=h851728L1d>3A>jj6*>1781f>o68h0;66g>0c83>>i6l?0;66sm3b594?2=83:p(<k9:044?M2e12B?mk5f5983>>o183:17d?kf;29?j7c>3:17pl<d983>6<729q/=h854c:8L1d>3A>jj6g:8;29?l72j3:17b?k6;29?xd4l90;6>4?:1y'5`0=9?:0D9l6;I6bb>"69?09n6g>0`83>>o68k0;66a>d783>>{e;j21<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd4l00;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl<d083>6<729q/=h851728L1d>3A>jj6*>1781f>o68h0;66g>0c83>>i6l?0;66sm3b;94?2=83:p(<k9:044?M2e12B?mk5f5983>>o183:17d?kf;29?j7c>3:17pl<d`83>6<729q/=h854c:8L1d>3A>jj6g:8;29?l72j3:17b?k6;29?xd4l;0;6>4?:1y'5`0=9?:0D9l6;I6bb>"69?09n6g>0`83>>o68k0;66a>d783>>{e;jk1<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd4lk0;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl<d283>6<729q/=h851728L1d>3A>jj6*>1781f>o68h0;66g>0c83>>i6l?0;66sm3b`94?2=83:p(<k9:044?M2e12B?mk5f5983>>o183:17d?kf;29?j7c>3:17pl<db83>6<729q/=h854c:8L1d>3A>jj6g:8;29?l72j3:17b?k6;29?xd4l=0;6>4?:1y'5`0=9?:0D9l6;I6bb>"69?09n6g>0`83>>o68k0;66a>d783>>{e;ji1<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd4lm0;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl<d483>6<729q/=h851728L1d>3A>jj6*>1781f>o68h0;66g>0c83>>i6l?0;66sm3eg94?5=83:p(<k9:5`;?M2e12B?mk5f5983>>o6=k0;66a>d783>>{e;831<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd4910;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg56?3:187>50z&2a3<6>>1C8o74H5ce?l3?2900e;>50;9j5a`=831d=i850;9~f671290?6=4?{%3f2?71?2B?n45G4`d8m0>=831b:=4?::k2`c<722e:h;4?::a743=83>1<7>t$0g5>4003A>i56F;ag9j1=<722c=<7>5;h3gb?6=3f;o:7>5;|`06f<72=0;6=u+1d49531<@=h27E:nf:k6<?6=3`<;6=44i0fe>5<<g8n=6=44}c11f?6=<3:1<v*>e78222=O<k30D9oi;h7;>5<<a?:1<75f1ed94?=h9m<1<75rb20b>5<3290;w)?j6;353>N3j01C8lh4i4:94?=n>90;66g>dg83>>i6l?0;66sm33;94?2=83:p(<k9:044?M2e12B?mk5f5983>>o183:17d?kf;29?j7c>3:17pl<2983>1<729q/=h851758L1d>3A>jj6g:8;29?l072900e<ji:188k4b12900qo=7c;290?6=8r.:i;4>669K0g?<@=km7d;7:188m36=831b=ih50;9l5a0=831vn>6m:187>5<7s-;n:7?97:J7f<=O<hl0e8650;9j25<722c:hk4?::m2`3<722wi?5o50;694?6|,8o=6<88;I6a=>N3io1b954?::k54?6=3`;oj7>5;n3g2?6=3th8444?:583>5}#9l<1=;94H5`:?M2fn2c>47>5;h43>5<<a8nm6=44o0f5>5<<uk9347>54;294~"6m?0:::5G4c;8L1ga3`?36=44i7294?=n9ml1<75`1e494?=zj:3m6=4;:183!7b>3;=;6F;b89K0d`<a<21<75f6183>>o6lo0;66a>d783>>{e;0o1<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd41m0;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg5>k3:187>50z&2a3<6>>1C8o74H5ce?l3?2900e;>50;9j5a`=831d=i850;9~f6?e290?6=4?{%3f2?71?2B?n45G4`d8m0>=831b:=4?::k2`c<722e:h;4?::a65>=83>1<7>t$0g5>4673A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75`1ef94?=zj;:<6=4;:183!7b>3;;<6F;b89K0d`<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo<?6;290?6=8r.:i;4>019K0g?<@=km7)?>6;08m04=831b9o4?::k6b?6=3f;oh7>5;|`140<72=0;6=u+1d49556<@=h27E:nf:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e:9>1<7:50;2x 4c128:;7E:m9:J7ec=#98<1>6g:2;29?l3e2900e8h50;9l5ab=831vn?><:187>5<7s-;n:7??0:J7f<=O<hl0(<?9:39j17<722c>n7>5;h7e>5<<g8no6=44}c036?6=<3:1<v*>e78245=O<k30D9oi;%322?4<a<81<75f5c83>>o2n3:17b?kd;29?xd5880;694?:1y'5`0=99:0D9l6;I6bb>"69?097d;=:188m0d=831b9k4?::m2`a<722wi>=>50;694?6|,8o=6<>?;I6a=>N3io1/=<852:k66?6=3`?i6=44i4d94?=h9mn1<75rb34b>5<3290;w)?j6;334>N3j01C8lh4$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg4113:187>50z&2a3<6891C8o74H5ce?!76>380e8<50;9j1g<722c>j7>5;n3g`?6=3th9:54?:583>5}#9l<1==>4H5`:?M2fn2.:=;4=;h71>5<<a<h1<75f5g83>>i6lm0;66sm27594?2=83:p(<k9:023?M2e12B?mk5+10496>o2:3:17d;m:188m0`=831d=ij50;9~f701290?6=4?{%3f2?7782B?n45G4`d8 4712;1b9?4?::k6f?6=3`?m6=44o0fg>5<<uk8=97>54;294~"6m?0:<=5G4c;8L1ga3-;::7<4i4094?=n=k0;66g:f;29?j7cl3:17pl=6583>1<729q/=h851128L1d>3A>jj6*>1781?l352900e8l50;9j1c<722e:hi4?::a635=83>1<7>t$0g5>4673A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75`1ef94?=zj;<96=4;:183!7b>3;;<6F;b89K0d`<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo<m2;290?6=8r.:i;4>019K0g?<@=km7)?>6;08m04=831b9o4?::k6b?6=3f;oh7>5;|`1f4<72=0;6=u+1d49556<@=h27E:nf:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e:k:1<7:50;2x 4c128:;7E:m9:J7ec=#98<1>6g:2;29?l3e2900e8h50;9l5ab=831vn?oi:187>5<7s-;n:7??0:J7f<=O<hl0(<?9:39j17<722c>n7>5;h7e>5<<g8no6=44}c0ba?6=<3:1<v*>e78245=O<k30D9oi;%322?4<a<81<75f5c83>>o2n3:17b?kd;29?xd5im0;694?:1y'5`0=99:0D9l6;I6bb>"69?097d;=:188m0d=831b9k4?::m2`a<722wi>lm50;694?6|,8o=6<>?;I6a=>N3io1/=<852:k66?6=3`?i6=44i4d94?=h9mn1<75rb3ca>5<3290;w)?j6;334>N3j01C8lh4$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg4fi3:187>50z&2a3<6891C8o74H5ce?!76>380e8<50;9j1g<722c>j7>5;n3g`?6=3th99=4?:583>5}#9l<1==>4H5`:?M2fn2.:=;4=;h71>5<<a<h1<75f5g83>>i6lm0;66sm25d94?2=83:p(<k9:023?M2e12B?mk5+10496>o2:3:17d;m:188m0`=831d=ij50;9~f72b290?6=4?{%3f2?7782B?n45G4`d8 4712;1b9?4?::k6f?6=3`?m6=44o0fg>5<<uk8?h7>54;294~"6m?0:<=5G4c;8L1ga3-;::7<4i4094?=n=k0;66g:f;29?j7cl3:17pl=4b83>1<729q/=h851128L1d>3A>jj6*>1781?l352900e8l50;9j1c<722e:hi4?::a61d=83>1<7>t$0g5>4673A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75`1ef94?=zj;>j6=4;:183!7b>3;;<6F;b89K0d`<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo<;9;290?6=8r.:i;4>019K0g?<@=km7)?>6;08m04=831b9o4?::k6b?6=3f;oh7>5;|`10=<72=0;6=u+1d49556<@=h27E:nf:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e:h:1<7:50;2x 4c128:;7E:m9:J7ec=O<m1/=;855b;8 4712;1b9?4?::k6f?6=3`?m6=44o0fg>5<<uk82j7>54;294~"6m?0:<=5G4c;8L1ga3A>o7)?96;7`=>"69?097d;=:188m0d=831b9k4?::m2`a<722wi>4k50;694?6|,8o=6<>?;I6a=>N3io1C8i5+17491f?<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo<6d;290?6=8r.:i;4>019K0g?<@=km7E:k;%352?3d12.:=;4=;h71>5<<a<h1<75f5g83>>i6lm0;66sm28a94?2=83:p(<k9:023?M2e12B?mk5G4e9'530==j30(<?9:39j17<722c>n7>5;h7e>5<<g8no6=44}c0:f?6=<3:1<v*>e78245=O<k30D9oi;I6g?!71>3?h56*>1781?l352900e8l50;9j1c<722e:hi4?::a6<g=83>1<7>t$0g5>4673A>i56F;ag9K0a=#9?<19n74$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg4>13:187>50z&2a3<6891C8o74H5ce?M2c3-;=:7;l9:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e:021<7:50;2x 4c128:;7E:m9:J7ec=O<m1/=;855b;8 4712;1b9?4?::k6f?6=3`?m6=44o0fg>5<<uk88i7>54;294~"6m?0:<=5G4c;8L1ga3A>o7)?96;7`=>"69?097d;=:188m0d=831b9k4?::m2`a<722wi>>j50;694?6|,8o=6<>?;I6a=>N3io1C8i5+17491f?<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo<<c;290?6=8r.:i;4>019K0g?<@=km7E:k;%352?3d12.:=;4=;h71>5<<a<h1<75f5g83>>i6lm0;66sm22`94?2=83:p(<k9:023?M2e12B?mk5G4e9'530==j30(<?9:39j17<722c>n7>5;h7e>5<<g8no6=44}c00e?6=<3:1<v*>e78245=O<k30D9oi;I6g?!71>3?h56*>1781?l352900e8l50;9j1c<722e:hi4?::a66?=83>1<7>t$0g5>4673A>i56F;ag9K0a=#9?<19n74$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg4403:187>50z&2a3<6891C8o74H5ce?M2c3-;=:7;l9:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e::=1<7:50;2x 4c128:;7E:m9:J7ec=O<m1/=;855b;8 4712;1b9?4?::k6f?6=3`?m6=44o0fg>5<<uk88:7>54;294~"6m?0:<=5G4c;8L1ga3A>o7)?96;7`=>"69?097d;=:188m0d=831b9k4?::m2`a<722wi>?m50;694?6|,8o=6<>?;I6a=>N3io1/=<852:k66?6=3`?i6=44i4d94?=h9mn1<75rb30a>5<3290;w)?j6;334>N3j01C8lh4$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg45i3:187>50z&2a3<6891C8o74H5ce?!76>380e8<50;9j1g<722c>j7>5;n3g`?6=3th9>44?:583>5}#9l<1==>4H5`:?M2fn2.:=;4=;h71>5<<a<h1<75f5g83>>i6lm0;66sm23:94?2=83:p(<k9:023?M2e12B?mk5+10496>o2:3:17d;m:188m0`=831d=ij50;9~f740290?6=4?{%3f2?7782B?n45G4`d8 4712;1b9?4?::k6f?6=3`?m6=44o0fg>5<<uk89:7>54;294~"6m?0:<=5G4c;8L1ga3-;::7<4i4094?=n=k0;66g:f;29?j7cl3:17pl=2483>1<729q/=h851128L1d>3A>jj6*>1781?l352900e8l50;9j1c<722e:hi4?::a672=83>1<7>t$0g5>4673A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75`1ef94?=zj;2n6=4;:183!7b>3;;<6F;b89K0d`<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo<7d;290?6=8r.:i;4>019K0g?<@=km7)?>6;08m04=831b9o4?::k6b?6=3f;oh7>5;|`1<f<72=0;6=u+1d49556<@=h27E:nf:&253<53`?96=44i4`94?=n=o0;66a>de83>>{e:1h1<7:50;2x 4c128:;7E:m9:J7ec=#98<1>6g:2;29?l3e2900e8h50;9l5ab=831vn?6n:187>5<7s-;n:7??0:J7f<=O<hl0(<?9:39j17<722c>n7>5;h7e>5<<g8no6=44}c0;=?6=<3:1<v*>e78245=O<k30D9oi;%322?4<a<81<75f5c83>>o2n3:17b?kd;29?xd5010;694?:1y'5`0=99:0D9l6;I6bb>"69?097d;=:188m0d=831b9k4?::m2`a<722wi>5950;694?6|,8o=6<>?;I6a=>N3io1/=<852:k66?6=3`?i6=44i4d94?=h9mn1<75rb3:5>5<3290;w)?j6;334>N3j01C8lh4$035>7=n=;0;66g:b;29?l3a2900c<jk:188yg5093:197>50z&2a3<6881C8o74H5ce?!76>380e8<50;9j13<722c>n7>5;h7e>5<<g8no6=44}c144?6==3:1<v*>e78244=O<k30D9oi;%322?4<a<81<75f5783>>o2j3:17d;i:188k4bc2900qo=9f;291?6=8r.:i;4>009K0g?<@=km7)?>6;08m04=831b9;4?::k6f?6=3`?m6=44o0fg>5<<uk9=i7>55;294~"6m?0:<<5G4c;8L1ga3-;::7<4i4094?=n=?0;66g:b;29?l3a2900c<jk:188yg51l3:197>50z&2a3<6881C8o74H5ce?!76>380e8<50;9j13<722c>n7>5;h7e>5<<g8no6=44}c15g?6==3:1<v*>e78244=O<k30D9oi;%322?4<a<81<75f5783>>o2j3:17d;i:188k4bc2900qo=9a;291?6=8r.:i;4>009K0g?<@=km7)?>6;08m04=831b9;4?::k6f?6=3`?m6=44o0fg>5<<uk9=57>55;294~"6m?0:<95G4c;8L1ga3-;::764i4094?=n=?0;66g:f;29?l7ck3:17b?kd;29?xd4>k0;684?:1y'5`0=99;0D9l6;I6bb>"69?097d;=:188m00=831b9o4?::k6b?6=3f;oh7>5;|`01`<72:0;6=u+1d490g><@=h27E:nf:k6<?6=3`;>n7>5;n3g2?6=3th89i4?:283>5}#9l<18o64H5`:?M2fn2c>47>5;h36f?6=3f;o:7>5;|`011<72=0;6=u+1d49531<@=h27E:nf:k6<?6=3`<;6=44i0fe>5<<g8n=6=44}c16g?6=;3:1<v*>e787f==O<k30D9oi;h7;>5<<a8?i6=44o0f5>5<<uk9>>7>54;294~"6m?0:::5G4c;8L1ga3`?36=44i7294?=n9ml1<75`1e494?=zj:?i6=4<:183!7b>3>i46F;b89K0d`<a<21<75f14`94?=h9m<1<75rb273>5<3290;w)?j6;353>N3j01C8lh4i4:94?=n>90;66g>dg83>>i6l?0;66sm34c94?5=83:p(<k9:5`;?M2e12B?mk5f5983>>o6=k0;66a>d783>>{e;=o1<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd4=00;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl<4b83>1<729q/=h851758L1d>3A>jj6g:8;29?l072900e<ji:188k4b12900qo=:8;297?6=8r.:i;4;b99K0g?<@=km7d;7:188m43e2900c<j9:188yg53i3:187>50z&2a3<6>>1C8o74H5ce?l3?2900e;>50;9j5a`=831d=i850;9~f63029086=4?{%3f2?2e02B?n45G4`d8m0>=831b=8l50;9l5a0=831vn>:7:187>5<7s-;n:7?97:J7f<=O<hl0e8650;9j25<722c:hk4?::m2`3<722wi?8850;194?6|,8o=69l7;I6a=>N3io1b954?::k21g<722e:h;4?::a710=83>1<7>t$0g5>4003A>i56F;ag9j1=<722c=<7>5;h3gb?6=3f;o:7>5;|`0<6<72<0;6=u+1d49557<@=h27E:nf:&253<53`?96=44i4494?=n=k0;66g:f;29?j7cl3:17pl<8383>0<729q/=h851138L1d>3A>jj6*>1781?l352900e8850;9j1g<722c>j7>5;n3g`?6=3th84<4?:483>5}#9l<1==?4H5`:?M2fn2.:=;4=;h71>5<<a<<1<75f5c83>>o2n3:17b?kd;29?xd4090;684?:1y'5`0=99;0D9l6;I6bb>"69?097d;=:188m00=831b9o4?::k6b?6=3f;oh7>5;|`03c<72<0;6=u+1d49557<@=h27E:nf:&253<53`?96=44i4494?=n=k0;66g:f;29?j7cl3:17pl<7d83>0<729q/=h851138L1d>3A>jj6*>1781?l352900e8850;9j1g<722c>j7>5;n3g`?6=3th8;i4?:483>5}#9l<1==?4H5`:?M2fn2.:=;4=;h71>5<<a<<1<75f5c83>>o2n3:17b?kd;29?xd4?j0;684?:1y'5`0=99;0D9l6;I6bb>"69?097d;=:188m00=831b9o4?::k6b?6=3f;oh7>5;|`03g<72<0;6=u+1d49557<@=h27E:nf:&253<53`?96=44i4494?=n=k0;66g:f;29?j7cl3:17pl<0883>1<729q/=h851128L1d>3A>jj6*>1781?l352900e8l50;9j1c<722e:hi4?::a750=83>1<7>t$0g5>4673A>i56F;ag9'540=:2c>>7>5;h7a>5<<a<l1<75`1ef94?=zj:;;6=4;:183!7b>3;;<6F;b89K0d`<,8;=6?5f5383>>o2j3:17d;i:188k4bc2900qo=?d;290?6=8r.:i;4>029K0g?<@=km7)?>6;:8m04=831b9k4?::k2`f<722e:hi4?::a75e=83>1<7>t$0g5>4643A>i56F;ag9'540=02c>>7>5;h7e>5<<a8nh6=44o0fg>5<<uk>9;7>55;294~"6m?0:<<5G4c;8L1ga3-;::7<4i4094?=n=?0;66g:b;29?l3a2900c<jk:188yg25>3:197>50z&2a3<6881C8o74H5ce?!76>380e8<50;9j13<722c>n7>5;h7e>5<<g8no6=44}c611?6==3:1<v*>e78244=O<k30D9oi;%322?4<a<81<75f5783>>o2j3:17d;i:188k4bc2900qo:=4;291?6=8r.:i;4>009K0g?<@=km7)?>6;08m04=831b9;4?::k6f?6=3`?m6=44o0fg>5<<uk>9?7>55;294~"6m?0:<<5G4c;8L1ga3-;::7<4i4094?=n=?0;66g:b;29?l3a2900c<jk:188yg25:3:197>50z&2a3<6881C8o74H5ce?!76>380e8<50;9j13<722c>n7>5;h7e>5<<g8no6=44}c614?6==3:1<v*>e78241=O<k30D9oi;%322?><a<81<75f5783>>o2n3:17d?kc;29?j7cl3:17pl;1g83>0<729q/=h851138L1d>3A>jj6*>1781?l352900e8850;9j1g<722c>j7>5;n3g`?6=3th?><4?:483>5}#9l<1==?4H5`:?M2fn2.:=;4=;h71>5<<a<<1<75f5c83>>o2n3:17b?kd;29?xd39=0;6>4?:1y'5`0=<k20D9l6;I6bb>o203:17d?:b;29?j7c>3:17pl;1283>6<729q/=h854c:8L1d>3A>jj6g:8;29?l72j3:17b?k6;29?xd38h0;694?:1y'5`0=9?=0D9l6;I6bb>o203:17d8?:188m4ba2900c<j9:188yg26:3:1?7>50z&2a3<3j11C8o74H5ce?l3?2900e<;m:188k4b12900qo:?8;290?6=8r.:i;4>669K0g?<@=km7d;7:188m36=831b=ih50;9l5a0=831vn9?>:180>5<7s-;n:7:m8:J7f<=O<hl0e8650;9j50d=831d=i850;9~f161290?6=4?{%3f2?71?2B?n45G4`d8m0>=831b:=4?::k2`c<722e:h;4?::a046=8391<7>t$0g5>1d?3A>i56F;ag9j1=<722c:9o4?::m2`3<722wi8=:50;694?6|,8o=6<88;I6a=>N3io1b954?::k54?6=3`;oj7>5;n3g2?6=3th?<k4?:283>5}#9l<18o64H5`:?M2fn2c>47>5;h36f?6=3f;o:7>5;|`747<72=0;6=u+1d49531<@=h27E:nf:k6<?6=3`<;6=44i0fe>5<<g8n=6=44}c63a?6=;3:1<v*>e787f==O<k30D9oi;h7;>5<<a8?i6=44o0f5>5<<uk>;<7>54;294~"6m?0:::5G4c;8L1ga3`?36=44i7294?=n9ml1<75`1e494?=zj=:o6=4<:183!7b>3>i46F;b89K0d`<a<21<75f14`94?=h9m<1<75rb2df>5<3290;w)?j6;353>N3j01C8lh4i4:94?=n>90;66g>dg83>>i6l?0;66sm41a94?5=83:p(<k9:5`;?M2e12B?mk5f5983>>o6=k0;66a>d783>>{e;oi1<7:50;2x 4c128<<7E:m9:J7ec=n=10;66g90;29?l7cn3:17b?k6;29?xd3;:0;684?:1y'5`0=99;0D9l6;I6bb>"69?097d;=:188m00=831b9o4?::k6b?6=3f;oh7>5;|`774<72<0;6=u+1d49552<@=h27E:nf:&253<?3`?96=44i4494?=n=o0;66g>db83>>i6lm0;66sm42094?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi8>:50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<:?1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a060=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm42594?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi8>650;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<:31<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a01d=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm45c94?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi89750;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<=21<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a011=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm45494?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi89;50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<=>1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a015=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm47;94?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi8;650;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<?=1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a030=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm47794?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi8;:50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<?81<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a037=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm47294?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi88h50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<<o1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a00b=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm44a94?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi88l50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<<k1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a00?=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm44594?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi88850;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<<?1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a002=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm44194?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi88<50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<<;1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a006=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm45d94?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi89k50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<?l1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a03c=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm47f94?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi8;m50;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<?h1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a03g=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm47194?3=83:p(<k9:022?M2e12B?mk5+10496>o2:3:17d;9:188m0d=831b9k4?::m2`a<722wi88650;794?6|,8o=6<>>;I6a=>N3io1/=<852:k66?6=3`?=6=44i4`94?=n=o0;66a>de83>>{e<=n1<7;50;2x 4c128::7E:m9:J7ec=#98<1>6g:2;29?l312900e8l50;9j1c<722e:hi4?::a01e=83?1<7>t$0g5>4663A>i56F;ag9'540=:2c>>7>5;h75>5<<a<h1<75f5g83>>i6lm0;66sm4`;94?5=83:p(<k9:043?M2e12B?mk5+10495==n99k1<75f11`94?=h9m<1<75rb5;f>5<4290;w)?j6;354>N3j01C8lh4$035>4><a8:j6=44i02a>5<<g8n=6=44}c05g?6=;3:1<v*>e78225=O<k30D9oi;%322?7b3`;;m7>5;h33f?6=3f;o:7>5;|`14d<72:0;6=u+1d49536<@=h27E:nf:&253<6m2c:<l4?::k24g<722e:h;4?::a5c0=8391<7>t$0g5>4073A>i56F;ag9'540=9l1b==o50;9j55d=831d=i850;9~f4`229086=4?{%3f2?7182B?n45G4`d8 47128o0e<>n:188m46e2900c<j9:188yg7a<3:1?7>50z&2a3<6>91C8o74H5ce?!76>3;n7d??a;29?l77j3:17b?k6;29?xd6n:0;6>4?:1y'5`0=9?:0D9l6;I6bb>"69?0:i6g>0`83>>o68k0;66a>d783>>{e9o81<7=50;2x 4c128<;7E:m9:J7ec=#98<1=h5f11c94?=n99h1<75`1e494?=zj8l:6=4<:183!7b>3;=<6F;b89K0d`<,8;=6<k4i02b>5<<a8:i6=44o0f5>5<<uk;m<7>53;294~"6m?0::=5G4c;8L1ga3-;::7?j;h33e?6=3`;;n7>5;n3g2?6=3th:ik4?:283>5}#9l<1=;>4H5`:?M2fn2.:=;4>e:k24d<722c:<o4?::m2`3<722wi=hk50;194?6|,8o=6<8?;I6a=>N3io1/=<851d9j55g=831b==l50;9l5a0=831vn<kk:180>5<7s-;n:7?90:J7f<=O<hl0(<?9:0g8m46f2900e<>m:188k4b12900qo?jc;297?6=8r.:i;4>619K0g?<@=km7)?>6;3f?l77i3:17d??b;29?j7c>3:17pl>ec83>6<729q/=h851728L1d>3A>jj6*>1782a>o68h0;66g>0c83>>i6l?0;66sm1dc94?5=83:p(<k9:043?M2e12B?mk5+10495`=n99k1<75f11`94?=h9m<1<75rb0g:>5<4290;w)?j6;354>N3j01C8lh4$035>4c<a8:j6=44i02a>5<<g8n=6=44}c3f<?6=;3:1<v*>e78225=O<k30D9oi;%322?7b3`;;m7>5;h33f?6=3f;o:7>5;|`2a2<72:0;6=u+1d49536<@=h27E:nf:&253<6m2c:<l4?::k24g<722e:h;4?::a63c=83>1<7>t$0g5>4053A>i56F;ag9'540=:m1b==o50;9j55d=831b==m50;9l5a0=831vn?>l:187>5<7s-;n:7?92:J7f<=O<hl0(<?9:3f8m46f2900e<>m:188m46d2900c<j9:188yg5703:187>50z&2a3<6>;1C8o74H5ce?!76>38=7d??a;29?l77j3:17d??c;29?j7c>3:17pl=7183>0<729q/=h851778L1d>3A>jj6*>17816>o68h0;66g>0c83>>o68j0;66g>0e83>>i6l?0;66sm21g94?3=83:p(<k9:046?M2e12B?mk5+104967=n99k1<75f11`94?=n99i1<75f11f94?=h9m<1<75rb22e>5<2290;w)?j6;351>N3j01C8lh4$035>03<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c13f?6==3:1<v*>e78220=O<k30D9oi;%322?443`;;m7>5;h33f?6=3`;;o7>5;h33`?6=3f;o:7>5;|`0b7<72:0;6=u+1d49536<@=h27E:nf:&253<602c:<l4?::k24g<722e:h;4?::a752=83>1<7>t$0g5>4053A>i56F;ag9'540=:91b==o50;9j55d=831b==m50;9l5a0=831vn?9=:180>5<7s-;n:7?90:J7f<=O<hl0(<?9:0g8m46f2900e<>m:188k4b12900qo<>0;297?6=8r.:i;4>619K0g?<@=km7)?>6;3f?l77i3:17d??b;29?j7c>3:17pl=7583>1<729q/=h851708L1d>3A>jj6*>1781`>o68h0;66g>0c83>>o68j0;66a>d783>>{e:881<7:50;2x 4c128<97E:m9:J7ec=#98<1>i5f11c94?=n99h1<75f11a94?=h9m<1<75rb355>5<2290;w)?j6;351>N3j01C8lh4$035>74<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c020?6==3:1<v*>e78220=O<k30D9oi;%322?453`;;m7>5;h33f?6=3`;;o7>5;h33`?6=3f;o:7>5;|`046<72<0;6=u+1d49533<@=h27E:nf:&253<6l2c:<l4?::k24g<722c:<n4?::k24a<722e:h;4?::a0<0=8391<7>t$0g5>4073A>i56F;ag9'540=n01b==o50;9j55d=831d=i850;9~f6g>29086=4?{%3f2?7182B?n45G4`d8 4712;h0e<>n:188m46e2900c<j9:188yg5>>3:1?7>50z&2a3<6>91C8o74H5ce?!76>38i7d??a;29?l77j3:17b?k6;29?xd4;?0;6>4?:1y'5`0=9?:0D9l6;I6bb>"69?09n6g>0`83>>o68k0;66a>d783>>{e;;91<7=50;2x 4c128<;7E:m9:J7ec=#98<1>o5f11c94?=n99h1<75`1e494?=zj:k36=4::183!7b>3;=96F;b89K0d`<,8;=6?m4i02b>5<<a8:i6=44i02`>5<<a8:o6=44o0f5>5<<uk9297>55;294~"6m?0::85G4c;8L1ga3-;::7<l;h33e?6=3`;;n7>5;h33g?6=3`;;h7>5;n3g2?6=3th8?84?:483>5}#9l<1=;;4H5`:?M2fn2.:=;4=c:k24d<722c:<o4?::k24f<722c:<i4?::m2`3<722wi??<50;794?6|,8o=6<8:;I6a=>N3io1/=<852b9j55g=831b==l50;9j55e=831b==j50;9l5a0=831vn?k6:186>5<7s-;n:7?95:J7f<=O<hl0(<?9:69j55g=831b==l50;9j55e=831b==j50;9l5a0=831vn>o8:186>5<7s-;n:7?95:J7f<=O<hl0(<?9:3a8m46f2900e<>m:188m46d2900e<>k:188k4b12900qo=64;291?6=8r.:i;4>649K0g?<@=km7)?>6;0`?l77i3:17d??b;29?l77k3:17d??d;29?j7c>3:17pl<3583>0<729q/=h851778L1d>3A>jj6*>1781g>o68h0;66g>0c83>>o68j0;66g>0e83>>i6l?0;66sm33394?3=83:p(<k9:046?M2e12B?mk5+10496f=n99k1<75f11`94?=n99i1<75f11f94?=h9m<1<75rb2c5>5<2290;w)?j6;351>N3j01C8lh4$035>7e<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c1:7?6==3:1<v*>e78220=O<k30D9oi;%322?4d3`;;m7>5;h33f?6=3`;;o7>5;h33`?6=3f;o:7>5;|`076<72<0;6=u+1d49533<@=h27E:nf:&253<5k2c:<l4?::k24g<722c:<n4?::k24a<722e:h;4?::a776=83?1<7>t$0g5>4023A>i56F;ag9'540=:j1b==o50;9j55d=831b==m50;9j55b=831d=i850;9~f65e290?6=4?{%3f2?71:2B?n45G4`d8 4712oo0e<>n:188m46e2900e<>l:188k4b12900qo=nf;291?6=8r.:i;4>649K0g?<@=km7)?>6;6e?l77i3:17d??b;29?l77k3:17d??d;29?j7c>3:17pl<a483>0<729q/=h851778L1d>3A>jj6*>1781g>o68h0;66g>0c83>>o68j0;66g>0e83>>i6l?0;66sm38094?3=83:p(<k9:046?M2e12B?mk5+10496f=n99k1<75f11`94?=n99i1<75f11f94?=h9m<1<75rb211>5<2290;w)?j6;351>N3j01C8lh4$035>7e<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c12b?6==3:1<v*>e78220=O<k30D9oi;%322?4d3`;;m7>5;h33f?6=3`;;o7>5;h33`?6=3f;o:7>5;|`13<<72:0;6=u+1d49536<@=h27E:nf:&253<5j2c:<l4?::k24g<722e:h;4?::a641=8391<7>t$0g5>4073A>i56F;ag9'540=:k1b==o50;9j55d=831d=i850;9~f71d290?6=4?{%3f2?71:2B?n45G4`d8 4712;;0e<>n:188m46e2900e<>l:188k4b12900qo<>a;290?6=8r.:i;4>639K0g?<@=km7)?>6;02?l77i3:17d??b;29?l77k3:17b?k6;29?xd5?10;684?:1y'5`0=9??0D9l6;I6bb>"69?09i6g>0`83>>o68k0;66g>0b83>>o68m0;66a>d783>>{e:8<1<7;50;2x 4c128<>7E:m9:J7ec=#98<1>h5f11c94?=n99h1<75f11a94?=n99n1<75`1e494?=zj;oi6=4<:183!7b>3;=<6F;b89K0d`<,8;=6<64i02b>5<<a8:i6=44o0f5>5<<uk9in7>53;294~"6m?0::=5G4c;8L1ga3-;::7?j;h33e?6=3`;;n7>5;n3g2?6=3th9ii4?:583>5}#9l<1=;<4H5`:?M2fn2.:=;4>0:k24d<722c:<o4?::k24f<722e:h;4?::a7ge=83>1<7>t$0g5>4053A>i56F;ag9'540=:=1b==o50;9j55d=831b==m50;9l5a0=831vn?ki:186>5<7s-;n:7?95:J7f<=O<hl0(<?9:0d8m46f2900e<>m:188m46d2900e<>k:188k4b12900qo<i1;290?6=8r.:i;4>639K0g?<@=km7)?>6;0b?l77i3:17d??b;29?l77k3:17b?k6;29?xd4jo0;694?:1y'5`0=9?80D9l6;I6bb>"69?0>?6g>0`83>>o68k0;66g>0b83>>i6l?0;66sm2g694?3=83:p(<k9:046?M2e12B?mk5+104972=n99k1<75f11`94?=n99i1<75f11f94?=h9m<1<75rb2a3>5<2290;w)?j6;351>N3j01C8lh4$035>cb<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c0e`?6==3:1<v*>e78220=O<k30D9oi;%322?3<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c1a`?6=<3:1<v*>e78227=O<k30D9oi;%322?403`;;m7>5;h33f?6=3`;;o7>5;n3g2?6=3th9jl4?:483>5}#9l<1=;;4H5`:?M2fn2.:=;4;e:k24d<722c:<o4?::k24f<722c:<i4?::m2`3<722wi>k650;794?6|,8o=6<8:;I6a=>N3io1/=<851178m46f2900e<>m:188m46d2900e<>k:188k4b12900qo<ib;291?6=8r.:i;4>649K0g?<@=km7)?>6;db?l77i3:17d??b;29?l77k3:17d??d;29?j7c>3:17pl<5483>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd4=:0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl<5083>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd4<o0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl<4e83>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd4<k0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl<4883>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd4<>0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl;0c83>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd3800;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl;0683>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd38<0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl;0283>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd3880;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl<fg83>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd4nm0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl<5g83>7<729q/=h8514d8L1d>3A>jj6*>178f?l77i3:17b?k6;29?xd39<0;6?4?:1y'5`0=9<l0D9l6;I6bb>"69?0n7d??a;29?j7c>3:17pl<0183>0<729q/=h851778L1d>3A>jj6*>1780<>o68h0;66g>0c83>>o68j0;66g>0e83>>i6l?0;66sm2gd94?2=83:p(<k9:041?M2e12B?mk5+10496==n99k1<75f11`94?=n99i1<75`1e494?=zj::96=4::183!7b>3;=96F;b89K0d`<,8;=6;5f11c94?=n99h1<75f11a94?=n99n1<75`1e494?=zj:i96=4;:183!7b>3;=>6F;b89K0d`<,8;=6?64i02b>5<<a8:i6=44i02`>5<<g8n=6=44}c1a=?6==3:1<v*>e78220=O<k30D9oi;%322?0<a8:j6=44i02a>5<<a8:h6=44i02g>5<<g8n=6=44}c1`0?6==3:1<v*>e78220=O<k30D9oi;%322?333`;;m7>5;h33f?6=3`;;o7>5;h33`?6=3f;o:7>5;|`1b`<72<0;6=u+1d49533<@=h27E:nf:&253<a3`;;m7>5;h33f?6=3`;;o7>5;h33`?6=3f;o:7>5;|`0f`<72<0;6=u+1d49533<@=h27E:nf:&253<5=2c:<l4?::k24g<722c:<n4?::k24a<722e:h;4?::a6c0=83?1<7>t$0g5>4023A>i56F;ag9'540=:01b==o50;9j55d=831b==m50;9j55b=831d=i850;9~f7`2290>6=4?{%3f2?71=2B?n45G4`d8 47128l0e<>n:188m46e2900e<>l:188m46c2900c<j9:188yg5d;3:197>50z&2a3<6><1C8o74H5ce?!76>3827d??a;29?l77j3:17d??c;29?l77l3:17b?k6;29?xd4k80;684?:1y'5`0=9??0D9l6;I6bb>"69?0996g>0`83>>o68k0;66g>0b83>>o68m0;66a>d783>>{e:oi1<7;50;2x 4c128<>7E:m9:J7ec=#98<1h6g>0`83>>o68k0;66g>0b83>>o68m0;66a>d783>>{e;kk1<7<50;2x 4c128?27E:m9:J7ec=n9931<75`1e494?=zj=3?6=4na;294~"6m?0:hh5G4c;8L1ga3S?:6lu=f;13>47=9;0:57?n:0195g<6<3;h6p*>5487?!72>3>0(<>j:59'55`=<2.:==4;;%325?2<,8;9695+10190>"6m;087)?j3;18 4702=1/=<654:&25<<33-;:m7:4$03a>1=#98i186*>1e87?!76m3>0(<?i:59'576=<2.:><4;;%316?2<,888695+13690>"6:<0?7)?=6;68 4402=1/=?654:&26<<33-;9m7:4$00a>1=#9;i186*>2e87?!75m3>0(<<i:59'566=<2.:?<4;;%306?2<,898695+12690>"6;<0?7)?<6;68 4502=1/=>654:&27<<33-;8m7:4$01a>1=#9:i186*>3e87?!74m3>0(<=i:59'516=<2.:8<4;;%376?2<,8>8695+15690>"6<<0?7)?;6;68 4202=1/=9654:&20<<33-;?m7:4$06a>1=#9=i186*>4e87?!73m3>0(<:i:59'506=<2.:9<4;;%366?2<,8?8695+14690>"3j?0?n95+10690>"6m90:h85+14597>"6=1087):m5;6a0>"69<0?7d;6:188m0g=831bjo4?::keg?6=3`;n87>5;h3f1?6=3`>i>7>5;h6a7?6=3`>96=4+1e`904=i9mk1<65f4183>!7cj3>:7c?ka;38?l5a290/=il5409m5ag=:21b?h4?:%3gf?263g;om7=4;h1g>5<#9mh18<5a1ec90>=n;j0;6)?kb;62?k7ci3?07d=m:18'5ad=<81e=io56:9j7d<72-;on7:>;o3ge?1<3`926=4+1e`904=i9mk1465f4b83>!7cj3>i7c?ka;28?l2f290/=il54c9m5ag=921b844?:%3gf?2e3g;om7<4;h6;>5<#9mh18o5a1ec97>=n<>0;6)?kb;6a?k7ci3>07d:9:18'5ad=<k1e=io55:9j00<72-;on7:m;o3ge?0<3`>?6=4+1e`90g=i9mk1;65f4283>!7cj3>i7c?ka;:8?l1f290/=il5789m5ag=821b;54?:%3gf?1>3g;om7?4;h55>5<#9mh1;45a1ec96>=n?<0;6)?kb;5:?k7ci3907d9;:18'5ad=?01e=io54:9j36<72-;on796;o3ge?3<3`=96=4+1e`93<=i9mk1:65f7083>!7cj3=27c?ka;58?l17290/=il5789m5ag=021b:k4?:%3gf?1>3g;om774;h4f>5<#9mh1;45a1ec9e>=n>m0;6)?kb;5:?k7ci3h07d8m:18'5ad=?01e=io5c:9j2d<72-;on796;o3ge?b<3`<26=4+1e`93<=i9mk1i65f6983>!7cj3=27c?ka;d8?l00290/=il5789m5ag=9910e;850;&2`g<012d:hl4>1:9j20<72-;on796;o3ge?7532c=87>5$0fa>2?<f8nj6<=4;h40>5<#9mh1;45a1ec951=<a?81<7*>dc84=>h6lh0:965f8083>!7cj3=27c?ka;35?>o?83:1(<jm:6;8j4bf28=07d9i:18'5ad=?01e=io51998m2c=83.:ho489:l2`d<6121b;i4?:%3gf?1>3g;om7?n;:k4g?6=,8ni6:74n0fb>4d<3`=i6=4+1e`93<=i9mk1=n54i6594?"6lk0<56`>d`82`>=n>j0;6)?kb;5:?k7ci3;n76g91;29 4be2>30b<jn:0d8?l?e290/=il59`9m5ag=821b544?:%3gf??f3g;om7?4;h;4>5<#9mh15l5a1ec96>=n1?0;6)?kb;;b?k7ci3907d7::18'5ad=1h1e=io54:9j=1<72-;on77n;o3ge?3<3`386=4+1e`9=d=i9mk1:65f9383>!7cj33j7c?ka;58?l?6290/=il59`9m5ag=021b5=4?:%3gf??f3g;om774;h:e>5<#9mh15l5a1ec9e>=n0l0;6)?kb;;b?k7ci3h07d6l:18'5ad=1h1e=io5c:9j<g<72-;on77n;o3ge?b<3`2j6=4+1e`9=d=i9mk1i65f8883>!7cj33j7c?ka;d8?l>?290/=il59`9m5ag=9910e5950;&2`g<>i2d:hl4>1:9j<3<72-;on77n;o3ge?7532c397>5$0fa><g<f8nj6<=4;h:7>5<#9mh15l5a1ec951=<a191<7*>dc8:e>h6lh0:965fa383>!7cj33j7c?ka;35?>of93:1(<jm:8c8j4bf28=07do?:18'5ad=1h1e=io51998m<`=83.:ho46a:l2`d<6121b5h4?:%3gf??f3g;om7?n;:k:`?6=,8ni64o4n0fb>4d<3`3h6=4+1e`9=d=i9mk1=n54i8:94?"6lk02m6`>d`82`>=n0m0;6)?kb;;b?k7ci3;n76g72;29 4be20k0b<jn:0d8?lg0290/=il5a79m5ag=821bm84?:%3gf?g13g;om7?4;hc7>5<#9mh1m;5a1ec96>=ni:0;6)?kb;c5?k7ci3907dol:18'5ad=ik1e=io50:9jed<72-;on7om;o3ge?7<3`k26=4+1e`9eg=i9mk1>65fa983>!7cj3ki7c?ka;18?je1290/=il5c49m5ag=821do94?:%3gf?e23g;om7?4;na1>5<#9mh1o85a1ec96>=hk80;6)?kb;a6?k7ci3907bm?:18'5ad=k<1e=io54:9lfc<72-;on7m:;o3ge?3<3fhn6=4+1e`9g0=i9mk1:65`be83>!7cj3i>7c?ka;58?jdd290/=il5c49m5ag=021dno4?:%3gf?e23g;om774;n`b>5<#9mh1o85a1ec9e>=hj00;6)?kb;a6?k7ci3h07bl8:18'5ad=k<1e=io5c:9lf3<72-;on7m:;o3ge?b<3fh>6=4+1e`9g0=i9mk1i65`b583>!7cj3i>7c?ka;d8?jd4290/=il5c49m5ag=9910co<50;&2`g<d=2d:hl4>1:9lf4<72-;on7m:;o3ge?7532ei<7>5$0fa>f3<f8nj6<=4;nce>5<#9mh1o85a1ec951=<gho1<7*>dc8`1>h6lh0:965`ce83>!7cj3i>7c?ka;35?>idk3:1(<jm:b78j4bf28=07bmm:18'5ad=k<1e=io51998kfg=83.:ho4l5:l2`d<6121do44?:%3gf?e23g;om7?n;:m`<?6=,8ni6n;4n0fb>4d<3fi<6=4+1e`9g0=i9mk1=n54ob194?"6lk0h96`>d`82`>=hj10;6)?kb;a6?k7ci3;n76and;29 4be2j?0b<jn:0d8?j`4290/=il5f39m5ag=821dj<4?:%3gf?`53g;om7?4;nd3>5<#9mh1j?5a1ec96>=hmo0;6)?kb;d1?k7ci3907bk8:18'5ad=m?1e=io50:9la0<72-;on7k9;o3ge?7<3fo86=4+1e`9a3=i9mk1>65`e383>!7cj3o=7c?ka;18?jc6290/=il5e79m5ag=<21di=4?:%3gf?c13g;om7;4;nfe>5<#9mh1i;5a1ec92>=hll0;6)?kb;g5?k7ci3=07bjk:18'5ad=m?1e=io58:9l`f<72-;on7k9;o3ge??<3fni6=4+1e`9a3=i9mk1m65`d`83>!7cj3o=7c?ka;`8?jb?290/=il5e79m5ag=k21dh:4?:%3gf?c13g;om7j4;nf5>5<#9mh1i;5a1ec9a>=hl<0;6)?kb;g5?k7ci3l07bj;:18'5ad=m?1e=io51198ka5=83.:ho4j6:l2`d<6921dh?4?:%3gf?c13g;om7?=;:mg5?6=,8ni6h84n0fb>45<3fn;6=4+1e`9a3=i9mk1=954obd94?"6lk0n:6`>d`821>=hml0;6)?kb;g5?k7ci3;=76ajd;29 4be2l<0b<jn:058?jcd290/=il5e79m5ag=9110chl50;&2`g<b>2d:hl4>9:9lad<72-;on7k9;o3ge?7f32en57>5$0fa>`0<f8nj6<l4;ng;>5<#9mh1i;5a1ec95f=<gl>1<7*>dc8f2>h6lh0:h65`d883>!7cj3o=7c?ka;3f?>idm3:1(<jm:d48j4bf28l07bh7:18'5ad=n>1e=io50:9lb3<72-;on7h8;o3ge?7<3fl>6=4+1e`9b2=i9mk1>65`f583>!7cj3l<7c?ka;18?xd48<0;694?:1y'5`0=9?;0D9l6;I6bb>"69?0:i6g>0`83>>o68k0;66a>5b83>>i6l?0;66sm2g094?3=83:p(<k9:040?M2e12B?mk5+104962=n99k1<75f11`94?=n99i1<75`14a94?=h9m<1<75rb3d:>5<3290;w)?j6;350>N3j01C8lh4$035>7><a8:j6=44i02a>5<<a8:h6=44o07`>5<<uz?h87>56z\6g1=:;921==m4=22e>46c349;n7??d:?041<68j16?==511a8yv2c83:1;=uQ4e08Z1e53W?ho6P:c`9]0f7<V<i<7S;9f:\6gg=Y=>:0R86i;_6`b>X3kl1U8nj4^5a`?[2dj2T?ol5Q4b;8Z1e?3W>h;6P;c79>0gg=99=019o::4d891?f2<l019o;:4d891g42<l019o=:4d891gc2<l019ol:4d897bb28nh70<kf;3gg>;5m90:hn522d395ae<5;o96<jl;<0f7?7ck279i94>db9>6`3=9mi01?k9:0f`?84b?3;oo63<18854>;4910=<63<16854>;49?0=<63<14854>;4:j0=<63<2c854>;4:h0=<63<28854>;4:10=<63<8b854>;40k0=<63<8`854>;4000=<63<89854>;41o0=<63<9d854>;41m0=<63<9b854>;41k0=<63<55854>;4=;0=<63<51854>;4<l0=<63<4b854>;4<h0=<63<49854>;4<?0=<63;0`854>;3810=<63;07854>;38=0=<63;03854>;3890=<63<fd854>;4nj0=<63;9582a1=:<0>18o=4=5;7><d<5=3?6474=5;7><1<5=3?6484=5;7><3<5=3?64:4=5;7><5<5=3?64<4=5;7><7<5=3?64>4=5;7>=`<5=3?65k4=5;7>=e<5=3?65l4=5;7>=g<5=3?6574=5;7>=><5=3?6594=5;7>=0<5=3?65;4=5;7>=2<5=3?65=4=5;7>d4<5=3?6l?4=5;7>d6<5=3?64h4=5;7><c<5=3?64j4=5;7><e<5=3?6464=5;7>=b<5=3?65<4=5;7>de<5=3?6lo4=5;7>d?<5=3?6l64}r7`2?6=;rT>o;524`795ae<5=3j6<jl;|q623<72;qU9;84=22g>4bc3ty>i>4?:2y]1`5<5:l96<>m;<1bb?77k2wx9lk50;51[3fm27?5n4:2:?7=g<2:27?5l4:2:?7e1<2:27?m>4:2:?7e7<2:278?44:2:?1``<2:279hk4:2:?1a5<2:279i<4:2:?1a7<2:279i>4:2:?1a1<2:279i84:2:?1a3<2:279i:4:2:?12d<2:279:44:2:?12=<2:279::4:2:?123<2:279:84:2:?121<2:279:>4:2:?127<2:279n?4:2:?1f4<2:279n=4:2:?1ec<2:279mh4:2:?1ea<2:279mn4:2:?1eg<2:279ml4:2:?1e5<2:2795k4:2:?1=`<2:2795i4:2:?1=f<2:2795o4:2:?1=d<2:279544:2:?1==<2:279>n4:2:?16g<2:279>l4:2:?16<<2:279>54:2:?162<2:279>;4:2:?160<2:279>94:2:?034<2:278;=4:2:?02c<2:278:h4:2:?02a<2:278:n4:2:?02d<2:278:44:2:?02g<2:2784>4:2:?0<7<2:2784<4:2:?0<5<2:278;k4:2:?03`<2:278;i4:2:?03f<2:278;o4:2:?04<<2:278<;4:2:?055<2:278<i4:2:?04f<2:27?:44:2:?72=<2:27?::4:2:?723<2:27?:84:2:?721<2:27?:?4:2:?724<2:27?:=4:2:?71c<2:27?9h4:2:?71a<2:27?9n4:2:?71g<2:27?9l4:2:?71<<2:27?9:4:2:?713<2:27?984:2:?711<2:27?9>4:2:?717<2:27?9<4:2:?715<2:27?8k4:2:?70`<2:27?:k4:2:?72`<2:27?:i4:2:?72f<2:27?:o4:2:?72d<2:27?:>4:2:?71=<2:27?8i4:2:?70f<2:27?594:a:p13e=838pR88l;<1b`?7cl2wx9nj50;71[3dl27?m:4:2:?7e0<2:27?m;4:2:?7ea<2:27?mn4:2:?0ea<2:278mn4:2:?0a5<2:278i<4:2:?0a7<2:278i>4:2:?0a1<2:278i84:2:?0a3<2:278i:4:2:?0a=<2:278i44:2:?14=<2:279<:4:2:?143<2:279<84:2:?141<2:279<>4:2:?147<2:279<<4:2:?145<2:2799=4:2:?10c<2:2798h4:2:?10a<2:2798n4:2:?10g<2:2798l4:2:?10<<2:279854:2:?17`<2:279?i4:2:?17f<2:279?o4:2:?17d<2:279?44:2:?17=<2:279?:4:2:?173<2:2794h4:2:?1<a<2:2794n4:2:?1<g<2:2794l4:2:?1<<<2:279454:2:?1<2<2:2794;4:2:?762<2:27?>;4:2:?760<2:27?>94:2:?766<2:27?>?4:2:?765<2:27?=k4:2:?764<2:27??>4:2:?774<2:27???4:2:?771<2:27??84:2:?773<2:27??:4:2:?77=<2:27??44:2:?70g<2:27?8l4:2:?70<<2:27?854:2:?702<2:27?8;4:2:?700<2:27?894:2:?706<2:27?594:9:p1`4=838pR8j8;<1f=?7cl2wx9h>50;0xZ0b1349n47?kd:p1a`=838pR8j:;<1f3?7cl2wx9ik50;0xZ0b3349n:7?kd:p1ab=838pR8j<;<1f1?7cl2wx9im50;0xZ0b5349n87?kd:p1ad=838pR8j>;<1f7?7cl2wx9io50;0xZ0b7349n>7?kd:p1a?=838pR8mi;<1f5?7cl2wx9i650;0xZ0eb349n<7?kd:p10b=838pR8=6;<65=?7cl2wx98l50;0xZ05?34>=47?kd:p10g=838pR8=8;<653?7cl2wx98750;0xZ05134>=:7?kd:p10>=838pR8=:;<651?7cl2wx98950;0xZ05334>=87?kd:p103=838pR8==;<656?7cl2wx98:50;0xZ05634>==7?kd:p105=838pR8=?;<654?7cl2wx98<50;0xZ04a34>>j7?kd:p107=838pR8<j;<66a?7cl2wx98>50;0xZ04c34>>h7?kd:p11`=838pR8<l;<66g?7cl2wx99k50;0xZ04e34>>n7?kd:p11b=838pR8<n;<66e?7cl2wx99m50;0xZ04>34>>57?kd:p11g=838pR8<8;<663?7cl2wx99750;0xZ04134>>:7?kd:p11>=838pR8<:;<661?7cl2wx99950;0xZ04334>>87?kd:p110=838pR8<<;<667?7cl2wx99;50;0xZ04534>>>7?kd:p112=838pR8<>;<665?7cl2wx99=50;0xZ04734>><7?kd:p114=838pR8?i;<67b?7cl2wx99?50;0xZ07b34>?i7?kd:p132=838pR8=i;<65b?7cl2wx9;=50;0xZ05b34>=i7?kd:p134=838pR8=k;<65`?7cl2wx9;?50;0xZ05d34>=o7?kd:p136=838pR8=m;<65f?7cl2wx98h50;0xZ05f34>=m7?kd:p10c=838pR8=<;<657?7cl2wx98850;0xZ04?34>>47?kd:p11d=838pR8?k;<67`?7cl2wx99>50;0xZ07d34>?o7?kd:p1f5=838pR8l7;<0f3?7cl2wx9n?50;0xZ0d0348n:7?kd:p1f6=838pR8l9;<0f1?7cl2wx9oh50;0xZ0d2348n87?kd:p1gc=838pR8l;;<0f7?7cl2wx9oj50;0xZ0d4348n>7?kd:p1ge=838pR8l=;<0f5?7cl2wx9ol50;0xZ0d6348n<7?kd:p1gg=838pR8l?;<0gb?7cl2wx9o750;0xZ0ga348oi7?kd:p142=838pR9h?;<6:0?g03ty>=?4?:3y]0``<5=3?6:o4}r725?6=:rT?ih5248693==z{<;;6=4={_6f`>;31=0<:6s|51d94?4|V=oh70:64;56?xu28l0;6?uQ4d`891?32>>0q~;?c;296~X3m01684:5729~w06e2909wS:j8:?7=1<0:2wx9=o50;0xZ1c034>2879>;|q64<<72;qU8h84=5;7>d3<uz?;47>52z\7a0=:<0>1;=5rs424>5<5sW>n863;9585b>{t=9<1<7<t^5g0?82><3<n7p}:0483>7}Y<l80197;:7f8yv37<3:1>vP;e09>0<2=>k1v8><:181[2b827?5949a:p157=838pR9jj;<6:0?0>3ty><=4?:3y]0ab<5=3?6;64}r6eb?6=:rT?hn524869e1=z{=ln6=4={_6gf>;31=0=;6s|4gf94?4|V=nj70:64;45?xu3nj0;6?uQ4e;891?32??0q~:ib;296~X3l11684:5659~w1`f2909wS:k7:?7=1<1;2wx8k750;0xZ1b134>2878=;|q7b=<72;qU8i;4=5;7>=7<uz?:n7>52z\7b3=:<0>14=5rs43b>5<5sW>m963;958b7>{t=831<7<t^5d7?82><3=m7p}:1983>7}Y<o90197;:6g8yv36?3:1>vP;f39>0<2=?m1v8?9:181[2a927?5948c:p143=838pR9kn;<6:0?1e3ty><i4?:3y]0a`<5=3?6:94}r736?6=:rT?h95248692f=z{=l<6=4={_6g7>;31=0==6s|17`94?c|5=hi6<j7;<0`7?3?348o87;7;<1`1?3?349o:7;7;<121?3?349947;7;<1;<?3?3492n7;7;<162?3?349?:7;7;<63g?3?349mo7;7;<6:0?`e3ty?5o4?:2y>0<e==o1684l51ef891?f2<<0q~:6c;296~;31j0:hi5248g955g<uz>j:7>53z?7e2<2n27?m84:6:?7e3<6lm1v9o8:18182f?3;oh63;a8824d=z{=3j6=4<{<6:f?3a34>2m7?kd:?7=`<68k1v9o::18082f=3;oh63;a786b>;3i00:<o5rs5;g>5<3s4>j87?kc:?7e6<6lj168l<51ea891?b28n=7p};a083>70|5=k?6<jk;<10=?7ck279hh4:b:?1`c<2j279i=4:b:?1a4<2j279i?4:b:?1a6<2j279i94:b:?1a0<2j279i;4:b:?1a2<2j278;<4:b:?035<2j278:k4:b:?02`<2j278:i4:b:?02f<2j278:l4:b:?02<<6lj16?;l55c9>7=5==k16?5<55c9>7=7==k16?5>55c9>72`==k16?:k55c9>72b==k16?:m55c9>72d==k16?=755c9>750==k16?<>55c9>75b=9mi01>>l:0f`?84b13;;o63=fd824g=::oi1==o4}r6b4?6=:<q68l=51ef8970f2<h01?86:4`8970?2<h01?88:4`897012<h01?8::4`897032<h01?8<:4`897052<h01?l=:4`897d62<h01?l?:4`897ga2<h01?oj:4`897gc2<h01?ol:4`897ge2<h01?on:4`897g72<h01?7i:4`897?b2<h01?7k:4`897?d2<h01?7m:4`897?f2<h01?76:4`897??2<h01?<l:4`8974e2<h01?<n:4`8974>2<h01?<7:4`897402<h01?<9:4`897422<h01?<;:4`8yv2>n3:1>:u24`095ab<5=<268l4=54;>0d<5=<<68l4=545>0d<5=<>68l4=547>0d<5=<968l4=542>0d<5=<;68l4=57e>0d<5=?n68l4=57g>0d<5=?h68l4=57a>0d<5=?j68l4=57:>0d<5=?<68l4=575>0d<5=?>68l4=577>0d<5=?868l4=571>0d<5=?:68l4=573>0d<5=>m68l4=56f>0d<5=<m68l4=54f>0d<5=<o68l4=54`>0d<5=<i68l4=54b>0d<5=<868l4=57;>0d<5=>o68l4=56`>0d<5=3=6<>m;<6:0?7b=2wx8l650;1x91gc28nh70:nc;3gg>;3i00:h;5rs5ca>5<50r7?mi4>de9>7db=9mi01>ol:0f`?85b83?i70=j1;7a?85b:3?i70=j3;7a?85b<3?i70=j5;7a?85b>3?i70=j7;7a?85b03?i70=j9;7a?825?3?i70:=6;7a?825=3?i70:=4;7a?825;3?i70:=2;7a?82583;oo63;1g86f>;3:80>n63;3286f>;3;80:hn5242091g=:<:>19o5242791g=:<:<19o5242591g=:<:219o5242;91g=:<=h19o5245c91g=:<=319o5245:91g=:<==19o5245491g=:<=?19o5245691g=:<=919o5rs5cb>5<5=r7?mn4>de9>65>==k16>=955c9>650==k16>=;55c9>652==k16>==55c9>654==k16>=?55c9>656==k16>8>55c9>61`==k16>9k55c9>61b==k16>9m55c9>61d==k16>9o55c9>61?==k16>9655c9>66c==k16>>j55c9>66e==k16>>l55c9>66g==k16>>755c9>66>==k16>>955c9>660==k16>5k55c9>6=b==k16>5m55c9>6=d==k16>5o55c9>6=?==k16>5655c9>6=1==k16>5855c9~w65f2909w0=<9;7e?854j3;o:6s|32;94?5|5:926<jk;<13f?77i278<>4>0`9~w7c?2909w0<ke;7e?84b13;o:6s|2dc94?4|5;nm68h4=3ga>4b13ty9in4?:3y>6`6==o16>hj51e48yv4bm3:1>v3=e086b>;5mo0:h;5rs3d3>5<5s48n>7;i;<0e5?7c>2wx>k=50;0x97c42<l01?h;:0f5?xu5n<0;6?u22d691c=::o?1=i84}r0e3?6=:r79i84:f:?1bd<6l?1v?hm:18184b>3?m70<ib;3g2>{t;9;1<7<t=3g4>0`<5::96<j9;|q0e`<72:q6?lj55g9>7de==o16?lh51e48yv5fk3:1?v3<ab82`a=:;o81==o4=2ce>46e3ty8hk4?:3y>7`6==o16?i851e48yv5bi3:1>v3<e086b>;4jh0:h;5rs2ga>5<5s49n>7;i;<1af?7c>2wx?hm50;0x96c42<l01>ll:0f5?xu4mm0;6?u23d691c=:;ko1=i84}r1fa?6=:r78i84:f:?0fc<6l?1v>ki:18185b>3?m70=l0;3g2>{t;o:1<7<t=2g4>0`<5:i:6<j9;|q0b4<72;q6?h655g9>7f2=9m<0q~=m8;296~;4m00>j63<b882`3=z{;?26=4:{<0`f?77i279o>490:?127<6lm16?><511f8967a28:o7p}<7383>0}::jh1==l4=25a>4bc34;ni7??b:?05c<68j1684:5429~w7ee2908w0<lb;3g2>;5k:0:hk522e6950d<uz8h?7>53z?1g6<6l?16>n:5599>6a3==11v?jk:18184c<3;o:63=e8824a=z{;?j6=4:{<0`g?77i279o9490:?126<6lm16?><511`8967a28:i7p}<7283>3}::ji1==l4=25`>4bc34;ni7??a:?2aa<68k16?<h511c891?32=>0q~<lc;297~;5kj0:h;522b695a`<5;n>6<;m;|q1g1<72:q6>n:51e4897e22<201?j9:4:8yv4d:3:1:v3=d482`3=::lh1==o4=3gg>46d348nj7??d:?1b3<68h16>k<511c8yv42j3:19v3=ce824d=::j?1:=5227695ab<5:986<>k;<114?77l2wx?::50;4x97ec28:i70=8d;3g`>;6mm0:<l521da955d<5:8;6<>l;<6:0?223ty9oi4?:2y>6fb=9m<01?m::0fe?84c>3;>n6s|2b794?5|5;i>6<j9;<0`2?3?348o;7;7;|q1f`<72<q6>i851e4897cc28:i70<jf;33e>;5n?0:<o522g0955d<uz8>o7>55z?1g`<68h16>n85619>633=9mn01>=<:02a?85583;;n6s|36794?0|5;in6<>m;<14a?7cl27:in4>0`9>5`d=99h01><?:02b?82><3>=7p}=cd83>6}::jo1=i84=3a5>4ba348o;7?:b:p6f0=839p1?m9:0f5?84d?3?370<k8;7;?xu5jo0;69u22e595a0<5;om6<>m;<0e2?77k279j?4>0b9~w73c290>w0<lf;33e>;5k>0=<63=6782`a=:;:>1==j4=202>46c3ty8;;4?:7y>6f`=99h01>9i:0fg?87bj3;;m63>e`824g=:;;;1==m4=5;7>11<uz8hj7>53z?1gc<6l?16>n951ed897b?28?i7p}=c683>6}::j=1=i84=3a;>0><5;n26864}r0`4?6=?r79h54>d79>6c7=99h01?h;:02a?84a03;;n63=fd824a=::o<1==j4=3d:>46f3ty99h4?:4y>6a6=99k01?m7:728970028no70=<4;33f>;4:80:<o5rs254>5<1s48o<7??b:?0<5<6lm16=ho511c894c>28:i70==1;33e>;31=0?46s|2e294?5|5;n;6<j9;<0`<?7cn279h44>5c9~w7e?2908w0<l8;3g2>;5k00>463=d`86<>{t:j;1<79t=3f:>4b1348m87??c:?1ba<68k16>k6511c897`a28:i70<i5;33e>;5n00:<n5rs37e>5<2s48o=7??a:?1g<<18279:54>de9>763=99n01><=:02g?xu4?10;6;u22e3955d<5:2:6<jk;<3f=?77i27:i54>0c9>774=99i0197;:5;8yv4c93:1?v3=d082`3=::j31=ih4=3fb>43e3ty9o44?:2y>6f?=9m<01?mn:4:897be2<20q~<mb;292~;5lh0:h;522gf955g<5;l36<>l;<0eb?77i279j84>0c9>6c?=99h0q~<90;291~;5l;0:<l522bc925=::?31=ij4=216>46e3499>7??b:p72?=83<p1?j=:02a?85?:3;oh63>e9824d=:9l=1==l4=201>46f34>287:n;|q1`7<72:q6>i<51e4897ef28nm70<kb;36f>{t:jk1<7<t=3ab>4b1348oo7;7;|q1ff<72<q6>il51e4897`f28:i70<ib;33e>;4890:<o522gd955e<uz8==7>54z?1`6<68h16>;o51ef8965128:j70==3;33e>{t;>k1<78t=3f0>46e3489o7;i;<1;7?7cl27:i:4>0`9>775=99h0197;:5a8yv4c;3:1>v3=d282`3=::mi1=8l4}r0a`?6=;r79hn4>d79>6cd=99h01>>=:02b?xu3;h0;68u23bf955g<5:i>6;>4=560>4bc34;m:7??b:?7=1<412wx=k950;6x96ec28:i70<?0;3g`>;4i<0:<i52380955b<uz9hh7>53z?0ga<6l?16?n;51ed896b128?i7p}<c483>6}:;j?1=i84=2a5>0><5:n<6864}r3e<?6=<r78oh4>0`9>657=9mn01>o::02a?85>:3;;n6s|42`94?0|5:in6<>m;<1`2?0734>?87?kd:?2b3<68h16=k;511`891?32:k0q~=le;297~;4kl0:h;523b495a`<5:n<6<;m;|q0g3<72:q6?n851e4896e02<201>j7:4:8yv5e?3:1;v3<d682`3=:;kh1==l4=2``>46d349ih7??c:?0f`<68m16?n=511`896df28:27p}>f883>1}:;jl1==o4=321>4bc349j:7??d:?0=6<68m1v9=l:18585dn3;;n63<c6854>;3<<0:hi521g7955g<58l?6<>m;<6:0?5e3ty8ok4?:2y>7f`=9m<01>m8:0fe?85c03;>n6s|3b594?5|5:i<6<j9;<1`<?3?349o57;7;|q0f6<72?q6?i651e4896de28:j70=mc;33e>;4jm0:<l523cg955g<5:i86<>n;|q2bd<72=q6?i>511c8976428no70=n6;33f>;41:0:<o5rs51g>5<1s49o<7??b:?0g=<1827?8;4>de9>5c2=99k01<h<:02a?82><39h7p}<d183>6}:;m:1=i84=2a;>4ba349o57?:b:p7f>=839p1>m7:0f5?85d13?370=ka;7;?xu4j=0;68u23e;95a0<5:hh6<>m;<1a`?77j278nh4>0b9>7f5=99i0q~?ib;290~;4l80:<l5221695ab<5:k<6<>k;<1:0?77l2wx8>k50;4x96b628:i70=l9;43?823?3;oh63>f2824d=:9o81==l4=5;7>6b<uz9o=7>53z?0`4<6l?16?n751ed896bf28?i7p}<c883>6}:;j31=i84=2ab>0><5:ni6864}r1a1?6=>r78hl4>d79>7g`=99k01>m?:02b?85d:3;;m63<bd824g=:;j91==j4}r60b?6=>r78h?4>0`9>7fg=>91689651ef894`528:j70?i1;33f>;31=08i6s|1ga94?2|5:n96<>m;<031?7cl278m:4>0c9>7<2=99h0q~=k2;297~;4l;0:h;523bc95a`<5:ni6<;m;|q0gd<72:q6?no51e4896ee2<201>jl:4:8yv5e>3:19v3<dc82`3=:;kl1==l4=2a3>46e349h>7??b:?0g4<68j1v9:?:18585c;3;;m63<cc854>;3<00:hi521g3955g<58l;6<>m;<6:0?5a3ty:ji4?:5y>7a5=99h01?>9:0fg?85f03;;h63<94824a=z{:n86=4<{<1g7?7c>278oo4>dg9>7ae=9<h0q~=lb;297~;4kk0:h;523ba91==:;mn1955rs2`3>5<3s49oo7?k6:?0g5<68j16?n<511a896e628:j7p};4083>3}:;m>1==o4=2a`>36<5=>j6<jk;<3e4?77i27:ik4>0c9>0<2=<91v<hj:18785c<3;;n63=0682`a=:;h21==l4=2;6>46e3ty8h94?:2y>7a2=9m<01>ml:0fe?85cl3;>n6s|3ba94?4|5:ih6<j9;<1ga?3?3ty8n<4?:5y>7ab=9m<01>l6:02b?85d<3;;m63<c0824g=z{=>96=4:{<1g1?77i2794h4:f:?70g<6lm16=hh511c891?32=80q~?if;290~;4l<0:<o5221:95ab<5:k26<>m;<1:2?77j2wx?i;50;0x96b228n=70=ke;36f>{t;k81<7=t=2ff>4b1349i57??b:?0g1<68k1v>?;:18185613?370=>8;3g2>{t;8o1<7<t=23:>4ba3499?7?k6:p761=838p1>?6:0f5?854j3;;o6s|30194?4|5:;36864=234>4b13ty8=i4?:3y>74>=9ml01><=:0f5?xu49;0;6?u230591==:;8<1=i84}r12g?6=:r78=:4>dg9>777=9m<0q~=>1;296~;49?0>463<1482`3=z{:;i6=4={<122?7cn278>=4>d79~w67f2909w0=>5;3gb>;49o0:h;5rs204>5<5s499o7;7;<11f?7c>2wx?>?50;0x964d28nm70=<6;3g2>{t;:21<7<t=20`>4b13498n7??a:p770=838p1><m:4:8964f28n=7p}<3183>7}:;;h1=ih4=216>4b13ty8>84?:3y>77g==116??751e48yv55n3:1>v3<2`82`c=:;:>1=i84}r110?6=:r78>44:8:?06=<6l?1v><j:18185513;oj63<3282`3=z{:8o6=4={<11<?7cn278??4>d79~w6>02909w0=7c;7;?85?j3;o:6s|38394?4|5:2h6<ji;<1:2?7c>2wx?lo50;0x96>d28n=70=nf;33e>{t;1<1<7<t=2:a>0><5:2j6<j9;|q0=5<72;q6?5l51ed896?228n=7p}<8483>7}:;1k1955239;95a0<uz93j7>52z?0<d<6lo16?4:51e48yv5?<3:1>v3<8886<>;4010:h;5rs2:f>5<5s49357?kf:?0=6<6l?1v>6k:18185?03;oj63<9382`3=z{:3j6=4={<1:b?3?3492i7?k6:p7d2=838p1>7i:0fe?85f13;o:6s|3``94?4|5:3m6<j9;<1bb?77l2wx?4750;0x96?b2<201>7k:0f5?xu4i:0;6?u238g95a`<5:k36<j9;|q0==<72;q6?4j5599>7<e=9m<0q~=n2;296~;41m0:hk523`595a0<uz92;7>52z?0=f<202785o4>d79~w6g62909w0=6c;3gb>;4i?0:h;5rs2c3>5<5s492n7?kf:?0e0<6l?1v?:8:18684703?m70<:0;3g`>;58h0:<o5221a955g<5;:n6<>l;|q14<<72;q6>=955g9>65g=9m<0q~<?b;296~;58?0>j63=0b82`3=z{;:o6=49{<031?3a348;i7?k6:?155<68k16><<511c8977328:h70<>6;33`>{t:9l1<7<t=327>0`<5;;;6<j9;|q154<72;q6>==55g9>644=9m<0q~<>3;296~;58;0>j63=1582`3=z{;;>6=4={<035?3a348:;7?k6:p64?=838p1?>?:4d8977f28n=7p}=a883>0}::?k19k522c095ab<5;<h6<>m;<05a?77i279;=4>0b9~w70e2909w0<99;7e?841k3;o:6s|27f94?4|5;<368h4=34f>4b13ty9:k4?:7y>631==o16>:>51e48971528:i70<84;33e>;5??0:<n5226:955b<uz8<=7>52z?123<2n279;?4>d79~w7142909w0<95;7e?840<3;o:6s|26794?4|5;<?68h4=355>4b13ty9;:4?:3y>635==o16>:751e48yv40j3:1>v3=6386b>;5?j0:h;5rs3;4>5<5s48i>7;i;<0b4?7cl2wx>4850;0x97d62<l01?7i:0fg?xu5i10;69u22c395ab<5;<h6<>n;<05a?77j279;=4>0e9~w7?22909w0<m0;7e?84>m3;oh6s|2`594?5|5;h;6<jk;<05a?77k279;=4>0`9~w7?32909w0<nf;7e?84>l3;oh6s|2`494?4|5;km6<jk;<044?77j2wx>4=50;0x97gb2<l01?7l:0fg?xu5i<0;68u22`g95ab<5;=96<>n;<040?77j279;;4>0e9>62>=99i0q~<62;296~;5im0>j63=9c82`a=z{;k?6=4;{<0b`?7cl279;94>0b9>620=99k01?97:02a?xu5180;6?u22`a91c=::0k1=ij4}r0b7?6=;r79mn4>de9>620=99h01?97:02b?xu5190;6?u22``91c=::031=ij4}r0b6?6=;r79mo4>de9>62?=99k01?9l:02a?xu50o0;6?u22`c91c=::021=ij4}r0b5?6=:r79ml4>de9>62e=99k0q~<<5;296~;5=90>j63=3d82`a=z{;9?6=4={<07b?3a3488h7?kd:p610=83>p1?:i:0fg?847i3;;m63=0b824g=::9o1==j4}r007?6=:r798h4:f:?17f<6lm1v?:::180843m3;oh63=0b824f=::9o1==o4}r006?6=:r798i4:f:?17g<6lm1v?:;:181843l3;oh63=0d824g=z{;9:6=4={<07g?3a3488m7?kd:p615=83?p1?:l:0fg?84683;;m63=13824g=::8>1==j4=335>46d3ty9?=4?:3y>61d==o16>>751ef8yv43:3:18v3=4c82`a=::881==m4=337>46f348::7??b:p67`=838p1?:n:4d8975?28no7p}=4083>6}::=k1=ij4=337>46e348::7??a:p67c=838p1?:6:4d8975028no7p}=4183>6}::=31=ij4=334>46f348:m7??b:p67b=838p1?:7:4d8975128no7p}=3g83>7}::=21=ij4=33b>46f3ty9484?:3y>6d6==o16>5k51ef8yv4?<3:1>v3=9g86b>;50m0:hi5rs3:0>5<5s482i7;i;<0;g?7cl2wx>5<50;0x97?c2<l01?6m:0fg?xu5080;6?u228a91c=::1k1=ij4}r0;4?6=:r795o4:f:?1<<<6lm1v?9i:18184>i3?m70<78;3g`>{t:>o1<7<t=3;:>0`<5;2<6<jk;|q13a<72;q6>4655g9>6=0=9mn0q~<=3;296~;5;l0>j63=2b82`a=z{;896=4={<00`?3a3489n7?kd:p677=838p1?=l:4d8974f28no7p}=2183>7}:::h19k5223;95ab<uz8:j7>52z?17d<2n279>54>de9~w77b2909w0<<9;7e?845?3;oh6s|20f94?4|5;9368h4=305>4bc3ty9=n4?:3y>661==o16>?;51ef8yv46j3:1>v3=3786b>;5:=0:hi5rs372>5<5s489n7;i;<3f3?7c>2wx>8<50;0x974f2<l01<k7:0f5?xu5=:0;6?u223;91c=:9l31=i84}r060?6=:r79>54:f:?2ad<6l?1v?;::181845?3?m70?jb;3g2>{t:<<1<7<t=305>0`<58oh6<j9;|q112<72;q6>?;55g9>5`b=9m<0q~<:8;296~;5:=0>j63>ed82`3=z{;h86=4={<0;`?3a34;nj7?k6:p6g2=838p1?6l:4d894`728n=7p}=b483>7}::1h19k521g395a0<uz8i:7>52z?1<d<2n27:j?4>d79~w7d02909w0<79;7e?87a;3;o:6s|2c:94?4|5;2368h4=0d7>4b13ty9n44?:3y>6=1==o16=k;51e48yv4ei3:1>v3=8786b>;6n?0:h;5rs5;4>5<6=r78;<4:6:?035<2>278:k4:6:?02`<2>278:i4:6:?02f<2>278:l4:6:?02<<2>278:o4:6:?0<6<2>2784?4:6:?0<4<2>2784=4:6:?03c<2>278;h4:6:?03a<2>278;n4:6:?03g<2>278<>4>d79>0<0=99k01>=m:02a?xu4<<0;6?u236391c=:;<o1=i84}r15<?6=<r78;<4>de9>7=5==o16?>8511`8963a28:j7p}<4583>7}:;>:19k5234f95a0<uz9=;7>54z?035<6lm16?5<55g9>763=99k01>;::02b?xu4<:0;6?u237d91c=:;<i1=i84}r152?6=<r78:k4>de9>7=7==o16?>;511a8963428:j7p}<4383>7}:;?o19k5234`95a0<uz9=97>54z?02`<6lm16?5>55g9>762=99k01>;>:02b?xu4<80;6?u237f91c=:;<k1=i84}r150?6=<r78:i4>de9>72`==o16?>:511a8962a28:j7p}<4183>7}:;?i19k5234;95a0<uz9=?7>54z?02f<6lm16?:k55g9>765=99k01>:k:02b?xu4;l0;6?u237c91c=:;<=1=i84}r155?6=<r78:l4>de9>72e==o16?><511c8962>28:j7p}<3e83>7}:;?319k5234495a0<uz9=<7>54z?02<<6lm16?:l55g9>764=99i01>:8:02b?xu4;o0;6?u237`91c=:;<21=i84}r156?6=<r78:o4>de9>72b==o16?>=511a8962e28:j7p}<5583>7}:;<o1955234695a0<uz9>j7>52z?01`<6=k16?8h51e48yv52:3:1?v3<5e86<>;4==0>463<5382`3=z{:?>6=4<{<16`?72j278994>dg9>703=9m<0q~=:0;297~;4=j0>463<5386<>;4=90:h;5rs270>5<4s49>o7?:b:?017<6lo16?8=51e48yv53m3:1?v3<5c86<>;4=90>463<4d82`3=z{:?:6=4<{<16f?72j2789=4>dg9>707=9m<0q~=;c;297~;4=h0>463<4d86<>;4<j0:h;5rs26e>5<4s49>m7?:b:?00`<6lo16?9h51e48yv53i3:1?v3<5886<>;4<j0>463<4`82`3=z{:>o6=4<{<16=?72j2788n4>dg9>71b=9m<0q~=;8;297~;4=10>463<4`86<>;4<10:h;5rs26a>5<4s49>47?:b:?00d<6lo16?9l51e48yv53>3:1?v3<5686<>;4<10>463<4782`3=z{:>26=4<{<163?72j278854>dg9>71?=9m<0q~=;7;297~;4=?0:9o5235495a`<5:><6<j9;|q04d<72;q6?=755g9>75d=9m<0q~=?9;29<~;4800:hi5231:955d<5::m6<>l;<13f?77k278<94>0`9>755=99h01?hl:02`?857=3;;n6s|31594?5|5::=68h4=233>0`<5::36<j9;|q043<721q6?=851ef8966?28:j70=?f;33f>;48k0:<o52316955d<5::86<>k;<0eg?77j278<84>0`9~w677290?w0=>0;3g`>;5m00:<o522gg955g<5;lh6<>k;|q04`<72:q6?=j55g9>75e==o16?=h51e48yv57k3:1>v3<0b82`a=:;9l1==o4}r6:=?6=9mq68?95579>070==?168?;5579>072==?168?=5579>074==?168?>5579>04`==?168??5579>065==?168>?5579>064==?168>:5579>063==?168>85579>061==?168>65579>06?==?1689l5579>01g==?168975579>01>==?168995579>010==?1689;5579>012==?1689=5579>7c4=9m<0197;:5`1?xu4nk0;6?u243591c=:<8>1=i84}r62a?6=<r7?>:4>de9>06?==o16?l7511c8917228:j7p}<f`83>7}:<;<19k5240195a0<uz>:h7>54z?763<6lm168>655g9>7d>=99k019>m:02b?xu4n00;6?u243791c=:<881=i84}r62g?6=<r7?>84>de9>061==o16?l6511a8916>28:j7p}<f983>7}:<;>19k5240395a0<uz>:n7>54z?761<6lm168>855g9>7d1=99k019>8:02b?xu4n>0;6?u243191c=:<8:1=i84}r62e?6=<r7?>>4>de9>063==o16?l9511a8916228:j7p}<f783>7}:<;819k5241d95a0<uz>:57>54z?767<6lm168>:55g9>7d0=99k019><:02b?xu4n=0;6?u243291c=:<9n1=i84}r623?6=<r7?>=4>de9>064==o16?l;511c896`a28:j7p}<f283>7}:<8l19k5241a95a0<uz>::7>54z?75c<6lm168>?55g9>7d3=99i01>hk:02b?xu4n<0;6?u243391c=:<9o1=i84}r62<?6=<r7?><4>de9>065==o16?l8511a8916628:j7p};0`83>7}:<8>1955241c95a0<uz>:97>52z?751<6=k168<;51e48yv2703:1?v3;1286<>;38h0>463;0982`3=z{=:i6=4<{<627?72j27?<l4>dg9>05d=9m<0q~:?6;297~;39;0>463;0986<>;38?0:h;5rs52:>5<4s4>:>7?:b:?74=<6lo168=751e48yv27<3:1?v3;1086<>;38?0>463;0582`3=z{=:<6=4<{<625?72j27?<;4>dg9>051=9m<0q~:?2;297~;3990>463;0586<>;38;0:h;5rs526>5<4s4>:<7?:b:?741<6lo168=;51e48yv2783:1?v3;0g86<>;38;0>463;0182`3=z{=:86=4<{<63b?72j27?<?4>dg9>055=9m<0q~=ie;297~;38l0>463;0186<>;4nl0:h;5rs522>5<4s4>;i7?:b:?745<6lo168=?51e48yv5ak3:1?v3;0e86<>;4nl0>463<fb82`3=z{:lm6=4<{<63`?72j278jh4>dg9>7c`=9m<0q~=id;297~;38j0:9o523ga95a`<5:lo6<j9;|q76d<72:q68>=51ef891222<l01>7<:02`?xu3:10;6>u242395ab<5=>868h4=2;1>46d3ty?>44?:2y>064=9mn019:;:4d896?528:j7p};2c83>6}:<:>1=ij4=565>0`<5:386<>n;|q76f<72:q68>;51ef891202<l01>7;:02`?xu3:m0;6>u242495ab<5=>368h4=2;7>46f3ty?>h4?:2y>061=9mn019:6:4d896?228:h7p};2g83>6}:<:21=ij4=56b>0`<5:3>6<>n;|q775<72:q68>751ef8912e2<l01>79:02b?xu3110;6?;t=54:>00<5=<36884=544>00<5=<=6884=546>00<5=<?6884=541>00<5=<:6884=543>00<5=?m6884=57f>00<5=?o6884=57`>00<5=?i6884=57b>00<5=?26884=574>00<5=?=6884=576>00<5=??6884=570>00<5=?96884=572>00<5=?;6884=56e>00<5=>n6884=54e>00<5=<n6884=54g>00<5=<h6884=54a>00<5=<j6884=540>00<5=?36884=56g>00<5=>h6884=227>4b13ty?4n4?:3y>03?==o1684:5f99~w1>e2909w0:98;7e?82><3o<7p};8`83>7}:<?=19k524869a0=z{=226=4={<652?3a34>287k<;|q7<=<72;q68;;55g9>0<2=m;1v968:181821<3?m70:64;g2?xu30<0;6?u247091c=:<0>1i=5rs5:7>5<5s4>==7;i;<6:0?ba3ty?4>4?:3y>036==o1684:5dd9~w1>52909w0::f;7e?82><3l=7p};8083>7}:<<o19k524869`a=z{=2;6=4={<66`?3a34>287jl;|q73c<72;q688m55g9>0<2=lk1v99j:181822j3?m70:64;fb?xu3?m0;6?u244c91c=:<0>1h55rs55`>5<5s4>>57;i;<6:0?b03ty?;l4?:3y>001==o1684:5d79~w11>2909w0::6;7e?82><3n>7p};7983>7}:<<?19k524869b0=z{==<6=4={<660?3a34>287j;;|q733<72;q688=55g9>0<2=l:1v99::181822:3?m70:64;f1?xu3?=0;6?u244391c=:<0>1h<5rs550>5<5s4>><7;i;<6:0?b73ty?;?4?:3y>01`==o1684:5cg9~w1162909w0:;e;7e?82><3on7p};9283>7}:<?l19k524869aa=z{=396=4={<65a?3a34>287h;;|q7=4<72;q68;j55g9>0<2=mj1v97?:181821k3?m70:64;ga?xu30o0;6?u247`91c=:<0>1il5rs5:f>5<5s4>=m7;i;<6:0?c>3ty?4i4?:3y>035==o1684:5e99~w1>12909w0::8;7e?82><3o?7p};7c83>7}:<=n19k524869`<=z{==;6=4={<67g?3a34>287mj;|q7=0<72;q684851e4891?32oi0q~=<c;296~;5m00:<l5231795a0<uz8<m7>53z?13<<68k16>:m511a8971?28n=7p}=1983>6}::8=1==l4=33b>46d348::7?k6:p5gg=833p1?km:02a?84bl3;;m63=eg824f=::o;1==o4=3d7>46f348mm7??a:?045<68h16>k;511a897`d28n=7p}>cc83>3}::o;1==m4=3d7>46c348m47??d:?045<68j16?=<511a897`528n=7p}>c`83>0}:;kl1==m4=2a3>46c349ih7?k6:?0f<<68j16?n:511a8yv71i3:1?v3=fe824f=:;981==l4=3df>4b13ty:n94?:3y>6cb=99n01?h=:07`?xu6jk0;6>u22gf95a0<5;lj6<>k;<0ef?77l2wx=o<50;0x97`f28:h70<i8;3g2>{t9j21<7<t=3da>46d349;<7?k6:p5fe=838p1>>?:02g?84a13;>o6s|1bg94?4|5;lm6<j9;<136?77l2wx=::50;1x96e528n=70=m9;33`>;4k=0:<i5rs0`0>5<5s48mi7??c:?040<6=j1v<7l:18184a>3;o:63=f4824a=z{8h;6=4={<1`7?7c>278o<4>0e9~yv36<3:1>vP;f19>15<3n91/8lk51ba8yv36:3:1>vP;eg9>15<3mo1/8lk51bf8yv3693:1>vP;ed9>15<3ml1/8lk51bg8yv3683:1>vP;ee9>15<3mm1/8lk51bd8yv37n3:1>vP;eb9>15<3mj1/8lk517a8yv37m3:1>vP;ec9>15<3mk1/8lk517d8yv37k3:1>vP;e89>15<3m01/8lk51668yv37j3:1>vP;e99>15<3m11/8lk516d8yv37i3:1>vP;e69>15<3m>1/8lk519c8yv3713:1>vP;e79>15<3m?1/8lk51878yv3703:1>vP;e49>15<3m<1/8lk518a8yv37?3:1>vP;e59>15<3m=1/8lk51`78yv37>3:1>vP;e29>15<3m:1/8lk51c28yv37=3:1>vP;e39>15<3m;1/8lk51c38yv37<3:1>vP;e09>15<3m81/8lk51c18yv37;3:1>vP;e19>15<3m91/8lk51c68yv3793:1>vP;dd9>15<3ll1/8lk51c78yv3783:1>vP;de9>15<3lm1/8lk51c48yv2an3:1>vP;db9>15<3lj1/8lk51c58yv2am3:1>vP;dc9>15<3lk1/8lk51c:8yv2al3:1>vP;d`9>15<3lh1/8lk51c;8yv2ak3:1>vP;d89>15<3l01/8lk51cc8yv2aj3:1>vP;d99>15<3l11/8lk51ca8yv2ai3:1>vP;d69>15<3l>1/8lk51cf8yv2a13:1>vP;d79>15<3l?1/8lk51cg8yv2a03:1>vP;d49>15<3l<1/8lk51cd8yv36j3:1>vP;f79>15<3n?1/8lk51b28yv36i3:1>vP;f49>15<3n<1/8lk51b38yv3613:1>vP;f59>15<3n=1/8lk51b08yv3603:1>vP;f29>15<3n:1/8lk51b18yv36?3:1>vP;f39>15<3n;1/8lk51b68yv36>3:1>vP;f09>15<3n81/8lk51b78yv36=3:1>vP;e`9>15<3mh1/8lk51b48yv37l3:1>vP;dg9>15<3lo1/8lk51b58yv37:3:1>vP;d59>15<3l=1/8lk51b;8yv2a?3:1>vP;d29>15<3l:1/8lk51bc8yv3fm3:1>vP:ad9>15<2il1/8lk51e28yv3d<3:1>vP:c59>15<2k=1/8lk51e38yv3d>3:1>vP:c79>15<2k?1/8lk51e08yv3dl3:1>vP:ce9>15<2km1/8lk517f8yv3b;3:1>vP:e29>15<2m:1/8lk517g8yv32l3:1>vP:389>15<2;01/8lk51628yv32j3:1>vP:399>15<2;11/8lk51638yv32i3:1>vP:369>15<2;>1/8lk51608yv3213:1>vP:379>15<2;?1/8lk51618yv3203:1>vP:349>15<2;<1/8lk51678yv32?3:1>vP:359>15<2;=1/8lk51648yv32=3:1>vP:339>15<2;;1/8lk51658yv32<3:1>vP:309>15<2;81/8lk516:8yv32;3:1>vP:319>15<2;91/8lk516;8yv32:3:1>vP:2g9>15<2:o1/8lk516c8yv3293:1>vP:2d9>15<2:l1/8lk516`8yv3283:1>vP:2e9>15<2:m1/8lk516a8yv33n3:1>vP:2b9>15<2:j1/8lk516f8yv33m3:1>vP:2c9>15<2:k1/8lk516g8yv33l3:1>vP:2`9>15<2:h1/8lk51928yv33k3:1>vP:289>15<2:01/8lk51938yv33i3:1>vP:269>15<2:>1/8lk51908yv3313:1>vP:279>15<2:?1/8lk51918yv3303:1>vP:249>15<2:<1/8lk51968yv33?3:1>vP:259>15<2:=1/8lk51978yv33>3:1>vP:229>15<2::1/8lk51948yv33=3:1>vP:239>15<2:;1/8lk51958yv33<3:1>vP:209>15<2:81/8lk519:8yv33;3:1>vP:219>15<2:91/8lk519;8yv33:3:1>vP:1g9>15<29o1/8lk519`8yv3393:1>vP:1d9>15<29l1/8lk519a8yv31<3:1>vP:3g9>15<2;o1/8lk519f8yv31;3:1>vP:3d9>15<2;l1/8lk519g8yv31:3:1>vP:3e9>15<2;m1/8lk519d8yv3193:1>vP:3b9>15<2;j1/8lk51828yv3183:1>vP:3c9>15<2;k1/8lk51838yv32n3:1>vP:3`9>15<2;h1/8lk51808yv32m3:1>vP:329>15<2;:1/8lk51818yv32>3:1>vP:299>15<2:11/8lk51868yv33j3:1>vP:1e9>15<29m1/8lk51848yv3383:1>vP:1b9>15<29j1/8lk51858yv31>3:1>vP:679>15<2>?1/8lk518:8yv31k3:1>vP:6b9>15<2>j1/8lk518;8yv3d;3:1>vP:b99>15<2j11/8lk518c8yv3d93:1>vP:b69>15<2j>1/8lk518`8yv3d83:1>vP:b79>15<2j?1/8lk518f8yv3en3:1>vP:b49>15<2j<1/8lk518g8yv3em3:1>vP:b59>15<2j=1/8lk518d8yv3el3:1>vP:b29>15<2j:1/8lk51`28yv3ek3:1>vP:b39>15<2j;1/8lk51`38yv3ej3:1>vP:b09>15<2j81/8lk51`08yv3ei3:1>vP:b19>15<2j91/8lk51`18yv3e13:1>vP:ag9>15<2io1/8lk51`68yv3b:3:1>vP:d69>15<2l>1/8lk51`48yv3b83:1>vP:d79>15<2l?1/8lk51`58yv3cn3:1>vP:d49>15<2l<1/8lk51`:8yv3cm3:1>vP:d59>15<2l=1/8lk51`;8yv3cl3:1>vP:d29>15<2l:1/8lk51`c8yv3ck3:1>vP:d39>15<2l;1/8lk51``8yv3cj3:1>vP:d09>15<2l81/8lk51`a8yv3ci3:1>vP:d19>15<2l91/8lk51`f8yv3c13:1>vP:cg9>15<2ko1/8lk51`g8yv3c03:1>vP:cd9>15<2kl1/8lk51`d8yxhem90;6?uG4`d8ykdb93:1>vF;ag9~jgc52909wE:nf:mf`5=838pD9oi;|laa1<72;qC8lh4}o`f1?6=:rB?mk5rncg5>5<5sA>jj6sabd594?4|@=km7p`me983>7}O<hl0qclj9;296~N3io1vbokn:181M2fn2wenhl50;0xL1ga3tdiin4?:3yK0d`<ughnh7>52zJ7ec=zfkon6=4={I6bb>{ijll1<7<tH5ce?xhen90;6?uG4`d8ykda93:1>vF;ag9~jg`52909wE:nf:mfc5=838pD9oi;|lab1<72;qC8lh4}o`e1?6=:rB?mk5rncd5>5<5sA>jj6sabg594?4|@=km7p`mf983>7}O<hl0qcli9;296~N3io1vbohn:181M2fn2wenkl50;0xL1ga3tdijn4?:3yK0d`<ughmh7>52zJ7ec=zfkln6=4={I6bb>{ijol1<7<tH5ce?xhd890;6?uG4`d8yke793:1>vF;ag9~jf652909wE:nf:mg55=838pD9oi;|l`41<72;qC8lh4}oa31?6=:rB?mk5rnb25>5<5sA>jj6sac1594?4|@=km7p`l0983>7}O<hl0qcm?9;296~N3io1vbn>n:181M2fn2weo=l50;0xL1ga3tdh<n4?:3yK0d`<ugi;h7>52zJ7ec=zfj:n6=4={I6bb>{ik9l1<7<tH5ce?xhd990;6?uG4`d8yke693:1>vF;ag9~jf752909wE:nf:mg45=838pD9oi;|l`51<72;qC8lh4}oa21?6=:rB?mk5rnb35>5<5sA>jj6sac0594?4|@=km7p`l1983>7}O<hl0qcm>9;296~N3io1vbn?n:181M2fn2weo<l50;0xL1ga3tdh=n4?:3yK0d`<ugi:h7>52zJ7ec=zfj;n6=4={I6bb>{ik8l1<7<tH5ce?xhd:90;6?uG4`d8yke593:1>vF;ag9~jf452909wE:nf:mg75=838pD9oi;|l`61<72;qC8lh4}oa11?6=:rB?mk5rnb05>5<5sA>jj6sac3594?4|@=km7p`l2983>7}O<hl0qcm=9;296~N3io1vbn<n:181M2fn2weo?l50;0xL1ga3tdh>n4?:3yK0d`<ugi9h7>52zJ7ec=zfj8n6=4={I6bb>{ik;l1<7<tH5ce?xhd;90;6?uG4`d8yke493:1>vF;ag9~jf552909wE:nf:mg65=838pD9oi;|l`71<72;qC8lh4}oa01?6=:rB?mk5rnb15>5<5sA>jj6sac2594?4|@=km7p`l3983>7}O<hl0qcm<9;296~N3io1vbn=n:181M2fn2weo>l50;0xL1ga3tdh?n4?:3yK0d`<ugi8h7>52zJ7ec=zfj9n6=4={I6bb>{ik:l1<7<tH5ce?xhd<90;6?uG4`d8yke393:1>vF;ag9~jf252909wE:nf:m=c5=83;pD9oi;|lb13<728qC8lh4}oc63?6=9rB?mk5rn`7;>5<6sA>jj6saa4;94?7|@=km7p`n5`83>4}O<hl0qco:b;295~N3io1vbl;l:182M2fn2wem8j50;3xL1ga3tdj9h4?:0yK0d`<ugk>j7>51zJ7ec=zfh<;6=4>{I6bb>{ii?;1<7?tH5ce?xhf>;0;6<uG4`d8ykg1;3:1=vF;ag9~jd03290:wE:nf:me33=83;pD9oi;|lb23<728qC8lh4}oc53?6=9rB?mk5rn`4;>5<6sA>jj6saa7;94?7|@=km7p`n6`83>4}O<hl0qco9b;295~N3io1vbl8l:182M2fn2wem;j50;3xL1ga3tdj:h4?:0yK0d`<ugk=j7>51zJ7ec=zfh=;6=4>{I6bb>{ii>;1<7?tH5ce?xhf?;0;6<uG4`d8ykg0;3:1=vF;ag9~jd13290:wE:nf:me23=83;pD9oi;|lb33<728qC8lh4}oc43?6=9rB?mk5rn`5;>5<6sA>jj6saa6;94?7|@=km7p`n7`83>4}O<hl0qco8b;295~N3io1vbl9l:182M2fn2wem:j50;3xL1ga3tdj;h4?:0yK0d`<ugk<j7>51zJ7ec=zfh2;6=4>{I6bb>{ii1;1<7?tH5ce?xhf0;0;6<uG4`d8ykg?;3:1=vF;ag9~jd>3290:wE:nf:me=3=83;pD9oi;|lb<3<728qC8lh4}oc;3?6=9rB?mk5rn`:;>5<6sA>jj6saa9;94?7|@=km7p`n8`83>4}O<hl0qco7b;295~N3io1vbl6l:182M2fn2wem5j50;3xL1ga3tdj4h4?:0yK0d`<ugk3j7>51zJ7ec=zfh3;6=4>{I6bb>{ii0;1<7?tH5ce?xhf1;0;6<uG4`d8ykg>;3:1=vF;ag9~jd?3290:wE:nf:me<3=83;pD9oi;|lb=3<728qC8lh4}oc:3?6=9rB?mk5rn`;;>5<6sA>jj6saa8;94?7|@=km7p`n9`83>4}O<hl0qco6b;295~N3io1vbl7l:182M2fn2wem4j50;3xL1ga3tdj5h4?:0yK0d`<ugk2j7>51zJ7ec=zfhk;6=4>{I6bb>{iih;1<7?tH5ce?xhfi;0;6<uG4`d8ykgf;3:1=vF;ag9~jdg3290:wE:nf:med3=83;pD9oi;|lbe3<728qC8lh4}ocb3?6=9rB?mk5rn`c;>5<6sA>jj6saa`;94?7|@=km7p`na`83>4}O<hl0qconb;295~N3io1vblol:182M2fn2wemlj50;3xL1ga3tdjmh4?:0yK0d`<ugkjj7>51zJ7ec=zfhh;6=4>{I6bb>{iik;1<7?tH5ce?xhfj;0;6<uG4`d8ykge;3:1=vF;ag9~jdd3290:wE:nf:meg3=83;pD9oi;|lbf3<728qC8lh4}oca3?6=9rB?mk5rn``;>5<6sA>jj6saac;94?7|@=km7p`nb`83>4}O<hl0qcomb;295~N3io1vblll:182M2fn2wemoj50;3xL1ga3tdjnh4?:0yK0d`<ugkij7>51zJ7ec=zfhi;6=4>{I6bb>{iij;1<7?tH5ce?xhfk;0;6<uG4`d8ykgd;3:1=vF;ag9~jde3290:wE:nf:mef3=83;pD9oi;|lbg3<728qC8lh4}oc`3?6=9rB?mk5rn`a;>5<6sA>jj6saab;94?7|@=km7p`nc`83>4}O<hl0qcolb;295~N3io1vblml:182M2fn2wemnj50;3xL1ga3tdjoh4?:0yK0d`<ugkhj7>51zJ7ec=zfhn;6=4>{I6bb>{iim;1<7?tH5ce?xhfl;0;6<uG4`d8ykgc;3:1=vF;ag9~jdb3290:wE:nf:mea3=83;pD9oi;|lb`3<728qC8lh4}ocg3?6=9rB?mk5rn`f;>5<6sA>jj6saae;94?7|@=km7p`nd`83>4}O<hl0qcokb;295~N3io1vbljl:182M2fn2wemij50;3xL1ga3tdjhh4?:0yK0d`<ugkoj7>51zJ7ec=zfho;6=4>{I6bb>{iil;1<7?tH5ce?xhfm;0;6<uG4`d8ykgb;3:1=vF;ag9~jdc3290:wE:nf:me`3=83;pD9oi;|lba3<728qC8lh4}ocf3?6=9rB?mk5rn`g;>5<6sA>jj6saad;94?7|@=km7p`ne`83>4}O<hl0qcojb;295~N3io1vblkl:182M2fn2wemhj50;3xL1ga3tdjih4?:0yK0d`<ugknj7>51zJ7ec=zfhl;6=4>{I6bb>{iio;1<7?tH5ce?xhfn;0;6<uG4`d8ykga;3:1=vF;ag9~jd`3290:wE:nf:mec3=83;pD9oi;|lbb3<728qC8lh4}oce3?6=9rB?mk5rn`d;>5<6sA>jj6saag;94?7|@=km7p`nf`83>4}O<hl0qcoib;295~N3io1vblhl:182M2fn2wemkj50;3xL1ga3tdjjh4?:0yK0d`<ugkmj7>51zJ7ec=zfk:;6=4>{I6bb>{ij9;1<7?tH5ce?xhe8;0;6<uG4`d8ykd7;3:1=vF;ag9~jg63290:wE:nf:mf53=83;pD9oi;|la43<728qC8lh4}o`33?6=9rB?mk5rnc2;>5<6sA>jj6sab1;94?7|@=km7p`m0`83>4}O<hl0qcl?b;295~N3io1vbo>l:182M2fn2wen=j50;3xL1ga3tdi<h4?:0yK0d`<ugh;j7>51zJ7ec=zfk;;6=4>{I6bb>{ij8;1<7?tH5ce?xhe9;0;6<uG4`d8ykd6;3:1=vF;ag9~jg73290:wE:nf:mf43=83;pD9oi;|la53<728qC8lh4}o`23?6=9rB?mk5rnc3;>5<6sA>jj6sab0;94?7|@=km7p`m1`83>4}O<hl0qcl>b;295~N3io1vbo?l:182M2fn2wen<j50;3xL1ga3tdi=h4?:0yK0d`<ugh:j7>51zJ7ec=zfk8;6=4>{I6bb>{ij;;1<7?tH5ce?xhe:;0;6<uG4`d8ykd5;3:1=vF;ag9~jg43290:wE:nf:mf73=83;pD9oi;|la63<728qC8lh4}o`13?6=9rB?mk5rnc0;>5<6sA>jj6sab3;94?7|@=km7p`m2`83>4}O<hl0qcl=b;295~N3io1vbo<l:182M2fn2wen?j50;3xL1ga3tdi>h4?:0yK0d`<ugh9j7>51zJ7ec=zfk9;6=4>{I6bb>{ij:;1<7?tH5ce?xhe;;0;6<uG4`d8ykd4;3:1=vF;ag9~jg53290:wE:nf:mf63=83;pD9oi;|la73<728qC8lh4}o`03?6=9rB?mk5rnc1;>5<6sA>jj6sab2;94?7|@=km7p`m3`83>4}O<hl0qcl<b;295~N3io1vbo=l:182M2fn2wen>j50;3xL1ga3tdi?h4?:0yK0d`<ugh8j7>51zJ7ec=zfk>;6=4>{I6bb>{ij=;1<7?tH5ce?xhe<;0;6<uG4`d8ykd3;3:1=vF;ag9~jg23290:wE:nf:mf13=83;pD9oi;|la03<728qC8lh4}o`73?6=9rB?mk5rnc6;>5<6sA>jj6sab5;94?7|@=km7p`m4`83>4}O<hl0qcl;b;295~N3io1vbo:l:182M2fn2wen9j50;3xL1ga3tdi8h4?:0yK0d`<ugh?j7>51zJ7ec=zfk?;6=4>{I6bb>{ij<;1<7?tH5ce?xhe=;0;6<uG4`d8ykd2;3:1=vF;ag9~jg33290:wE:nf:mf03=83;pD9oi;|la13<728qC8lh4}o`63?6=9rB?mk5rnc7;>5<6sA>jj6sab4;94?7|@=km7p`m5`83>4}O<hl0qcl:b;295~N3io1vbo;l:182M2fn2wen8j50;3xL1ga3tdi9h4?:0yK0d`<ugh>j7>51zJ7ec=zfk<;6=4>{I6bb>{ij?;1<7?tH5ce?xhe>;0;6<uG4`d8ykd1;3:1=vF;ag9~jg03290:wE:nf:mf33=83;pD9oi;|la23<728qC8lh4}o`53?6=9rB?mk5rnc4;>5<6sA>jj6sab7;94?7|@=km7p`m6`83>4}O<hl0qcl9b;295~N3io1vbo8l:182M2fn2wen;j50;3xL1ga3tdi:h4?:0yK0d`<ugh=j7>51zJ7ec=zfk=;6=4>{I6bb>{ij>;1<7?tH5ce?xhe?;0;6<uG4`d8ykd0;3:1=vF;ag9~jg13290:wE:nf:mf23=83;pD9oi;|la33<728qC8lh4}o`43?6=9rB?mk5rnc5;>5<6sA>jj6sab6;94?7|@=km7p`m7`83>4}O<hl0qcl8b;295~N3io1vbo9l:182M2fn2wen:j50;3xL1ga3tdi;h4?:0yK0d`<ugh<j7>51zJ7ec=zfk2;6=4>{I6bb>{ij1;1<7?tH5ce?xhe0;0;6<uG4`d8ykd?;3:1=vF;ag9~jg>3290:wE:nf:mf=3=83;pD9oi;|la<3<728qC8lh4}o`;3?6=9rB?mk5rnc:;>5<6sA>jj6sab9;94?7|@=km7p`m8`83>4}O<hl0qcl7b;295~N3io1vbo6l:182M2fn2wen5j50;3xL1ga3tdi4h4?:0yK0d`<ugh3j7>51zJ7ec=zfk3;6=4>{I6bb>{ij0;1<7?tH5ce?xhe1;0;6<uG4`d8ykd>;3:1=vF;ag9~jg?3290:wE:nf:mf<3=83;pD9oi;|la=3<728qC8lh4}o`:3?6=9rB?mk5rnc;;>5<6sA>jj6sab8;94?7|@=km7p`m9`83>4}O<hl0qcl6b;295~N3io1vbo7l:182M2fn2wen4j50;3xL1ga3tdi5h4?:0yK0d`<ugh2j7>51zJ7ec=zfkk;6=4>{I6bb>{ijh;1<7?tH5ce?xhei;0;6<uG4`d8ykdf;3:1=vF;ag9~jgg3290:wE:nf:mfd3=83;pD9oi;|lae3<728qC8lh4}o`b3?6=9rB?mk5rncc;>5<6sA>jj6sab`;94?7|@=km7p`ma`83>4}O<hl0qclnb;295~N3io1vbool:182M2fn2wenlj50;3xL1ga3tdimh4?:0yK0d`<ughjj7>51zJ7ec=zfkh;6=4>{I6bb>{ijk;1<7?tH5ce?xhej;0;6<uG4`d8ykde;3:1=vF;ag9~jgd3290:wE:nf:mfg3=83;pD9oi;|laf3<728qC8lh4}o`a3?6=9rB?mk5rnc`;>5<6sA>jj6sabc;94?7|@=km7p`mb`83>4}O<hl0qclmb;295~N3io1vboll:182M2fn2wenoj50;3xL1ga3tdinh4?:0yK0d`<ughij7>51zJ7ec=zfki;6=4>{I6bb>{ijj;1<7?tH5ce?xhek;0;6<uG4`d8ykdd;3:1=vF;ag9~jge3290:wE:nf:mff3=83;pD9oi;|lag3<728qC8lh4}o``3?6=9rB?mk5rnca;>5<6sA>jj6sabb;94?7|@=km7p`mc`83>4}O<hl0qcllb;295~N3io1vboml:182M2fn2wennj50;3xL1ga3tdioh4?:0yK0d`<ughhj7>51zJ7ec=zfkn;6=4>{I6bb>{ijm;1<7?tH5ce?xhel;0;6<uG4`d8ykdc;3:1=vF;ag9~jgb3290:wE:nf:mfa3=83;pD9oi;|la`3<728qC8lh4}o`g3?6=9rB?mk5rncf;>5<6sA>jj6sabe;94?7|@=km7p`md`83>4}O<hl0qclkb;295~N3io1vbojl:182M2fn2wenij50;3xL1ga3tdihh4?:0yK0d`<ughoj7>51zJ7ec=zutwKLNuj308fa=3c>kivLMLt0|BCT~{GH
\ No newline at end of file diff --git a/coregen/fifo_xlnx_512x36_2clk.v b/coregen/fifo_xlnx_512x36_2clk.v index 3cc5e29f0..905069743 100644 --- a/coregen/fifo_xlnx_512x36_2clk.v +++ b/coregen/fifo_xlnx_512x36_2clk.v @@ -60,15 +60,15 @@ input wr_en; output [35 : 0] dout; output empty; output full; -output [8 : 0] rd_data_count; -output [8 : 0] wr_data_count; +output [9 : 0] rd_data_count; +output [9 : 0] wr_data_count; // synthesis translate_off FIFO_GENERATOR_V4_3 #( .C_COMMON_CLOCK(0), .C_COUNT_TYPE(0), - .C_DATA_COUNT_WIDTH(9), + .C_DATA_COUNT_WIDTH(10), .C_DEFAULT_VALUE("BlankString"), .C_DIN_WIDTH(36), .C_DOUT_RST_VAL("0"), @@ -108,19 +108,19 @@ output [8 : 0] wr_data_count; .C_PROG_FULL_THRESH_ASSERT_VAL(511), .C_PROG_FULL_THRESH_NEGATE_VAL(510), .C_PROG_FULL_TYPE(0), - .C_RD_DATA_COUNT_WIDTH(9), + .C_RD_DATA_COUNT_WIDTH(10), .C_RD_DEPTH(512), .C_RD_FREQ(1), .C_RD_PNTR_WIDTH(9), .C_UNDERFLOW_LOW(0), - .C_USE_DOUT_RST(0), + .C_USE_DOUT_RST(1), .C_USE_ECC(0), .C_USE_EMBEDDED_REG(0), .C_USE_FIFO16_FLAGS(0), - .C_USE_FWFT_DATA_COUNT(0), + .C_USE_FWFT_DATA_COUNT(1), .C_VALID_LOW(0), .C_WR_ACK_LOW(0), - .C_WR_DATA_COUNT_WIDTH(9), + .C_WR_DATA_COUNT_WIDTH(10), .C_WR_DEPTH(512), .C_WR_FREQ(1), .C_WR_PNTR_WIDTH(9), @@ -165,9 +165,5 @@ output [8 : 0] wr_data_count; // synthesis translate_on -// XST black box declaration -// box_type "black_box" -// synthesis attribute box_type of fifo_xlnx_512x36_2clk is "black_box" - endmodule diff --git a/coregen/fifo_xlnx_512x36_2clk.veo b/coregen/fifo_xlnx_512x36_2clk.veo index 40747fd2f..6699ee73b 100644 --- a/coregen/fifo_xlnx_512x36_2clk.veo +++ b/coregen/fifo_xlnx_512x36_2clk.veo @@ -41,8 +41,8 @@ fifo_xlnx_512x36_2clk YourInstanceName ( .dout(dout), // Bus [35 : 0] .empty(empty), .full(full), - .rd_data_count(rd_data_count), // Bus [8 : 0] - .wr_data_count(wr_data_count)); // Bus [8 : 0] + .rd_data_count(rd_data_count), // Bus [9 : 0] + .wr_data_count(wr_data_count)); // Bus [9 : 0] // INST_TAG_END ------ End INSTANTIATION Template --------- diff --git a/coregen/fifo_xlnx_512x36_2clk.xco b/coregen/fifo_xlnx_512x36_2clk.xco index c67e7e89f..5934ef285 100644 --- a/coregen/fifo_xlnx_512x36_2clk.xco +++ b/coregen/fifo_xlnx_512x36_2clk.xco @@ -1,7 +1,7 @@ ############################################################## # -# Xilinx Core Generator version K.31 -# Date: Mon Jul 28 22:47:43 2008 +# Xilinx Core Generator version K.39 +# Date: Thu Sep 3 17:24:24 2009 # ############################################################## # @@ -14,13 +14,13 @@ # # BEGIN Project Options SET addpads = False -SET asysymbol = True +SET asysymbol = False SET busformat = BusFormatAngleBracketNotRipped SET createndf = False -SET designentry = VHDL +SET designentry = Verilog SET device = xc3s2000 SET devicefamily = spartan3 -SET flowvendor = Foundation_iSE +SET flowvendor = Other SET formalverification = False SET foundationsym = False SET implementationfiletype = Ngc @@ -29,7 +29,7 @@ SET removerpms = False SET simulationfiles = Behavioral SET speedgrade = -5 SET verilogsim = True -SET vhdlsim = True +SET vhdlsim = False # END Project Options # BEGIN Select SELECT Fifo_Generator family Xilinx,_Inc. 4.3 @@ -39,7 +39,7 @@ CSET almost_empty_flag=false CSET almost_full_flag=false CSET component_name=fifo_xlnx_512x36_2clk CSET data_count=false -CSET data_count_width=9 +CSET data_count_width=10 CSET disable_timing_violations=false CSET dout_reset_value=0 CSET empty_threshold_assert_value=4 @@ -61,22 +61,22 @@ CSET programmable_empty_type=No_Programmable_Empty_Threshold CSET programmable_full_type=No_Programmable_Full_Threshold CSET read_clock_frequency=1 CSET read_data_count=true -CSET read_data_count_width=9 +CSET read_data_count_width=10 CSET reset_pin=true CSET reset_type=Asynchronous_Reset CSET underflow_flag=false CSET underflow_sense=Active_High -CSET use_dout_reset=false +CSET use_dout_reset=true CSET use_embedded_registers=false -CSET use_extra_logic=false +CSET use_extra_logic=true CSET valid_flag=false CSET valid_sense=Active_High CSET write_acknowledge_flag=false CSET write_acknowledge_sense=Active_High CSET write_clock_frequency=1 CSET write_data_count=true -CSET write_data_count_width=9 +CSET write_data_count_width=10 # END Parameters GENERATE -# CRC: 43b7cba0 +# CRC: b7f2a9ba diff --git a/coregen/fifo_xlnx_512x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/coregen/fifo_xlnx_512x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt index 5abd4e097..d110a0158 100644 --- a/coregen/fifo_xlnx_512x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +++ b/coregen/fifo_xlnx_512x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> -<document OS="lin" product="ISE" version="10.1"> +<document OS="lin64" product="ISE" version="10.1.03"> <!--The data in this file is primarily intended for consumption by Xilinx tools. The structure and the elements are likely to change over the next few releases. This means code written to parse this file will need to be revisited each subsequent release.--> - <application stringID="Xst" timeStamp="Mon Jul 28 15:46:26 2008"> + <application stringID="Xst" timeStamp="Thu Sep 3 10:23:58 2009"> <section stringID="XST_HDL_SYNTHESIS_REPORT"> - <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="2"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"> + <item dataType="int" stringID="XST_10BIT_ADDER" value="2"/> + </item> <item dataType="int" stringID="XST_COUNTERS" value="2"> <item dataType="int" stringID="XST_9BIT_UP_COUNTER" value="2"/> </item> <item dataType="int" stringID="XST_REGISTERS" value="31"> <item dataType="int" stringID="XST_1BIT_REGISTER" value="15"/> + <item dataType="int" stringID="XST_10BIT_REGISTER" value="2"/> <item dataType="int" stringID="XST_2BIT_REGISTER" value="1"/> <item dataType="int" stringID="XST_3BIT_REGISTER" value="1"/> <item dataType="int" stringID="XST_36BIT_REGISTER" value="1"/> - <item dataType="int" stringID="XST_9BIT_REGISTER" value="13"/> + <item dataType="int" stringID="XST_9BIT_REGISTER" value="11"/> </item> <item dataType="int" stringID="XST_XORS" value="68"> <item dataType="int" stringID="XST_1BIT_XOR2" value="68"/> @@ -24,20 +27,22 @@ </section> <section stringID="XST_ADVANCED_HDL_SYNTHESIS_REPORT"> <item dataType="int" stringID="XST_FSMS" value="1"/> - <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="2"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"> + <item dataType="int" stringID="XST_10BIT_ADDER" value="2"/> + </item> <item dataType="int" stringID="XST_COUNTERS" value="2"> <item dataType="int" stringID="XST_9BIT_UP_COUNTER" value="2"/> </item> - <item dataType="int" stringID="XST_REGISTERS" value="173"> - <item dataType="int" stringID="XST_FLIPFLOPS" value="173"/> + <item dataType="int" stringID="XST_REGISTERS" value="165"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="165"/> </item> <item dataType="int" stringID="XST_XORS" value="68"> <item dataType="int" stringID="XST_1BIT_XOR2" value="68"/> </item> </section> <section stringID="XST_FINAL_REGISTER_REPORT"> - <item dataType="int" stringID="XST_REGISTERS" value="188"> - <item dataType="int" stringID="XST_FLIPFLOPS" value="188"/> + <item dataType="int" stringID="XST_REGISTERS" value="192"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="192"/> </item> </section> <section stringID="XST_PARTITION_REPORT"> @@ -53,27 +58,28 @@ <item stringID="XST_KEEP_HIERARCHY" value="no"/> </section> <section stringID="XST_DESIGN_STATISTICS"> - <item stringID="XST_IOS" value="177"/> + <item stringID="XST_IOS" value="180"/> </section> <section stringID="XST_CELL_USAGE"> - <item dataType="int" stringID="XST_BELS" value="193"> + <item dataType="int" stringID="XST_BELS" value="223"> <item dataType="int" stringID="XST_GND" value="1"/> + <item dataType="int" stringID="XST_INV" value="1"/> <item dataType="int" stringID="XST_LUT1" value="18"/> - <item dataType="int" stringID="XST_LUT2" value="45"/> - <item dataType="int" stringID="XST_LUT2L" value="2"/> - <item dataType="int" stringID="XST_LUT3" value="7"/> - <item dataType="int" stringID="XST_LUT3L" value="2"/> - <item dataType="int" stringID="XST_LUT4" value="29"/> + <item dataType="int" stringID="XST_LUT2" value="50"/> + <item dataType="int" stringID="XST_LUT2D" value="1"/> + <item dataType="int" stringID="XST_LUT3" value="16"/> + <item dataType="int" stringID="XST_LUT3D" value="1"/> + <item dataType="int" stringID="XST_LUT3L" value="1"/> + <item dataType="int" stringID="XST_LUT4" value="45"/> <item dataType="int" stringID="XST_MUXCY" value="52"/> <item dataType="int" stringID="XST_VCC" value="1"/> <item dataType="int" stringID="XST_XORCY" value="36"/> </item> - <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="188"> + <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="192"> <item dataType="int" stringID="XST_FD" value="4"/> - <item dataType="int" stringID="XST_FDC" value="92"/> - <item dataType="int" stringID="XST_FDCE" value="42"/> - <item dataType="int" stringID="XST_FDE" value="36"/> - <item dataType="int" stringID="XST_FDP" value="9"/> + <item dataType="int" stringID="XST_FDC" value="85"/> + <item dataType="int" stringID="XST_FDCE" value="78"/> + <item dataType="int" stringID="XST_FDP" value="10"/> <item dataType="int" stringID="XST_FDPE" value="5"/> </item> <item dataType="int" stringID="XST_RAMS" value="1"> @@ -83,10 +89,10 @@ </section> <section stringID="XST_DEVICE_UTILIZATION_SUMMARY"> <item stringID="XST_SELECTED_DEVICE" value="3s2000fg456-5"/> - <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="123"/> - <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="188"/> - <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="103"/> - <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="177"/> + <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="137"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="192"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="133"/> + <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="180"/> <item AVAILABLE="333" dataType="int" stringID="XST_NUMBER_OF_BONDED_IOBS" value="0"/> <item AVAILABLE="40" dataType="int" stringID="XST_NUMBER_OF_BRAMS" value="1"/> </section> @@ -95,8 +101,8 @@ </section> <section stringID="XST_ERRORS_STATISTICS"> <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_ERRORS" value="0"/> - <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="131"/> - <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="16"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="128"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="17"/> </section> </application> diff --git a/coregen/fifo_xlnx_512x36_2clk_flist.txt b/coregen/fifo_xlnx_512x36_2clk_flist.txt index e9d38a49b..b0975be2d 100644 --- a/coregen/fifo_xlnx_512x36_2clk_flist.txt +++ b/coregen/fifo_xlnx_512x36_2clk_flist.txt @@ -1,11 +1,7 @@ # Output products list for <fifo_xlnx_512x36_2clk> -fifo_xlnx_512x36_2clk.asy fifo_xlnx_512x36_2clk.ngc -fifo_xlnx_512x36_2clk.sym fifo_xlnx_512x36_2clk.v fifo_xlnx_512x36_2clk.veo -fifo_xlnx_512x36_2clk.vhd -fifo_xlnx_512x36_2clk.vho fifo_xlnx_512x36_2clk.xco fifo_xlnx_512x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt fifo_xlnx_512x36_2clk_flist.txt diff --git a/coregen/fifo_xlnx_512x36_2clk_readme.txt b/coregen/fifo_xlnx_512x36_2clk_readme.txt index 07bf20790..a250a74f5 100644 --- a/coregen/fifo_xlnx_512x36_2clk_readme.txt +++ b/coregen/fifo_xlnx_512x36_2clk_readme.txt @@ -1,17 +1,10 @@ The following files were generated for 'fifo_xlnx_512x36_2clk' in directory -/home/jblum/proj/usrp2/trunk/fpga/coregen/: - -fifo_xlnx_512x36_2clk.asy: - Graphical symbol information file. Used by the ISE tools and some - third party tools to create a symbol representing the core. +/home/matt/gnuradio.git/usrp2/fpga/coregen/: fifo_xlnx_512x36_2clk.ngc: Binary Xilinx implementation netlist file containing the information required to implement the module in a Xilinx (R) FPGA. -fifo_xlnx_512x36_2clk.sym: - Please see the core data sheet. - fifo_xlnx_512x36_2clk.v: Verilog wrapper file provided to support functional simulation. This file contains simulation model customization data that is @@ -21,15 +14,6 @@ fifo_xlnx_512x36_2clk.veo: VEO template file containing code that can be used as a model for instantiating a CORE Generator module in a Verilog design. -fifo_xlnx_512x36_2clk.vhd: - VHDL wrapper file provided to support functional simulation. This - file contains simulation model customization data that is passed to - a parameterized simulation model for the core. - -fifo_xlnx_512x36_2clk.vho: - VHO template file containing code that can be used as a model for - instantiating a CORE Generator module in a VHDL design. - fifo_xlnx_512x36_2clk.xco: CORE Generator input file containing the parameters used to regenerate a core. diff --git a/coregen/fifo_xlnx_512x36_2clk_xmdf.tcl b/coregen/fifo_xlnx_512x36_2clk_xmdf.tcl index 42a681df9..8a0c0e3ff 100644 --- a/coregen/fifo_xlnx_512x36_2clk_xmdf.tcl +++ b/coregen/fifo_xlnx_512x36_2clk_xmdf.tcl @@ -36,18 +36,10 @@ utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim incr fcount -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.asy -utilities_xmdf::xmdfSetData $instance FileSet $fcount type asy -incr fcount - utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.ngc utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc incr fcount -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.sym -utilities_xmdf::xmdfSetData $instance FileSet $fcount type symbol -incr fcount - utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.v utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog incr fcount @@ -56,14 +48,6 @@ utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_51 utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template incr fcount -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.vho -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl_template -incr fcount - utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk.xco utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip incr fcount diff --git a/coregen/fifo_xlnx_64x36_2clk.ngc b/coregen/fifo_xlnx_64x36_2clk.ngc new file mode 100644 index 000000000..e8c55a1af --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$4;14g<,[o}e~g`n;"2*413&;$>"9 > %10?*nhel%fmyz cnpfc`h(|dz$Sni fhdl[}jipV<?t>8P2bnh*kah92:?7=>?9593416339:=<95?1122?45<9'::7?:421236>4?<283M=:42@:30>5799>0?><<13902?OIX\^1hd`33483:42<;?0DYY^ZT;flqq:4=3:5h6=|2123bb22>$?:79?4639561=110<?7;7N10g82?OIX\^1|ah_dosp|Ys`{oxd1;50?06?3<NFY__6}|`g^gntqX|axneQnsrgqp93=878>7;4FNQWW>uthoVof|ywPtipfwmYimnki1;50?3g?3<NFY__6}|`g^dvhiYs`{oxd1;50?07?3<NFY__6}|`g^dvhiYs`{oxdRo|sdpw80<76;>0:7GAPTV9twi`Wog`Rzgrdqk[kc`i}o797>12:4B0>0FIH80:H<479683=@7911<6B[[PTV9`drfWje~by29:1<2f>1=G\^[YY4}d^fbpdYdg|d0;4?>0`83?IR\Y__6z|Pd`vb[firf}6=6=0=;6F1?2@33>L3<958FGD2?=4<09>04=>?4::1042<0=8:=67;;82341=>8939748=;8C7?<GFI;1J<?5N139B67=F;01J_T@L_SGD7>DR:11IY^QFNGM2?F2<KH2J>6MJ139@L@ELWECHIC]J_U[SA7=DA:1H@_74CNONMQRBL8>0OB\J_FGMAWGSAFDTECH@7:AQADRBL81O>6JF3:FSK0=CX[K;96J_R@36?AVUI;?0H]\N339F07=AL:1MHN:4FEAF0>@CKY90JI^;;GFSA1=AN1:>7Kocsd38C6=@FM;0E?5F039J57=N:;1B?45FNHVPPDRB;2CEZ>5FOC08HL4<DF<0@BOKEE58HJANKHF?7A[[279OQQ4XD=1GYY=9;MWW7ZB13E__?RB;;MWW03=K]]>TH85BSFMM1>KRPJS>7@[WF4a8Idlhz_oydaac:OjjjtQm{ybcc=4N131?K743G;;86@>0168J466<2D:<?:4N0200>H68=>0B<>:4:L2432<F8:<86@>0968J46>;2D:=95A1027?K769=1E=<<;;O3271=I98>?7C?>559M54033G;:;95A10:7?K761:1E=?:4N0030>H6:8>0B<<=4:L2662<F88?86@>2468J441<2D:>::4N00;0>H6:090B<=;;O3041=I9:;?7C?<259M56133G;8495A12;0?K73<2D:8=:4N0620>H6<;>0B<:<4:L2032<F8><86@>4968J42>;2D:995A1427?K729=1E=8<<;O357>H6?:1E=5=4N0;1?K443G8;?6@=129M675<F;987C<;3:L116=I:?90B?9<;O0;7>H51:1E?==4N230?K55;2D8?>5A3518J6343G9=?6@<729M7=5<F:387C:?3:L757=I>;1E;>5A7918J2?53G287C6>3:L;76=I0=80B4=4N870?K?1;2D2;>5A9918J<?a3GHTNX]_IO]SVJVT?2DNXZA]K09L6>IL92Z?7]O]T`9SMKYE]ZCOTo5_IO]AQVHFEL90\_K>;P:8VDK6>Q;O=6]9;RMVVFC43ZZD86ZVPD11?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4567W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;=R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?03]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3455XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89:?S_k|umv264=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj969:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf5;5><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1<1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=1=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj929:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf5?5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR>=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_003?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\676<]9%l~k }f.e`|+ekcq%yhR~ats]amkY4:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV>9<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS8<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34565?2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>?1348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw67888<7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?013263=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;>?94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos234775>2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=><269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567;;8=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01613>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:?=?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1>1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<0<14>S7'nxm"h gbz-gim'{nT|cz}_fa?6;473\:$kh!rg-dg}(ddbr$~iQnup\cf:46;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k5>5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh080>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP00d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^32b>S7'nxm"h gbz-gim'{nT|cz}_fa\64`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ56n2_;#j|i.sd,cf~)keas#jPpovq[beX<8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV?9:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=2=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6:2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?6;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol0>0=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc929:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2:>378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX8;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP1378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX:;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP3378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX<;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP53;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86;2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:66;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>1:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2<>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86?2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:26;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<Q;299V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9V?996[?/fpe*w`(ojr%oaew/sf\tkruWniTtb|?01211>S7'nxm"h gbz-gim'{nT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/sf\tkruWniTtb|?01011>S7'nxm"h gbz-gim'{nT|cz}_fa\|jt7899996[?/fpe*w`(ojr%oaew/sf\tkruWniTtb|?01615>S7'nxm"h gbz-gim'~xT|cz}_ckm858592_;#j|i.sd,cf~)keas#z|Ppovq[goi4849=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0?0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<2<15>S7'nxm"h gbz-gim'~xT|cz}_ckm818592_;#j|i.sd,cf~)keas#z|Ppovq[goi4<49<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS=<?;T2,cw`)zo%lou lljz,swYwf}xTnd`P1328Q5)`zo$yj"ilx/aoo})pzVzexQmio]165=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ5582_;#j|i.sd,cf~)keas#z|Ppovq[goiW=8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT9?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2345403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=>>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv5679;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?00312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:9>:5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r12364413\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<===7:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4564:;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0504?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789>:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg959:91^<"i}f/pe+be&jf`t"y}_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/vp\tkruWni793?i;T2,cw`)zo%lou lljz,swYwf}xTknQ?1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_03e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]15c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[67a3\:$kh!rg-dg}(ddbr${Qnup\cfY39o1^<"i}f/pe+be&jf`t"y}_qlwvZadW<8=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<1<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5;5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>1:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7?3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8185>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1;1249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY7:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ>249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY5:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ<249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY3:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ:289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95:5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5979:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=0=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1=1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95>5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5939:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^21<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S<<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X:;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]06==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R:=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W<8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0106?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw67888>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0306?P6(o{l%~k!hcy,`hn~({U{by|Pgb]{kw678:8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUsc>?0514?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IdbcW{nThnQf_`fgwpd789:9?:5Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"Cnde]q`ZbdW`Ujhi}zb12341503\:$kh!rg-dh5(ul&my=#i}db0-vae(EhnoSjPdb]j[dbc{|h;<=>9369V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.Ob`aYulVnhSdQndeqvf567819h7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$Aljk_sf\`fYnWhnoxl?012\g|:66=80Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%FmijPre]ggZoXimnxyo>?01]`}92998UX[=:=;T2,cw`)zo%l`= }d.eq5+aulj8%~im M`fg[wbXljUbSljkst`3456Xkp6?2<?PSV30<>S7'nxm"h gm2-va)`z8$l~im=.sf`+HurjVnbjkQxr^pg[qkwWjs7<3=7;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\g|:66:20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%FxlPdhde[rtXzmUa}Qly=0=7==R8&myj#|i/fn3*wb(o{;%kjl2/pgg*Kt}kUoekhPws]q`ZrjxVir0>0<8:W3+bta&{l$ka>!re-dv4(`zmi9"jl/LqvfZbnnoU|~R|k_uos[f;<7927X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pltv?4;5>3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzT`xz31?1:?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IvseWmcmjRy}_sf\phvXd|~7>3=6;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\hpr;;7927X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pltv?0;5>3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzT`xz35?1:?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IvseWmcmjRy}_sf\phvXpfx7<3=6;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\|jt;97927X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$A~{m_ekebZquW{nTx`~Pxnp?6;5>3\:$kh!rg-dh5(ul&my=#i}db0-vae(EziSigif^uq[wbX|dzTtb|33?1:?P6(o{l%~k!hl1,q`*au9'myhn<!rea,IvseWmcmjRy}_sf\phvXpfx783=6;T2,cw`)zo%l`= }d.eq5+aulj8%~im Mrwa[aoanV}ySjPtlr\|jt;=79;7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$hdhi_vp\vaYsey6;2?64U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lY7:11^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^31<>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS?<7;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoX;;20Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]76==R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeR;=8:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnW?9:7X> gsd-vc)`d9$yh"i}1/eq`f4)zmi$~iQkc^k\ip~78987<3==;T2,cw`)zo%l`= }d.eq5+aulj8%~im re]ggZoXe|r;<=<30?305>S7'nxm"h gm2-va)`z8$l~im=.sf`+wbXljUbS`{w01218484:2_;#j|i.sd,ci6)zm%l~< hrea1*wbd'{nThnQf_lw{4565484:?>5Z0.eqb+ta'nf;"j gs3-cwbd:'xoo"|k_ea\mZkrp9:;>1?11012?P6(o{l%~k!hl1,q`*au9'myhn<!rea,vaYckVcTaxv?010?6;553\:$kh!rg-dh5(ul&my=#i}db0-vae(zmUooRgPmtz3454;:7;8=6[?/fpe*w`(oe:%~i!hr0,dvae5&{nh#jPdb]j[hs89:90>0<2:W3+bta&{l$ka>!re-dv4(`zmi9"jl/sf\`fYnWds<=>=<2<274=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx1236929;<1^<"i}f/pe+bj7&{n$k?!gsf`6+tck&xoSimPi^ov|567:5>5S^Y?309V4*aun'xm#jb?.sf,cw7)o{nh>#|kc.pg[aeXaVg~t=>?2=7=77=R8&myj#|i/fn3*wb(o{;%kjl2/pgg*tcWmiTeRczx12369399:;0Y=!hrg,qb*ak8'xo#j|>.fpgg7(ulj%yhRjl_h]nq}678;6=2><4U1-dvc(un&mg<#|k/fp2*btck;$yhn!}d^f`[lYj}q:;<?29>00b?P6(o{l%~k!hl1,q`*au9'xm{kz R@O\VAYBFVL\JY?=9:W3+bta&{l$ka>!re-dv4(un~l#_OB_SGDKPRXMG;9n6[?/fpe*w`(oe:%~i!hr0,qbr`s'[KFS[OCIE]ESCR69:90Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`YA[DUMJi?<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nSK]B_GDg5(Oi;11^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ@TEVLMh<#Fn0307>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c::<0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`YA[DUMJi<"Io1;?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPFRO\BCb5%@d:=?64U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZ`e:>1^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_h0f?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}UbSb|?0121b>S7'nxm"h gm2-va)`z8$yjzh{/dosp|Yao~TeRa}0123573<]9%l~k }f.eo4+tc'nx:"hxfu-vw`tX~hfbh?74U1-dvc(un&mg<#|k/fpbw+tt|z%ym`Qjmqvz[cdXa::0Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;?>5Z0.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYnWfx;<=>>2310?P6(o{l%~k!hl1,q`*auiz$yy} r`o\ahvsqVliSdQ`r123444>;:1^<"i}f/pe+bj7&{n$ko|.sqww*tfeVof|ywPfc]j[jt789:::9=<;T2,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`Ud~=>?00;276=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np34565919<7X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[lYhz9:;<??7_RU377=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np34565>:80Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;9>==;T2,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`Ud~=>?0922b>S7'nxm"h gm2-va)uidU}magk_guep75<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~996[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at0013>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|88:=?84U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov2674f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d=?Qmde211>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|8?9:6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at07261=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}9986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at707?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs1:80Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?4;76W@D]S=<l;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[}iu484:=?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;:7;:>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:468;:j6[?/fpe*w`(oe:%~i!}povq+firf}6;2<h4U1-dvc(un&mg<#|k/srmpw)dg|d0<0>f:W3+bta&{l$ka>!re-qtkru'je~by2=>0d8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{<2<2b>S7'nxm"h gm2-va)uxg~y#naznu>7:4`<]9%l~k }f.eo4+tc'{zex!lotlw8086m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY79l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX98o0Y=!hrg,qb*ak8'xo#~ats-`kphsW;;n7X> gsd-vc)`d9$yh"|nup,gjsi|V9:i6[?/fpe*w`(oe:%~i!}povq+firf}U?=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T9?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?30?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28485:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64<49=6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R>=3:W3+bta&{l$ka>!re-qtkru'je~byQk1^2\577<]9%l~k }f.eo4+tc'{zex!lotlw[a7X9;90Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T=R?=1:W3+bta&{l$ka>!re-qtkru'je~byQk1^017>S7'nxm"h gm2-va)uxg~y#naznu]g5Z4X9;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T??=4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P3^317>S7'nxm"h gm2-va)uxg~y#naznu]g5Z5X:;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T8??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P5368Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_omw4566:11^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQib^k11>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVc9o6[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k\kw67898m7X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_h]lv5678882?>5Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]j[jt789::>4Q\W10e?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkW`Ud~=>?00476c=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZ`rdeUbSb|?0122=44a3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQ`r123477?;:1^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQf_np3456591UX[=<j;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[lYhz9:;<?8=e:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXg{:;<=;<2d9V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYnWfx;<=>702`8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.Ob`aYpzVnjxlQlotlw[lYflm:;<=<<b:W3+bta&{l$ka>!ws-dsae6&~nhiuz M`fg[rtXlh~jSnaznu]j[dbc89:;8>l4U1-dvc(un&mg<#y}/fugg4(pljosx"Cnde]tvZbf|hUhcx`{_h]b`a6789<8n6[?/fpe*w`(oe:%{!hwea2*rbdmq~$Aljk_vp\`drfWje~byQf_`fg45670=:0Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GjhiQxr^fbpdYdg|dSdQnde2345Ydq5;58=5Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vir080;1:W3+bta&{l$ka>!ws-dsae6&~nhiuz M`fg[rtXlh~jSnaznu]j[dbc89:;Snw35?372>S7'nxm"h gm2-sw)`mi:"zjleyv,IdbcW~xThlzn_bmvjqYnWhno<=>?_b{?1;46WZ];845Z0.eqb+ta'nf;"z| gvf`5+qcklr#@okd^uq[agsiVidyczPi^cg`5678Vrd~1?110]JJSY7<:1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'DkohRy}_ecweZeh}g~TeRokd1234Z~hz585=<:<;T2,cw`)zo%l`= xr.et`f7)minty!Baef\swYci}kTob{at^k\eab789:Ttb|33?3206=R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HgclV}ySio{a^alqkrXaVkoh=>?0^zlv929989<7X> gsd-vc)`d9$|~"ixdb3-saebp}%FxlPdhde[rtXzmUa}Qly=2=72=R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HurjVnbjkQxr^pg[qkwWjs7=3=8;T2,cw`)zo%l`= xr.et`f7)minty!Bst`\`l`aW~xT~iQ{mq]`}949;>1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'Dy~nRjffg]tvZtcW}g{Snw33?14?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NwpdXl`lmSz|Pre]wiuYdq5>5?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#@}zb^fjbcYpzVxoSyc_mww858402_;#j|i.sd,ci6){%l{im>.vf`a}r(EziSigif^uq[wbX|dzT`xz31?1;?P6(o{l%~k!hl1,tv*aplj;%{imjxu-NwpdXl`lmSz|Pre]wiuYk}}692>64U1-dvc(un&mg<#y}/fugg4(pljosx"C|uc]gmc`X{UyhRzbp^nvp959;11^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'Dy~nRjffg]tvZtcW}g{Sa{{<5<0<>S7'nxm"h gm2-sw)`mi:"zjleyv,IvseWmcmjRy}_sf\phvXd|~793=7;T2,cw`)zo%l`= xr.et`f7)minty!Bst`\`l`aW~xT~iQ{mq]{kw:76:20Y=!hrg,qb*ak8'}y#jykc0,t`fc|&GxyoQkigd\swYulV~f|Rv`r=3=7==R8&myj#|i/fn3*rt(o~nh=#ykcdzw+HurjVnbjkQxr^pg[qkwWqey0?0<8:W3+bta&{l$ka>!ws-dsae6&~nhiuz Mrwa[aoanV}ySjPtlr\|jt;;7937X> gsd-vc)`d9$|~"ixdb3-saebp}%FxlPdhde[rtXzmUa}Qwos>7:6><]9%l~k }f.eo4+qu'n}oo< xdbg{p*Kt}kUoekhPws]q`ZrjxVrd~1;12g9V4*aun'xm#jb?.vp,crbd9'}oohv{/ekebZquW{nTx`~30?0e?P6(o{l%~k!hl1,tv*aplj;%{imjxu-tvZbf|hUhcx`{_h]36c=R8&myj#|i/fn3*rt(o~nh=#ykcdzw+rtXlh~jSnaznu]j[44a3\:$kh!rg-dh5(pz&m|hn?!weaf|q)pzVnjxlQlotlw[lY5:o1^<"i}f/pe+bj7&~x$kzjl1/ugg`~s'~xThlzn_bmvjqYnW:8m7X> gsd-vc)`d9$|~"ixdb3-saebp}%|~Rjnt`]`kphsW`U?>k5Z0.eqb+ta'nf;"z| gvf`5+qcklr#z|Pd`vb[firf}UbS8<i;T2,cw`)zo%l`= xr.et`f7)minty!xr^fbpdYdg|dSdQ9399V4*aun'xm#jb?.vp,crbd9'}oohv{/vp\`drfWje~byQf_`fg4567484846[?/fpe*w`(oe:%{!hwea2*rbdmq~${Qkauc\gjsi|VcTmij?012?6;5?3\:$kh!rg-dh5(pz&m|hn?!weaf|q)pzVnjxlQlotlw[lYflm:;<=2<>2:8Q5)`zo$yj"ic0/uq+bqck8$|hnkwt.uq[agsiVidyczPi^cg`56785>5?55Z0.eqb+ta'nf;"z| gvf`5+qcklr#z|Pd`vb[firf}UbSljk0123808412_;#j|i.sd,ci6){%l{im>.vf`a}r({UomyoPcnwmpZoXimn;<=>35?32`>S7'nxm"h gm2-sw)uidU|~Rka_h317>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;?0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz>2378Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr6=;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz<259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex4==;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[}iu494:=RGAV^21g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1?1100`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey0?0>13f8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?3?>13a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?3?=2b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{6?2<?=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz5?5=<?6;T2,cw`)zo%l`= xr.usjqt(F;;m7X> gsd-vc)`d9$|~"ynup,gjsi|5:5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7=3?i;T2,cw`)zo%l`= xr.usjqt(kfex1<11g9V4*aun'xm#jb?.vp,suhsz&idycz33?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=6=5c=R8&myj#|i/fn3*rt(yd~"m`uov?1;7b3\:$kh!rg-dh5(pz&}{by| cnwmpZ66m2_;#j|i.sd,ci6){%||cz}/bmvjqY69l1^<"i}f/pe+bj7&~x${}`{r.alqkrX:8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW:;n7X> gsd-vc)`d9$|~"ynup,gjsi|V>:i6[?/fpe*w`(oe:%{!xpovq+firf}U>>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2?>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?5;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64;49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1=1239V4*aun'xm#jb?.vp,suhsz&idyczPd0>7:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;=78:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_401?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18585:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5;5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2=>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?7;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54=49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1;1209V4*aun'xm#jb?.vp,suhsz&idyczPd3]366=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y7W88:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S<<<;T2,cw`)zo%l`= xr.usjqt(kfexRj=_0]264=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y5::1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U9S<<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_200?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[6Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U?><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q:179V4*aun'xm#`kb/emvpZoX88<0Y=!hrg,qb*kbe&ndyyQf_034?P6(o{l%~k!bel-gkprXaV;;=:5Z0.eqb+ta'dof#iazt^k\54703\:$kh!rg-nah)cg|~TeR?=169V4*aun'xm#`kb/emvpZoX9:;<7X> gsd-vc)jmd%ocxzPi^3752=R8&myj#|i/lgn+air|VcT=8?8;T2,cw`)zo%fi`!kotv\mZ719>1^<"i}f/pe+hcj'me~xRgP1634?P6(o{l%~k!bel-gkprXaV;3=:5Z0.eqb+ta'dof#iazt^k\5<713\:$kh!rg-nah)cg|~TeR<>7:W3+bta&{l$ahc dnww[lY588=0Y=!hrg,qb*kbe&ndyyQf_3323>S7'nxm"h mdo,`jssW`U9><94U1-dvc(un&gna"j`uu]j[756?2_;#j|i.sd,i`k(lfSdQ=4058Q5)`zo$yj"cjm.flqqYnW;?:;6[?/fpe*w`(elg$hb{{_h]1241<]9%l~k }f.ofi*bh}}UbS?9>7:W3+bta&{l$ahc dnww[lY508=0Y=!hrg,qb*kbe&ndyyQf_3;22>S7'nxm"h mdo,`jssW`U8=:5Z0.eqb+ta'dof#iazt^k\75703\:$kh!rg-nah)cg|~TeR=>169V4*aun'xm#`kb/emvpZoX;;;<7X> gsd-vc)jmd%ocxzPi^1052=R8&myj#|i/lgn+air|VcT?9?8;T2,cw`)zo%fi`!kotv\mZ529?1^<"i}f/pe+hcj'me~xRgP4048Q5)`zo$yj"cjm.flqqYnW<;=7X> gsd-vc)jmd%ocxzPi^422>S7'nxm"h mdo,`jssW`U<=;5Z0.eqb+ta'dof#iazt^k\<40<]9%l~k }f.ofi*bh}}UbS4?j;T2,cw`)zo%fi`!hdl,gi*KuidUYM@?>f:W3+bta&{l$ahc geo-`h)JzhgT^LC>0328Q5)`zo$yj"cjm.egi+bj'DxjaR\NM02365=R8&myj#|i/lgn+bbj&mg$Aob_SCN557582_;#j|i.sd,i`k(omg%h`!Br`o\VDK68;8;7X> gsd-vc)jmd%lh` km.OqehYUID;;??>4U1-dvc(un&gna"ikm/fn+HtfeVXJA<>;219V4*aun'xm#`kb/ffn*ak(E{kfS_OB11714>S7'nxm"h mdo,cak)ld%F~lcPR@O243473\:$kh!rg-nah)`ld$oa"C}al]QEH77?;:0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE8:3>=5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF==7>f:W3+bta&{l$ahc geo-`h)JzhgT^LC>1328Q5)`zo$yj"cjm.egi+bj'DxjaR\NM03365=R8&myj#|i/lgn+bbj&mg$Aob_SCN547582_;#j|i.sd,i`k(omg%h`!Br`o\VDK69;8;7X> gsd-vc)jmd%lh` km.OqehYUID;:??>4U1-dvc(un&gna"ikm/fn+HtfeVXJA<?;219V4*aun'xm#`kb/ffn*ak(E{kfS_OB10714>S7'nxm"h mdo,cak)ld%F~lcPR@O253473\:$kh!rg-nah)`ld$oa"C}al]QEH76?;:0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE8;3>=5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF=<7>f:W3+bta&{l$ahc geo-`h)JzhgT^LC>2328Q5)`zo$yj"cjm.egi+bj'DxjaR\NM00365=R8&myj#|i/lgn+bbj&mg$Aob_SCN577582_;#j|i.sd,i`k(omg%h`!Br`o\VDK6:;8;7X> gsd-vc)jmd%lh` km.OqehYUID;9??>4U1-dvc(un&gna"ikm/fn+HtfeVXJA<<;219V4*aun'xm#`kb/ffn*ak(E{kfS_OB13714>S7'nxm"h mdo,cak)ld%F~lcPR@O263473\:$kh!rg-nah)`ld$oa"C}al]QEH75?;:0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE883>=5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF=?7>f:W3+bta&{l$ahc geo-`h)JzhgT^LC>3328Q5)`zo$yj"cjm.egi+bj'DxjaR\NM01365=R8&myj#|i/lgn+bbj&mg$Aob_SCN567582_;#j|i.sd,i`k(omg%h`!Br`o\VDK6;;8;7X> gsd-vc)jmd%lh` km.OqehYUID;8??>4U1-dvc(un&gna"ikm/fn+HtfeVXJA<=;219V4*aun'xm#`kb/ffn*ak(E{kfS_OB12714>S7'nxm"h mdo,cak)ld%F~lcPR@O273473\:$kh!rg-nah)`ld$oa"C}al]QEH74?;:0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE893>=5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF=>7>f:W3+bta&{l$ahc geo-`h)JzhgT^LC>4328Q5)`zo$yj"cjm.egi+bj'DxjaR\NM06365=R8&myj#|i/lgn+bbj&mg$Aob_SCN517582_;#j|i.sd,i`k(omg%h`!Br`o\VDK6<;8;7X> gsd-vc)jmd%lh` km.OqehYUID;???>4U1-dvc(un&gna"ikm/fn+HtfeVXJA<:;1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB143e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL355c=R8&myj#|i/lgn+bbj&mg$Aob_SCN527a3\:$kh!rg-nah)`ld$oa"C}al]QEH7?9o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ90;n7X> gsd-vc)jmd%lh` km.OqehYUID8:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG9<<h4U1-dvc(un&gna"ikm/fn+HtfeVXJA??>f:W3+bta&{l$ahc geo-`h)JzhgT^LC=20d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM312b>S7'nxm"h mdo,cak)ld%F~lcPR@O104`<]9%l~k }f.ofi*ace'nf#@|nm^PBI736n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK5>8l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE;=:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG94<h4U1-dvc(un&gna"ikm/fn+HtfeVXJA?7>e:W3+bta&{l$ahc geo-`h)JzhgT^LC<1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB313e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL125c=R8&myj#|i/lgn+bbj&mg$Aob_SCN777a3\:$kh!rg-nah)`ld$oa"C}al]QEH549o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ;=;m7X> gsd-vc)jmd%lh` km.OqehYUID9>=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF?;?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@=81g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB393e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL1:5`=R8&myj#|i/lgn+bbj&mg$Aob_SCN04`<]9%l~k }f.ofi*ace'nf#@|nm^PBI166n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK398l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE=8:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG??<h4U1-dvc(un&gna"ikm/fn+HtfeVXJA9:>f:W3+bta&{l$ahc geo-`h)JzhgT^LC;50d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM542b>S7'nxm"h mdo,cak)ld%F~lcPR@O734`<]9%l~k }f.ofi*ace'nf#@|nm^PBI1>6n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK318o0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE<;m7X> gsd-vc)jmd%lh` km.OqehYUID?;=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF9<?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@;=1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB523e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL775c=R8&myj#|i/lgn+bbj&mg$Aob_SCN107a3\:$kh!rg-nah)`ld$oa"C}al]QEH319o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ=>;m7X> gsd-vc)jmd%lh` km.OqehYUID?3=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF94?j;T2,cw`)zo%fi`!hdl,gi*KuidUYM@8>f:W3+bta&{l$ahc geo-`h)JzhgT^LC900d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM732b>S7'nxm"h mdo,cak)ld%F~lcPR@O564`<]9%l~k }f.ofi*ace'nf#@|nm^PBI356n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK1<8l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE??:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG=:<h4U1-dvc(un&gna"ikm/fn+HtfeVXJA;9>f:W3+bta&{l$ahc geo-`h)JzhgT^LC980d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM7;2a>S7'nxm"h mdo,cak)ld%F~lcPR@O45c=R8&myj#|i/lgn+bbj&mg$Aob_SCN357a3\:$kh!rg-nah)`ld$oa"C}al]QEH169o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ?;;m7X> gsd-vc)jmd%lh` km.OqehYUID=8=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF;9?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@9:1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB773e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL545c=R8&myj#|i/lgn+bbj&mg$Aob_SCN3=7a3\:$kh!rg-nah)`ld$oa"C}al]QEH1>9l1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ08l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE1::j6[?/fpe*w`(elg$kic!dl-NvdkXZHG3=<h4U1-dvc(un&gna"ikm/fn+HtfeVXJA5<>f:W3+bta&{l$ahc geo-`h)JzhgT^LC730d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM962b>S7'nxm"h mdo,cak)ld%F~lcPR@O;14`<]9%l~k }f.ofi*ace'nf#@|nm^PBI=06n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK??8l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE12:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG35<k4U1-dvc(un&gna"ikm/fn+HtfeVXJA4?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@7?1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB903e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL;15c=R8&myj#|i/lgn+bbj&mg$Aob_SCN=67a3\:$kh!rg-nah)`ld$oa"C}al]QEH?39o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ1<;m7X> gsd-vc)jmd%lh` km.OqehYUID3==k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF5:?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@771g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB983:?P6(o{l%~k!bel-d`h(ce&D:<<?6;T2,cw`)zo%fi`!hdl,gi*H68:;27X> gsd-vc)jmd%lh` km.L2407>3\:$kh!rg-nah)`ld$oa"@>063:?P6(o{l%~k!bel-d`h(ce&D:<4?7;T2,cw`)zo%fi`!hdl,gi*H69830Y=!hrg,qb*kbe&moa#jb/O3254?<]9%l~k }f.ofi*ace'nf#C?>30;8Q5)`zo$yj"cjm.egi+bj'G;:9<74U1-dvc(un&gna"ikm/fn+K76?830Y=!hrg,qb*kbe&moa#jb/O32=4?<]9%l~k }f.ofi*ace'nf#C?=10;8Q5)`zo$yj"cjm.egi+bj'G;9?<74U1-dvc(un&gna"ikm/fn+K75=830Y=!hrg,qb*kbe&moa#jb/O3134?<]9%l~k }f.ofi*ace'nf#C?=90:8Q5)`zo$yj"cjm.egi+bj'G;8=45Z0.eqb+ta'dof#jjb.eo,J456901^<"i}f/pe+hcj'nnf"ic N0105<=R8&myj#|i/lgn+bbj&mg$B<=:189V4*aun'xm#`kb/ffn*ak(F89<=45Z0.eqb+ta'dof#jjb.eo,J45>901^<"i}f/pe+hcj'nnf"ic N0625<=R8&myj#|i/lgn+bbj&mg$B<:<189V4*aun'xm#`kb/ffn*ak(F8>>=45Z0.eqb+ta'dof#jjb.eo,J420901^<"i}f/pe+hcj'nnf"ic N06:5==R8&myj#|i/lgn+bbj&mg$B<;>9:W3+bta&{l$ahc geo-`h)I9<;:56[?/fpe*w`(elg$kic!dl-M505612_;#j|i.sd,i`k(omg%h`!A1472=>S7'nxm"h mdo,cak)ld%E=89>9:W3+bta&{l$ahc geo-`h)I9<3:56[?/fpe*w`(elg$kic!dl-M537612_;#j|i.sd,i`k(omg%h`!A1712=>S7'nxm"h mdo,cak)ld%E=;;>9:W3+bta&{l$ahc geo-`h)I9?=:56[?/fpe*w`(elg$kic!dl-M53?602_;#j|i.sd,i`k(omg%h`!A163:?P6(o{l%~k!bel-d`h(ce&D:;<?6;T2,cw`)zo%fi`!hdl,gi*H6?:;27X> gsd-vc)jmd%lh` km.L2307>3\:$kh!rg-nah)`ld$oa"@>763:?P6(o{l%~k!bel-d`h(ce&D:;4?6;T2,cw`)zo%fi`!hdl,gi*H608;27X> gsd-vc)jmd%lh` km.L2<67>3\:$kh!rg-nah)`ld$oa"@>843:?P6(o{l%~k!bel-d`h(ce&D:4:?6;T2,cw`)zo%fi`!hdl,gi*H600;37X> gsd-vc)jmd%lh` km.L2=4?<]9%l~k }f.ofi*ace'nf#C?610;8Q5)`zo$yj"cjm.egi+bj'G;2?<74U1-dvc(un&gna"ikm/fn+K7>=830Y=!hrg,qb*kbe&moa#jb/O3:34?<]9%l~k }f.ofi*ace'nf#C?690;8Q5)`zo$yj"cjm.egi+bj'G8;=<74U1-dvc(un&gna"ikm/fn+K47;830Y=!hrg,qb*kbe&moa#jb/O0314?<]9%l~k }f.ofi*ace'nf#C<?70;8Q5)`zo$yj"cjm.egi+bj'G8;5<64U1-dvc(un&gna"ikm/fn+K46901^<"i}f/pe+hcj'nnf"ic N3325<=R8&myj#|i/lgn+bbj&mg$B??<189V4*aun'xm#`kb/ffn*ak(F;;>=45Z0.eqb+ta'dof#jjb.eo,J770901^<"i}f/pe+hcj'nnf"ic N33:5<=R8&myj#|i/lgn+bbj&mg$B?<>189V4*aun'xm#`kb/ffn*ak(F;88=45Z0.eqb+ta'dof#jjb.eo,J742901^<"i}f/pe+hcj'nnf"ic N3045<=R8&myj#|i/lgn+bbj&mg$B?<6199V4*aun'xm#`kb/ffn*ak(F;9:56[?/fpe*w`(elg$kic!dl-M667612_;#j|i.sd,i`k(omg%h`!A2212=>S7'nxm"h mdo,cak)ld%E>>;>9:W3+bta&{l$ahc geo-`h)I::=:56[?/fpe*w`(elg$kic!dl-M66?612_;#j|i.sd,i`k(omg%h`!A2532=>S7'nxm"h mdo,cak)ld%E>9=>9:W3+bta&{l$ahc geo-`h)I:=?:56[?/fpe*w`(elg$kic!dl-M611612_;#j|i.sd,i`k(omg%h`!A25;2<>S7'nxm"h mdo,cak)ld%E>8?6;T2,cw`)zo%fi`!hdl,gi*H5=8;27X> gsd-vc)jmd%lh` km.L1167>3\:$kh!rg-nah)`ld$oa"@=543:?P6(o{l%~k!bel-d`h(ce&D99:?6;T2,cw`)zo%fi`!hdl,gi*H5=0;27X> gsd-vc)jmd%lh` km.L1247>3\:$kh!rg-nah)`ld$oa"@=623:?P6(o{l%~k!bel-d`h(ce&D9:8?6;T2,cw`)zo%fi`!hdl,gi*H5>>;27X> gsd-vc)jmd%lh` km.L12<7?3\:$kh!rg-nah)`ld$oa"@=70;8Q5)`zo$yj"cjm.egi+bj'G8<=<74U1-dvc(un&gna"ikm/fn+K40;830Y=!hrg,qb*kbe&moa#jb/O0414?<]9%l~k }f.ofi*ace'nf#C<870;8Q5)`zo$yj"cjm.egi+bj'G8<5<74U1-dvc(un&gna"ikm/fn+K4?9830Y=!hrg,qb*kbe&moa#jb/O0;74?<]9%l~k }f.ofi*ace'nf#C<750;8Q5)`zo$yj"cjm.egi+bj'G83;<74U1-dvc(un&gna"ikm/fn+K4?1820Y=!hrg,qb*kbe&moa#jb/O0:5<=R8&myj#|i/lgn+bbj&mg$B?7>189V4*aun'xm#`kb/ffn*ak(F;38=55Z0.eqb+ta'dof#jjb.eo,J67602_;#j|i.sd,i`k(omg%h`!A323;?P6(o{l%~k!bel-d`h(ce&D89<64U1-dvc(un&gna"ikm/fn+K50911^<"i}f/pe+hcj'nnf"ic N2;2<>S7'nxm"h mdo,cak)ld%E8<?7;T2,cw`)zo%fi`!hdl,gi*H3;820Y=!hrg,qb*kbe&moa#jb/O665==R8&myj#|i/lgn+bbj&mg$B99>8:W3+bta&{l$ahc geo-`h)I<0;37X> gsd-vc)jmd%lh` km.L654><]9%l~k }f.ofi*ace'nf#C;<199V4*aun'xm#`kb/ffn*ak(F<?:46[?/fpe*w`(elg$kic!dl-M127?3\:$kh!rg-nah)`ld$oa"@:90:8Q5)`zo$yj"cjm.egi+bj'G<:=55Z0.eqb+ta'dof#jjb.eo,J35602_;#j|i.sd,i`k(omg%h`!A643;?P6(o{l%~k!bel-d`h(ce&D=;<64U1-dvc(un&gna"ikm/fn+K0>9>1^<"i}f/pe+hcj'nnf"ic N63;?P6(o{l%~k!bel-d`h(ce&D<=<64U1-dvc(un&gna"ikm/fn+K14911^<"i}f/pe+hcj'nnf"ic N672<>S7'nxm"h mdo,cak)ld%E;:?7;T2,cw`)zo%fi`!hdl,gi*H01820Y=!hrg,qb*kbe&moa#jb/O:25==R8&myj#|i/lgn+bbj&mg$B5=>8:W3+bta&{l$ahc geo-`h)I0<;37X> gsd-vc)jmd%lh` km.L;34><]9%l~k }f.ofi*ace'nf#C66169V4*aun'xm#`kb/ffn*ak(F0;37X> gsd-vc)jmd%lh` km.L:54><]9%l~k }f.ofi*ace'nf#C7<199V4*aun'xm#`kb/ffn*ak(F0?:46[?/fpe*w`(elg$kic!dl-M=27?3\:$kh!rg-nah)`ld$oa"@69378Q5)`zo$yj"cjm.egi+bj'V|j~d`key2345:76;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2>0?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;9849:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<00=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|56785;82?84U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>20;413\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7=80=6:W3+bta&{l$ahc geo-`h)X~hxbbikw01238409:?1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1?8>348Q5)`zo$yj"cjm.egi+bj'V|j~d`key2345:6078=7X> gsd-vc)jmd%lh` km.]uewoillr;<=>318<11>S7'nxm"h mdo,cak)ld%Tzl|fneg{45674849:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<32=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|567858:2?84U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>16;413\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7>>0=6:W3+bta&{l$ahc geo-`h)X~hxbbikw01238729:?1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1<:>348Q5)`zo$yj"cjm.egi+bj'V|j~d`key2345:5>78=7X> gsd-vc)jmd%lh` km.]uewoillr;<=>326<12>S7'nxm"h mdo,cak)ld%Tzl|fneg{45674;25>;5Z0.eqb+ta'dof#jjb.eo,[sguagnnt=>?0=0::73<]9%l~k }f.ofi*ace'nf#Rxnrhlga}6789692?84U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>04;413\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7?<0=6:W3+bta&{l$ahc geo-`h)X~hxbbikw01238649:?1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1=<>348Q5)`zo$yj"cjm.egi+bj'V|j~d`key2345:4<78=7X> gsd-vc)jmd%lh` km.]uewoillr;<=>334<11>S7'nxm"h mdo,cak)ld%Tzl|fneg{45674:4996[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<5<11>S7'nxm"h mdo,cak)ld%Tzl|fneg{45674<4996[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<7<11>S7'nxm"h mdo,cak)ld%Tzl|fneg{45674>4996[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<9<11>S7'nxm"h mdo,cak)ld%Tzl|fneg{4567404:i6[?/fpe*w`(elg$kic!dl-gkprXa5:5=k5Z0.eqb+ta'dof#jjb.eo,`jssW`6:<3?i;T2,cw`)zo%fi`!hdl,gi*bh}}Ub0<?11g9V4*aun'xm#`kb/ffn*ak(lfSd2>2?3e?P6(o{l%~k!bel-d`h(ce&ndyyQf<01=5c=R8&myj#|i/lgn+bbj&mg$hb{{_h>20;7a3\:$kh!rg-nah)`ld$oa"j`uu]j84399o1^<"i}f/pe+hcj'nnf"ic dnww[l:6>7;m7X> gsd-vc)jmd%lh` km.flqqYn48=5=k5Z0.eqb+ta'dof#jjb.eo,`jssW`6:43?i;T2,cw`)zo%fi`!hdl,gi*bh}}Ub0<711d9V4*aun'xm#`kb/ffn*ak(lfSd2>>0d8Q5)`zo$yj"cjm.egi+bj'me~xRg321<2b>S7'nxm"h mdo,cak)ld%ocxzPi=02:4`<]9%l~k }f.ofi*ace'nf#iazt^k?6786n2_;#j|i.sd,i`k(omg%h`!kotv\m94468l0Y=!hrg,qb*kbe&moa#jb/emvpZo;:=4:j6[?/fpe*w`(elg$kic!dl-gkprXa58>2<h4U1-dvc(un&gna"ikm/fn+air|Vc7>;0>f:W3+bta&{l$ahc geo-`h)cg|~Te1<8>0d8Q5)`zo$yj"cjm.egi+bj'me~xRg329<2b>S7'nxm"h mdo,cak)ld%ocxzPi=0::4c<]9%l~k }f.ofi*ace'nf#iazt^k?6;7a3\:$kh!rg-nah)`ld$oa"j`uu]j86699o1^<"i}f/pe+hcj'nnf"ic dnww[l:497;m7X> gsd-vc)jmd%lh` km.flqqYn4:85=k5Z0.eqb+ta'dof#jjb.eo,`jssW`68?3?i;T2,cw`)zo%fi`!hdl,gi*bh}}Ub0>:11g9V4*aun'xm#`kb/ffn*ak(lfSd2<5?3f?P6(o{l%~k!bel-d`h(ce&ndyyQf<2<2a>S7'nxm"h mdo,cak)ld%ocxzPi=6=5`=R8&myj#|i/lgn+bbj&mg$hb{{_h>6:4c<]9%l~k }f.ofi*ace'nf#iazt^k?2;7b3\:$kh!rg-nah)`ld$oa"j`uu]j8286m2_;#j|i.sd,i`k(omg%h`!kotv\m9>99l1^<"i}f/pe+hcj'nnf"ic dnww[l:>68n0Y=!hrg,qb*kbe&moa#jb/emvpZoX88n0Y=!hrg,qb*kbe&moa#jb/emvpZoX98o0Y=!hrg,qb*kbe&moa#jb/emvpZoX99;n7X> gsd-vc)jmd%lh` km.flqqYnW8;:i6[?/fpe*w`(elg$kic!dl-gkprXaV;9=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U:?<k4U1-dvc(un&gna"ikm/fn+air|VcT=9?j;T2,cw`)zo%fi`!hdl,gi*bh}}UbS<;>e:W3+bta&{l$ahc geo-`h)cg|~TeR?91d9V4*aun'xm#`kb/ffn*ak(lfSdQ>70g8Q5)`zo$yj"cjm.egi+bj'me~xRgP193f?P6(o{l%~k!bel-d`h(ce&ndyyQf_0;2`>S7'nxm"h mdo,cak)ld%ocxzPi^02a>S7'nxm"h mdo,cak)ld%ocxzPi^035`=R8&myj#|i/lgn+bbj&mg$hb{{_h]154c<]9%l~k }f.ofi*ace'nf#iazt^k\677b3\:$kh!rg-nah)`ld$oa"j`uu]j[756m2_;#j|i.sd,i`k(omg%h`!kotv\mZ439l1^<"i}f/pe+hcj'nnf"ic dnww[lY5=8o0Y=!hrg,qb*kbe&moa#jb/emvpZoX:?;n7X> gsd-vc)jmd%lh` km.flqqYnW;=:i6[?/fpe*w`(elg$kic!dl-gkprXaV83=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U95<j4U1-dvc(un&gna"ikm/fn+air|VcT?<k4U1-dvc(un&gna"ikm/fn+air|VcT?=?j;T2,cw`)zo%fi`!hdl,gi*bh}}UbS>?>e:W3+bta&{l$ahc geo-`h)cg|~TeR==1d9V4*aun'xm#`kb/ffn*ak(lfSdQ<30g8Q5)`zo$yj"cjm.egi+bj'me~xRgP353f?P6(o{l%~k!bel-d`h(ce&ndyyQf_272`>S7'nxm"h mdo,cak)ld%ocxzPi^62`>S7'nxm"h mdo,cak)ld%ocxzPi^72`>S7'nxm"h mdo,cak)ld%ocxzPi^42`>S7'nxm"h mdo,cak)ld%ocxzPi^52`>S7'nxm"h mdo,cak)ld%ocxzPi^:2`>S7'nxm"h mdo,cak)ld%ocxzPi^;1<>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^68V8Tj8<:;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY33[6423\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q;;S9<7;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY32[7Ya=;?0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T<?P3378Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\47X<;20Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T<<P2^d660=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_9;U8>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W13]76==R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_9:U9Sk;=5:W3+bta&{l$ahc geo-`h)nfz~T@]CPMTZ27Z55=2_;#j|i.sd,i`k(omg%h`!fnrv\HUKXE\R:?R:=8:W3+bta&{l$ahc geo-`h)nfz~T@]CPMTZ20Z4Xn<8>7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU?;_206?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]73W=837X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU?:_3]e173<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP8?T??;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX07\07><]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP8<T>Rh:249V4*aun'xm#`kb/ffn*ak(agySA^B_LW[53Y4:<1^<"i}f/pe+hcj'nnf"ic ioqw[IVJWD_S=;Q;299V4*aun'xm#`kb/ffn*ak(agySA^B_LW[52Y5Wo?996[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV>7^111>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^6?V>946[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV>8^0\b0423\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q;3S><:;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY3;[14?3\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q;2S?Qi5378Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\4?X;;?0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T<7P4358Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\4Y5Wo?986[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV>_207?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]7X<;20Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T?>P2^d660=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_:9U8>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W21]76==R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_:8U9Sk;=5:W3+bta&{l$ahc geo-`h)nfz~T@]CPMTZ15Z55=2_;#j|i.sd,i`k(omg%h`!fnrv\HUKXE\R9=R:=8:W3+bta&{l$ahc geo-`h)nfz~T@]CPMTZ16Z4Xn<8>7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU<=_206?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]45W=837X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU<<_3]e173<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP;9T??;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX31\07><]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP;>T>Rh:249V4*aun'xm#`kb/ffn*ak(agySA^B_LW[61Y4:<1^<"i}f/pe+hcj'nnf"ic ioqw[IVJWD_S>9Q;299V4*aun'xm#`kb/ffn*ak(agySA^B_LW[60Y5Wo?996[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV=5^111>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^5=V>946[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV=6^0\b0423\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q8=S><:;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY05[14?3\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q8<S?Qi5378Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\71X;;?0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T?9P43:8Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\7>X:Vl>>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W29]060=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_:1U?>55Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W28]1[c35=2_;#j|i.sd,i`k(omg%h`!fnrv\HUKXE\R95R==5:W3+bta&{l$ahc geo-`h)nfz~T@]CPMTZ1=Z25?2_;#j|i.sd,i`k(omg%h`!fnrv\HUKXE\R9S?Qi5368Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\7Y4:=1^<"i}f/pe+hcj'nnf"ic ioqw[IVJWD_S>R:=8:W3+bta&{l$ahc geo-`h)nfz~T@]CPMTZ04Z4Xn<8>7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU=?_206?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]57W=837X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU=>_3]e173<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP:;T??;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX23\07><]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP:8T>Rh:249V4*aun'xm#`kb/ffn*ak(agySA^B_LW[77Y4:<1^<"i}f/pe+hcj'nnf"ic ioqw[IVJWD_S??Q;299V4*aun'xm#`kb/ffn*ak(agySA^B_LW[76Y5Wo?996[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV<3^111>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^4;V>946[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV<4^0\b0423\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q9?S><:;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY17[14?3\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q9>S?Qi5378Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\63X;;?0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T>;P4358Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\6Y5Wo?986[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV<_207?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]5X<;=0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T9Q=_g710>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^3W:8?7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU:P4358Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\0Y5Wo?986[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV:_207?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]3X<;=0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T;Q=_g710>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^1W:8?7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU8P4358Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\2Y5Wo?986[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV8_207?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]1X<;=0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^T5Q=_g710>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^?W:8?7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU6P4358Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\<Y5Wo?986[?/fpe*w`(elg$kic!dl-jjvrXDYGTAXV6_207?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]?X<;<0Y=!hrg,qb*kbe&moa#jb/hlppZJWEVG^TR<Pf400?P6(o{l%~k!bel-d`h(ce&ceyQCPL]NQ]Y4::1^<"i}f/pe+hcj'nnf"ic ioqw[IVJWD_SS9?i;T2,cw`)zo%fi`!hdl,gi*qua}oToy|c219V4*aun'xm#`kb/ffn*ak({ciRm{rm314>S7'nxm"h mdo,cak)ld%|~dzj_bvqh7473\:$kh!rg-nah)`ld$oa"y}iug\gqtk;8=0Y=!hrg,qb*tfeVxnkb{{_dl27>S7'nxm"h r`o\swYbf8n0Y=!hrg,qb*tt|kf`#jPrrv\evtbo;:0Y=!hrg,qb*tt|kf`#jPrrv\evtboVn:>=5Z0.eqb+ta'{ynae re]qwqYf{{olSi<>c:W3+bta&{l$~~zmlj-q`Ztt|Vidao?k;T2,cw`)zo%yylck.pg[wusWjefn<?j;T2,cw`)zo%yylck.pg[wusW{ol0=0>e:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1?11d9V4*aun'xm#}{bmi,vaYu{}Uyij2=>0f8Q5)`zo$yj"||tcnh+wbXzz~T~hiP00f8Q5)`zo$yj"||tcnh+wbXzz~T~hiP10f8Q5)`zo$yj"||tcnh+wbXzz~T~hiP20f8Q5)`zo$yj"||tcnh+rtXzz~Tm~|jg328Q5)`zo$yj"||tcnh+rtXzz~Tm~|jg^f265=R8&myj#|i/sqwfim({UyyQnssgd[a46k2_;#j|i.sd,vvredb%|~R||t^alig7c3\:$kh!rg-qwqdkc&}yS}{_bmnf47b3\:$kh!rg-qwqdkc&}yS}{_sgd8586m2_;#j|i.sd,vvredb%|~R||t^pfc9799m1^<"i}f/pe+wusjea${Q}su]qabY79m1^<"i}f/pe+wusjea${Q}su]qabY6i2_XI_QNLHCPg>STM[U]E^GMLD18RFE>3_CN[RZVPD68SFJL:2]N=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB96V@RB[5?]USD@H<7U][_FLG3>^T\V\HOo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohfj1j``a|t^gntqe3hffc~zPftno2>dfkb{h6lncjws[hguclx87nbdd:fbpdYdg|d$='k;ecweZeh}g~#=$j4d`vb[firf}"9%i5kauc\gjsi|!9"h6jnt`]`kphs =#o7io{a^alqkr/= n0hlzn_bmvjq.1!m1omyoPcnwmp969n2njxlQlotlw83<76>1ondzjrs48`lh/8 <0hd`'1(58`lh/99#<7iga(03*3>bnf!;9%:5kio*27,1<l`d#=9'8;ekm,43.?2nbb%?9)69gmk.6? =0hd`'19+4?aoi 83":6jfn)0*3>bnf!8;%:5kio*15,1<l`d#>?'8;ekm,75.?2nbb%<;)69gmk.5= =0hd`'27+4?aoi ;=";6jfn)0;-2=cag"95$84dhl+7,1<l`d#?='8;ekm,67.?2nbb%==)69gmk.4; =0hd`'35+4?aoi :?":6jfn)6*2>bnf!?":6jfn)4*2>bnf!=":6jfn):*2>bnf!3":6jfn=2=3>bnf5;;2:5kio>25;1<l`d7=?08;ekm8459?2nbb1?;>69gmk:6=7=0hd`317<4?aoi48=5;6jfn=3;:2=cag6:5384dhl?5;1<l`d7>=08;ekm8779?2nbb1<=>69gmk:5;7=0hd`325<4?aoi4;?5;6jfn=05:2=cag69;394dhl?6=803mce0?716:fjj949?2nbb1=?>69gmk:497=0hd`333<4?aoi4:95;6jfn=17:<=cag6897>17:fjj9526?1oec2<>79gmk:36?1oec2:>79gmk:16?1oec28>79gmk:?6?1oec26>69gkpr/8 =0hb{{(0+;?air|!;;%55kotv+54/?3me~x%?=)99gkpr/9:#37iazt)37-==cg|~#=8'7;emvp-71!11ocxz'16+;?air|!;3%55kotv+5</03me~x%<&8:flqq.58 20hb{{(33*<>bh}}"9>$64dnww,75.02ndyy&=4(:8`jss ;?"46j`uu*12,><lf$?9&8:flqq.50 20hb{{(3;*3>bh}}"8%55kotv+75/?3me~x%=>)99gkpr/;;#37iazt)10-==cg|~#?9'7;emvp-52!>1ocxz'4(58`jss <#<7iazt)4*3>bh}}"<%:5kotv+<,1<lf$4'8;emvp96902ndyy2>0?:8`jss48;546j`uu>26;><lf0<=18:flqq:6<720hb{{<07=<>bh}}6::364dnww841902ndyy2>8?:8`jss4835;6j`uu>2:==cg|~7>=07;emvp946611ocxz323<;?air|588255kotv?618?3me~x1<:>99gkpr;:?437iazt=04:==cg|~7>507;emvp94>6>1ocxz32?:8`jss4::546j`uu>05;><lf0><18:flqq:4;720hb{{<26=e>bh}}6897>18:flqq:4=7=0hb{{<2<4?air|5>5;6j`uu>6:2=cg|~7:394dnww82803me~x1617:flqq:>611nhdh=nff6?`kw|p997kgio^efj`tf|fxTz9Q<,!Zjhlh(JEYI-Ijndpbpjt'99$:"==>4:djbjYdgrT:9v<6^0`hn553ocmcRvcny]50}51W;igg!hffn]dakcui}eyS{:P3-LLJ@*IGGO8ni5iigm\|ihW?>s?;Q=cmi/bl`hWnoeio{os]u0Z5+sjUcm~Qfnu]`hn;7$jUcm~Q|rrv>4)eXzmUm~h21-a\lduXzmUomyoPcnwmp87+kVnbbRyfduj>73*dWakxSz|Pd`vb[firf}7: nQiumn\big`{VxxxRxnl<3/gZojxeoficznthmm[qwm48'oR{|e^gnf`bcmmUyij3?,b]tvZ`umx7: nQzsd]gkprXzz~6=!mPuoffvcjhVfd{0>#c^jbwZiqm{lgcz3?,b]sv`jhimUgmykacx?3(fYcg|~T{dj{h<15(fYj{neeS{oc=0.`[wbXllzd08;,b]kevYrfmoyjaax=1.`[mgtWhffc~zPftno95*dWakxS}{=0.`[agsiVidyczPwhfwl81+kVbjRy}_`ah95*dW|ynShml=1.`[fijefdToaalk<2/gZquWhi`Saax=1.`[wbXxg~ySzgkti?5(fYr{lUm{kzPd`vb[firf}7: nQgar]bhhit|Vof|yw20-a\vaYci}kTob{at^uj`qn:?%iTc{k}fmmt[iip59&hSz|Ppovq[roc|a7= nQrne\ahvsqV~r|h3?,b]tvZbf|hUhcx`{_vkgpm;0$jU{~hb`ae]qabu:9%iThb{{_sqw[sgk59&hSeo|_ecweZeh}g~6<!mPpsmd[cskdV~c~h}g_ogdeqcX~hf6:?"l_vp\``vs`4<? nQrne\ahvsqV~c~h}g_ogdeqcX~hf69!mPpsmd[`kw|pUdk|h^cpw`tsWkg19"l_icp[sgkam7; nQrne\bpjkW}byi~fParqfvqYqie7=?!m`mqmmakrXfhgn1kgio^zoj}Y1<q9=S?mck-a\rdjnlVfd{0>#c^rqmhYaaoeTxt~j=431|60+kVzycjQiumn\p|vb59&hS`kbos{\p|vb5;&v>h5iigm\|ihW?>s?;Q=cmi\bl`hWnoeio{os]u0Z5Xpz~T=95iumn4?lhsWjf`46`hccwjha><goyjaaxa:rqkbYbey~r=95rne\ahvsqV~c~h}g(1+20>vugnUna}zv_ujqavn/9 ;?7}|`g^gntqX|axne&=)068twi`Wlg{xtQ{hsgpl-5.9=1{~biPelrw}Zrozlyc$9'>4:rqkbYbey~rSyf}erj+1,713yxdkRkbpu{\pmtb{a6>6=0>b:rqkbYbey~rSyf}erj\evubz}";%<l4psmd[`kw|pUdk|h^cpw`ts 8#:n6~}of]fiur~W}byi~fParqfvq.5!8h0|ah_dosp|Ys`{oxdRo|sdpw,6/6j2zycjQjmqvz[qnumzbTm~}jru*7-4d<x{elShctx]wlwct`Vkxh|{(4+2`>vugnUna}zv_ujqavnXizyn~y2::1<2f>vugnUna}zv_ujqavnXflmjxh&?)0`8twi`Wlg{xtQ{hsgplZhboh~n$<'>b:rqkbYbey~rSyf}erj\j`af|l"9%<l4psmd[`kw|pUdk|h^lfcdrb :#:n6~}of]fiur~W}byi~fPndebp`.3!8h0|ah_dosp|Ys`{oxdR`jg`vf,0/6l2zycjQjmqvz[qnumzbTbhintd>6>58>3yxdkRhzlm30?uthoVl~`aQ{hsgpl-6.9:1{~biPftno[qnumzb#=$?<;qplcZ`rdeUdk|h)0*56=wzfmTjxbc_ujqavn/; ;87}|`g^dvhiYs`{oxd%:&129svjaXn|fgSyf}erj+1,723yxdkRhzlm]wlwct`5?1<3?n;qplcZ`rdeUdk|h^cpw`ts 9#:m6~}of]eqijX|axneQnsrgqp-7.9h1{~biPftno[qnumzbTm~}jru*1-4g<x{elSk{cl^vkv`uoWhyxiz'3(3b?uthoVl~`aQ{hsgplZgt{lx$9'>a:rqkbYa}efTxe|jsi]bwvcu|!?"=n5rne\bpjkW}byi~fParqfvq:2294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g<x{elSk{cl^vkv`uoWgolmyk'2(3b?uthoVl~`aQ{hsgplZhboh~n$>'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8i0|ah_gwohZrozlycSckhaug?1?69>2xoSnbd119q`Zbf|hUhcx`{(1+24>tcWmkmRm`uov+5,773{nThlzn_bmvjq.5!8:0~iQkauc\gjsi|!9"==5}d^fbpdYdg|d$9'>0:pg[agsiVidycz'5(33?wbXlh~jSnaznu*5-46<zmUomyoPcnwmp969991yhRjnt`]`kphs484:<6|k_ecweZeh}g~7>3??;sf\`drfWje~by2<>028vaYci}kTob{at=6=55=ulVnjxlQlotlw8086:2xoSio{a^alqkr;>3:5==5}d^fbpdYdg|d0;0:;sf\ak0<zmUyy=4rrv4?vdn|lxy86}}su68pwsb12ehh|ilnu6?sgkam<0{Qncj48swYddb;;7z|Pd`vb[firf}";%<>4ws]geqgXkfex%?&119tvZbf|hUhcx`{(3+24>quWmkmRm`uov+7,773~xThlzn_bmvjq.3!8:0{Qkauc\gjsi|!?"==5xr^fbpdYdg|d$;'>0:uq[agsiVidycz30?33?rtXlh~jSnaznu>2:46<{UomyoPcnwmp949991|~Rjnt`]`kphs4:4:<6y}_ecweZeh}g~783??;vp\`drfWje~by2:>008swYci}kTob{at=494;773~xThlzn_bmvjq:16<1|~Rka6:uq[wusuIJ{=;6k;AB{5?@=<3;p_9:55229<?74:0::;7<n0egxj1>c281e85k54:&7<g<30<1v_9<55229<?74:0::;7<n0eg8W37==:31<7?<28223?4f8ml0_9<552;94?74:0::;7<n0d28`054290:6<u\458675<?28995=?8:3c3``=q\mh1<7?51;06b~U3<3?8<765120:441=:h:oi6*;83856>P30j09wx8k:09v2`<73t.o87?=;c707?6==m0868jtH5:3?_5e2=q997<;:03955<z,mn19>=4$5:b>0553`?<;7>5;n7;3?6=,m<195k4ne794>=h=1<1<7*k6;7;a>hc=3;07b;75;29 a0==1o0bi;52:9l1=2=83.o:7;7e:lg1?5<3f?3?7>5$e491=c<fm?1865`59094?"c>3?3i6`k5;78?j3?93:1(i8559g8ja3=>21d9;k50;&g2?30=2do97>4;n75`?6=,m<19:;4ne795>=h=?i1<7*k6;741>hc=3807b;9b;29 a0==>?0bi;53:9l13g=83.o:7;85:lg1?2<3f?=57>5$e49123<fm?1965`57:94?"c>3?<96`k5;48?l3>83:17b;<7;29?j3493:17d;70;29?l3013:17b;?4;29 a0==;=0bi;50:9l155=83.o:7;=7:lg1?7<3f?;>7>5$e49171<fm?1>65`51394?"c>3?9;6`k5;18?j3783:1(i855358ja3=<21d8kh50;&g2?35?2do97;4;n6e`?6=,m<19?94ne792>=h<oi1<7*k6;713>hc=3=07b:ib;29 a0==;=0bi;58:9l0cg=83.o:7;=7:lg1??<3f>m57>5$e49171<fm?1m65`4g:94?"c>3?9;6`k5;`8?j2a?3:1(i855358ja3=k21d8k850;&g2?35?2do97j4;n6e1?6=,m<19?94ne79a>=h<o>1<7*k6;713>hc=3l07b:i2;29 a0==;=0bi;51198k1`6290/h;4:269m`0<6921d8k>50;&g2?35?2do97?=;:m7ac<72-n=68<8;of6>45<3f>ni7>5$e49171<fm?1=954o5gg>5<#l?0>>:5ad4821>=h<li1<7*k6;713>hc=3;=76a;ec83>!b12<8<7cj::058?j2bi3:1(i855358ja3=9110c9k6:18'`3<2:>1eh84>9:9l15g=83.o:7;=7:lg1?7f32e><44?:%f5>0403gn>6<l4;n73<?6=,m<19?94ne795f=<g<:<6=4+d78662=il<0:h65`51494?"c>3?9;6`k5;3f?>i28<0;6)j9:404?kb228l07b:ie;29 a0==;=0bi;52198k1`4290/h;4:269m`0<5921d8h650;&g2?35?2do97<=;:m7a2<72-n=68<8;of6>75<3`>in7>5$e490ac<fm?1<65f4cc94?"c>3>oi6`k5;38?l2e13:1(i854eg8ja3=:21b8o650;&g2?2cm2do97=4;h6a3?6=,m<18ik4ne790>=n<k<1<7*k6;6ga>hc=3?07d:m4;29 a0=<mo0bi;56:9j0g5=83.o:7:ke:lg1?1<3`>i>7>5$e490ac<fm?1465f4c394?"c>3>oi6`k5;;8?l2e83:1(i854eg8ja3=i21b8lh50;&g2?2cm2do97l4;h6ba?6=,m<18ik4ne79g>=n<hn1<7*k6;6ga>hc=3n07d:nc;29 a0=<mo0bi;5e:9j0dd=83.o:7:ke:lg1?`<3`>j57>5$e490ac<fm?1==54i5c;>5<#l?0?hh5ad4825>=n<h=1<7*k6;6ga>hc=3;976g;a783>!b12=nn7cj::018?l2f=3:1(i854eg8ja3=9=10e9o;:18'`3<3ll1eh84>5:9j0d5=83.o:7:ke:lg1?7132c?m?4?:%f5>1bb3gn>6<94;h6b5?6=,m<18ik4ne795==<a=k;6=4+d787``=il<0:565f4b394?"c>3>oi6`k5;3b?>o3k90;6)j9:5ff?kb228h07d:mf;29 a0=<mo0bi;51b98m1db290/h;4;dd9m`0<6l21b8oj50;&g2?2cm2do97?j;:k7ff<72-n=69jj;of6>4`<3`>i97>5$e490ac<fm?1>=54i5cb>5<#l?0?hh5ad4815>=n<0l1<7*k6;6ga>hc=38976g;9d83>!b12=nn7cj::318?l31?3:17o:71;295?6=8rB?4=5+de87<4=hl:0;66sm5783>4<729qC85>4$ef913=h=<0;66sm3`83><?=::91>8htH5:3?_5e28<p=44=5;07>4b=::0:n7?>:0:955<6k3;j6?=524825?432831==4>d;3`>4d=9h0:47s+de8673=#=l0>86*<f;700>"3;3?896*lf;f1?l3003:17b;:1;29?l30j3:17b:7f;29?j30m3:17d:62;29?l3303:1(i8555;8ja3=821b99950;&g2?3312do97?4;h772?6=,m<19974ne796>=n==?1<7*k6;77=>hc=3907d;;4;29 a0===30bi;54:9j115=83.o:7;;9:lg1?3<3`?<;7>5;n70e?6=3f?3;7>5$e491=c<fm?1<65`59494?"c>3?3i6`k5;38?j3?=3:1(i8559g8ja3=:21d95:50;&g2?3?m2do97=4;n7;7?6=,m<195k4ne790>=h=181<7*k6;7;a>hc=3?07b;71;29 a0==1o0bi;56:9l13c=83.o:7;85:lg1?6<3f?=h7>5$e49123<fm?1=65`57a94?"c>3?<96`k5;08?j31j3:1(i855678ja3=;21d9;o50;&g2?30=2do97:4;n75=?6=,m<19:;4ne791>=h=?21<7*k6;741>hc=3<07d;95;29 a0==?<0bi;50:9j132=83.o:7;96:lg1?7<3`?=?7>5$e49130<fm?1>65f57094?"c>3?=:6`k5;18?l3193:1(i855748ja3=<21b9;>50;&g2?31>2do97;4;h7:4?6=3f>2m7>5$e490<e<fm?1<65`48;94?"c>3>2o6`k5;38?j2>03:1(i8548a8ja3=:21d84950;&g2?2>k2do97=4;n6:2?6=,m<184m4ne790>=h<0?1<7*k6;6:g>hc=3?07b:64;29 a0=<0i0bi;56:9l161=831d9>?50;9j101=83.o:7;:8:lg1?6<3`?>:7>5$e4910><fm?1=65f54794?"c>3?>46`k5;08?l32<3:1(i8554:8ja3=;21b98=50;&g2?3202do97:4;h766?6=,m<19864ne791>=n=1:1<75f52:94?=n<091<75f58394?=h=>k1<75`56d94?=h<0:1<75`56f94?=n=>31<75`51694?"c>3?9;6`k5;28?j37;3:1(i855358ja3=921d9=<50;&g2?35?2do97<4;n735?6=,m<19?94ne797>=h=9:1<7*k6;713>hc=3>07b:if;29 a0==;=0bi;55:9l0cb=83.o:7;=7:lg1?0<3f>mo7>5$e49171<fm?1;65`4g`94?"c>3?9;6`k5;:8?j2ai3:1(i855358ja3=121d8k750;&g2?35?2do97o4;n6e<?6=,m<19?94ne79f>=h<o=1<7*k6;713>hc=3i07b:i6;29 a0==;=0bi;5d:9l0c3=83.o:7;=7:lg1?c<3f>m87>5$e49171<fm?1j65`4g094?"c>3?9;6`k5;33?>i3n80;6)j9:404?kb228;07b:i0;29 a0==;=0bi;51398k1ca290/h;4:269m`0<6;21d8hk50;&g2?35?2do97?;;:m7aa<72-n=68<8;of6>43<3f>no7>5$e49171<fm?1=;54o5ga>5<#l?0>>:5ad4823>=h<lk1<7*k6;713>hc=3;376a;e883>!b12<8<7cj::0;8?j37i3:1(i855358ja3=9h10c8>6:18'`3<2:>1eh84>b:9l15>=83.o:7;=7:lg1?7d32e><:4?:%f5>0403gn>6<j4;n732?6=,m<19?94ne795`=<g<:>6=4+d78662=il<0:j65`4gg94?"c>3?9;6`k5;03?>i3n:0;6)j9:404?kb22;;07b:j8;29 a0==;=0bi;52398k1c0290/h;4:269m`0<5;21b99?50;&g2?33:2do97>4;h774?6=,m<199<4ne795>=n=:l1<7*k6;776>hc=3807d;<e;29 a0===80bi;53:9j16b=83.o:7;;2:lg1?2<3`?8o7>5$e49114<fm?1965f4c`94?"c>3>oi6`k5;28?l2ei3:1(i854eg8ja3=921b8o750;&g2?2cm2do97<4;h6a<?6=,m<18ik4ne797>=n<k=1<7*k6;6ga>hc=3>07d:m6;29 a0=<mo0bi;55:9j0g2=83.o:7:ke:lg1?0<3`>i?7>5$e490ac<fm?1;65f4c094?"c>3>oi6`k5;:8?l2e93:1(i854eg8ja3=121b8o>50;&g2?2cm2do97o4;h6bb?6=,m<18ik4ne79f>=n<ho1<7*k6;6ga>hc=3i07d:nd;29 a0=<mo0bi;5d:9j0de=83.o:7:ke:lg1?c<3`>jn7>5$e490ac<fm?1j65f4`;94?"c>3>oi6`k5;33?>o3i10;6)j9:5ff?kb228;07d:n7;29 a0=<mo0bi;51398m1g1290/h;4;dd9m`0<6;21b8l;50;&g2?2cm2do97?;;:k7e1<72-n=69jj;of6>43<3`>j?7>5$e490ac<fm?1=;54i5c1>5<#l?0?hh5ad4823>=n<h;1<7*k6;6ga>hc=3;376g;a183>!b12=nn7cj::0;8?l2d93:1(i854eg8ja3=9h10e9m?:18'`3<3ll1eh84>b:9j0g`=83.o:7:ke:lg1?7d32c?nh4?:%f5>1bb3gn>6<j4;h6a`?6=,m<18ik4ne795`=<a=hh6=4+d787``=il<0:j65f4c794?"c>3>oi6`k5;03?>o3ih0;6)j9:5ff?kb22;;07d:6f;29 a0=<mo0bi;52398m1?b290/h;4;dd9m`0<5;21b84?50;9j10c=83.o:7;:f:lg1?6<3`?>h7>5$e4910`<fm?1=65f54a94?"c>3?>j6`k5;08?l32j3:1(i8554d8ja3=;21b98o50;&g2?32n2do97:4;h76=?6=,m<198h4ne791>=n==l1<7*k6;764>hc=3:07d;;e;29 a0==<:0bi;51:9j11b=83.o:7;:0:lg1?4<3`??o7>5$e49106<fm?1?65f55`94?"c>3?><6`k5;68?l33i3:1(i855428ja3==21d9>l50;9l0<b=831b9;950;9a0=>=83;1<7>t$ef913=O<1=0D96?;n76>5<<uk>357>51;294~"cl3>3=6F;869K0=6<gm91<75rb54g>5<4290;w)jk:5f8L1>03A>3<6F<9:&5e?30k2.>o7<4i2a94?=n<<0;66ak8;29?xd3?10;6>4?:1y'`a<3l2B?4:5G4928L6?<,?k19:m4$4a96>o4k3:17d:::188ka>=831vn98l:180>5<7s-no69j4H5:4?M2?82B856*9a;74g>"2k380e>m50;9j00<722eo47>5;|`733<72<0;6=u+de866>N30>1C85>4H2;8 3g==>i0(8m52:k0g?6=3`9n6=44i5794?=nl>0;66ak8;29?xd3?>0;6>4?:1y'`a<3l2B?4:5G4928L6?<,?k19:m4$4a96>o4k3:17d:::188ka>=831vn98m:186>5<7s-no68<4H5:4?M2?82B856*9a;74g>"2k380e>m50;9j7`<722c?97>5;hf4>5<<gm21<75rb556>5<3290;w)jk:438L1>03A>3<6*:c;08m6e=831b884?::kg3?6=3fn36=44}c640?6=<3:1<v*kd;72?M2??2B?4=5+5b81?l5d2900e9;50;9j`2<722eo47>5;|`736<72=0;6=u+de865>N30>1C85>4$4a96>o4k3:17d:::188ma1=831dh54?::a02c=83>1<7>t$ef914=O<1=0D96?;%7`>7=n;j0;66g;5;29?lb02900ci650;9~f11c290?6=4?{%fg>07<@=2<7E:70:&6g?4<a:i1<75f4483>>oc?3:17bj7:188yg7f;3:187>50z&g`?363A>3;6F;819'1f<03`9h6=44i5794?=nl>0;66ak8;29?xd6?o0;684?:1y'`a<282B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75fd683>>ic03:17pl>8183>0<729q/hi4:0:J7<2=O<1:0(8m52:k0g?6=3`>:6=44i5794?=nl>0;66ak8;29?xd6080;684?:1y'`a<282B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75fd683>>ic03:17pl>8383>0<729q/hi4:0:J7<2=O<1:0(8m52:k0g?6=3`>:6=44i5794?=nl>0;66ak8;29?xd60:0;684?:1y'`a<282B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75fd683>>ic03:17pl>8583>0<729q/hi4:0:J7<2=O<1:0(8m52:k0g?6=3`>:6=44i5794?=nl>0;66ak8;29?xd60<0;684?:1y'`a<282B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75fd683>>ic03:17pl>cg83>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd6l80;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl>d283>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd6l<0;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl>d983>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd6l00;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl>db83>1<729q/hi4:1:J7<2=O<1:0(8m52:k0g?6=3`>>6=44ie594?=hl10;66sm1e`94?2=83:p(ij5509K0=1<@=2;7);l:39j7f<722c?97>5;hf4>5<<gm21<75rb326>5<3290;w)jk:5g8L1>03A>3<6*:c;08m6e=831b8<4?::k71?6=3fn36=44}c032?6=<3:1<v*kd;6f?M2??2B?4=5+5b81?l5d2900e9?50;9j00<722eo47>5;|`142<72=0;6=u+de87a>N30>1C85>4$4a96>o4k3:17d:>:188m13=831dh54?::a65>=83>1<7>t$ef90`=O<1=0D96?;%7`>7=n;j0;66g;1;29?l222900ci650;9~f76>290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg47i3:187>50z&g`?2b3A>3;6F;819'1f<53`9h6=44i5394?=n<<0;66ak8;29?xd58k0;694?:1y'`a<3m2B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75`d983>>{e9j91<7;50;2x ab==;1C8594H5:3?!3d2>1b?n4?::k0a?6=3`>>6=44ie594?=hl10;66sm1b694?3=83:p(ij54g9K0=1<@=2;7);l:39j7f<722c8i7>5;h62>5<<a=?1<75`d983>>{e9j?1<7;50;2x ab=<o1C8594H5:3?!3d2;1b?n4?::k0a?6=3`>:6=44i5794?=hl10;66sm1b:94?3=83:p(ij54g9K0=1<@=2;7);l:39j7f<722c8i7>5;h62>5<<a=?1<75`d983>>{e9j<1<7;50;2x ab=<o1C8594H5:3?!3d2;1b?n4?::k0a?6=3`>:6=44i5794?=hl10;66sm1b594?3=83:p(ij54g9K0=1<@=2;7);l:39j7f<722c8i7>5;h62>5<<a=?1<75`d983>>{e9>81<7=50;2x ab=>:1C8594H5:3?!3d2;l0e8650;9j1<<722eo=7>5;|`22a<72=0;6=u+de85f>N30>1C85>4i5294?=n<?0;66gka;29?jb62900qo?88;297?6=8r.oh7:76:J7<2=O<1:0e9>50;9j1c<722eo=7>5;|`236<72:0;6=u+de857>N30>1C85>4$4a96c=n=10;66g:9;29?jb62900qo?9e;290?6=8r.oh78m;I6;3>N3091b8=4?::k72?6=3`nj6=44oe394?=zj8=26=4<:183!bc2=2=7E:77:J7<5=n<90;66g:f;29?jb62900qo?84;297?6=8r.oh78<;I6;3>N3091/9n4=f:k6<?6=3`?26=44oe394?=zj8<m6=4;:183!bc2?h0D968;I6;4>o383:17d:9:188mag=831dh<4?::a52g=8391<7>t$ef90=0<@=2<7E:70:k74?6=3`?m6=44oe394?=zj8=>6=4<:183!bc2?90D968;I6;4>"2k38m7d;7:188m0?=831dh<4?::a526=83>1<7>t$ef92g=O<1=0D96?;h63>5<<a=<1<75fd`83>>ic93:17pl>7c83>6<729q/hi4;879K0=1<@=2;7d:?:188m0`=831dh<4?::a520=8391<7>t$ef926=O<1=0D96?;%7`>7`<a<21<75f5883>>ic93:17pl>7083>1<729q/hi49b:J7<2=O<1:0e9>50;9j03<722com7>5;nf2>5<<uk;<o7>53;294~"cl3>3:6F;869K0=6<a=:1<75f5g83>>ic93:17pl>7683>6<729q/hi493:J7<2=O<1:0(8m52g9j1=<722c>57>5;nf2>5<<uk;<h7>53;294~"cl3>3:6F;869K0=6<a=:1<75f5g83>>ic93:17pl>f983>6<729q/hi493:J7<2=O<1:0(8m52g9j1=<722c>57>5;nf2>5<<uk;m?7>54;294~"cl3<i7E:77:J7<5=n<90;66g;6;29?lbf2900ci?50;9~f4`b29086=4?{%fg>1>13A>3;6F;819j05<722c>j7>5;nf2>5<<uk;m57>53;294~"cl3<87E:77:J7<5=#=j09j6g:8;29?l3>2900ci?50;9~f4`3290?6=4?{%fg>3d<@=2<7E:70:k74?6=3`>=6=44iec94?=hl80;66sm1gd94?5=83:p(ij54948L1>03A>3<6g;0;29?l3a2900ci?50;9~f4`f29086=4?{%fg>35<@=2<7E:70:&6g?4a3`?36=44i4;94?=hl80;66sm1g794?2=83:p(ij56c9K0=1<@=2;7d:?:188m10=831bhl4?::mg5?6=3th9<=4?:283>5}#lm0?4;5G4958L1>73`>;6=44i4d94?=hl80;66sm1g`94?5=83:p(ij5629K0=1<@=2;7);l:3d8m0>=831b944?::mg5?6=3th:j;4?:583>5}#lm0=n6F;869K0=6<a=:1<75f4783>>oci3:17bj>:188yg4793:1?7>50z&g`?2?>2B?4:5G4928m16=831b9k4?::mg5?6=3th:jn4?:283>5}#lm0=?6F;869K0=6<,<i1>k5f5983>>o213:17bj>:188yg7a?3:187>50z&g`?0e3A>3;6F;819j05<722c?:7>5;hfb>5<<gm;1<75rb321>5<4290;w)jk:5:5?M2??2B?4=5f4183>>o2n3:17bj>:188yg7al3:1?7>50z&g`?043A>3;6F;819'1f<5n2c>47>5;h7:>5<<gm;1<75rb320>5<4290;w)jk:5:5?M2??2B?4=5f4183>>o2n3:17bj>:188yg`4290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg`5290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg`6290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg`7290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188ygca290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188ygcb290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg74:3:187>50z&g`?2b3A>3;6F;819'1f<53`9h6=44i5394?=n<<0;66ak8;29?xd6;80;694?:1y'`a<3m2B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75`d983>>{e9::1<7:50;2x ab=<l1C8594H5:3?!3d2;1b?n4?::k75?6=3`>>6=44oe:94?=zj88m6=4;:183!bc2=o0D968;I6;4>"2k380e>m50;9j04<722c?97>5;nf;>5<<uk;9i7>54;294~"cl3>n7E:77:J7<5=#=j097d=l:188m17=831b884?::mg<?6=3th:>i4?:583>5}#lm0?i6F;869K0=6<,<i1>6g<c;29?l262900e9;50;9l`=<722wi=;>50;694?6|,mn18h5G4958L1>73-?h6?5f3b83>>o393:17d:::188ka>=831vn<;i:187>5<7s-no69k4H5:4?M2?82.>o7<4i2a94?=n<80;66g;5;29?jb?2900qo?:e;290?6=8r.oh7:j;I6;3>N3091/9n4=;h1`>5<<a=;1<75f4483>>ic03:17pl>5e83>1<729q/hi4;e:J7<2=O<1:0(8m52:k0g?6=3`>:6=44i5794?=hl10;66sm14a94?2=83:p(ij54d9K0=1<@=2;7);l:39j7f<722c?=7>5;h66>5<<gm21<75rb07a>5<3290;w)jk:5g8L1>03A>3<6*:c;08m6e=831b8<4?::k71?6=3fn36=44}c315?6=<3:1<v*kd;6f?M2??2B?4=5+5b81?l5d2900e9?50;9j00<722eo47>5;|`265<72=0;6=u+de87a>N30>1C85>4$4a96>o4k3:17d:>:188m13=831dh54?::a54`=83>1<7>t$ef90`=O<1=0D96?;%7`>7=n;j0;66g;1;29?l222900ci650;9~f47b290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg76l3:187>50z&g`?2b3A>3;6F;819'1f<53`9h6=44i5394?=n<<0;66ak8;29?xd69j0;694?:1y'`a<3m2B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75`d983>>{e9<>1<7:50;2x ab=<l1C8594H5:3?M5>3-<j689l;%7`>7=n;j0;66g;1;29?l222900ci650;9~f434290?6=4?{%fg>1c<@=2<7E:70:J0=>"1i3?<o6*:c;08m6e=831b8<4?::k71?6=3fn36=44}c366?6=<3:1<v*kd;6f?M2??2B?4=5G389'2d<2?j1/9n4=;h1`>5<<a=;1<75f4483>>ic03:17pl>5083>1<729q/hi4;e:J7<2=O<1:0D>74$7c912e<,<i1>6g<c;29?l262900e9;50;9l`=<722wi=8>50;694?6|,mn18h5G4958L1>73A927)8n:45`?!3d2;1b?n4?::k75?6=3`>>6=44oe:94?=zj8>m6=4;:183!bc2=o0D968;I6;4>N412.=m7;8c:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg76=3:187>50z&g`?2b3A>3;6F;819K7<=#>h0>;n5+5b81?l5d2900e9?50;9j00<722eo47>5;|`251<72=0;6=u+de87a>N30>1C85>4H2;8 3g==>i0(8m52:k0g?6=3`>:6=44i5794?=hl10;66sm10194?2=83:p(ij54d9K0=1<@=2;7E=6;%4b>01d3-?h6?5f3b83>>o393:17d:::188ka>=831vn<?=:187>5<7s-no69k4H5:4?M2?82B856*9a;74g>"2k380e>m50;9j04<722c?97>5;nf;>5<<uk;:=7>54;294~"cl3>n7E:77:J7<5=O;01/:l4:7b9'1f<53`9h6=44i5394?=n<<0;66ak8;29?xd6990;694?:1y'`a<3m2B?4:5G4928L6?<,?k19:m4$4a96>o4k3:17d:>:188m13=831dh54?::a55?=83>1<7>t$ef90`=O<1=0D96?;%7`>7=n;j0;66g;1;29?l222900ci650;9~f46?290?6=4?{%fg>1c<@=2<7E:70:&6g?4<a:i1<75f4083>>o3=3:17bj7:188yg77?3:187>50z&g`?2b3A>3;6F;819'1f<53`9h6=44i5394?=n<<0;66ak8;29?xd68?0;694?:1y'`a<3m2B?4:5G4928 0e=:2c8o7>5;h62>5<<a=?1<75`d983>>{e99?1<7:50;2x ab=<l1C8594H5:3?!3d2;1b?n4?::k75?6=3`>>6=44oe:94?=zj8:?6=4;:183!bc2=o0D968;I6;4>"2k380e>m50;9j04<722c?97>5;nf;>5<<uk;?47>54;294~"cl3>n7E:77:J7<5=#=j097d=l:188m17=831b884?::mg<?6=3th:8:4?:583>5}#lm0?i6F;869K0=6<,<i1>6g<c;29?l262900e9;50;9l`=<722wi=9850;694?6|,mn18h5G4958L1>73-?h6?5f3b83>>o393:17d:::188ka>=831vn<:::187>5<7s-no69k4H5:4?M2?82.>o7<4i2a94?=n<80;66g;5;29?jb?2900qo?;4;290?6=8r.oh7:j;I6;3>N3091/9n4=;h1`>5<<a=;1<75f4483>>ic03:17pl>4283>1<729q/hi4;e:J7<2=O<1:0(8m52:k0g?6=3`>:6=44i5794?=hl10;66sm18`94?2=83:p(ij54d9K0=1<@=2;7);l:39j7f<722c?=7>5;h66>5<<gm21<75rb0;;>5<3290;w)jk:5g8L1>03A>3<6*:c;08m6e=831b8<4?::k71?6=3fn36=44}c3b6?6=<3:1<v*kd;6f?M2??2B?4=5+5b81?l5d2900e9?50;9j00<722eo47>5;|`2=c<72=0;6=u+de865>N30>1C85>4$4a93>o4k3:17d:::188ma1=831dh54?::a5<c=83>1<7>t$ef914=O<1=0D96?;%7`>2=n;j0;66g;5;29?lb02900ci650;9~f74e290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?<n:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f74d290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?<7:186>5<7s-no68<4H5:4?M2?82.>o794i2a94?=n;l0;66g;5;29?lb02900ci650;9~f740290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?<6:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f752290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?=<:186>5<7s-no68<4H5:4?M2?82.>o794i2a94?=n;l0;66g;5;29?lb02900ci650;9~f753290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?=7:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f751290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?=8:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f72?290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?:8:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f722290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?:<:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f726290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn?=i:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6b2290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>j9:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6c6290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>kl:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6`4290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>h;:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6`2290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>h9:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6`0290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>h7:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6b0290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>j7:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6b>290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>jn:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6be290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>jl:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6bc290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>jj:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6ba290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>k?:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6c5290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>k<:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6c3290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>k::186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6c1290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>k8:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6c?290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>k6:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6cf290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>km:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6cc290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>kj:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6ca290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>h?:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f6`6290>6=4?{%fg>1`<@=2<7E:70:&6g?4<a:i1<75f3d83>>o393:17d:::188ka>=831vn>h=:186>5<7s-no69h4H5:4?M2?82.>o7<4i2a94?=n;l0;66g;1;29?l222900ci650;9~f7g2290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb34g>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?m9:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;h;6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7de290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3g4>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?j>:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;nh6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f71>290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3d1>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?8j:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;3j6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7>3290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3:e>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?o=:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;k;6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7g6290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3c5>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?o<:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;k?6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7g0290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3c;>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?om:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;k26=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7gf290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3cf>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?ol:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;ko6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7d5290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3ce>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?l>:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;h>6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7d4290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3`7>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?l7:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;h=6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7d0290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3``>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?l6:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;hj6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7da290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3`g>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?lj:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;i;6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7e6290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3a7>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?m=:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;i86=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7e?290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3a6>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?m8:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;ii6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7e>290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3ab>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?mj:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;ih6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7ec290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3f1>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?mi:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;n;6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7b2290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3f0>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?j;:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;n36=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7b1290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3f4>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?j6:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;nj6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7bb290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3fa>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?jk:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;o:6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7ba290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3g3>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?k;:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;o96=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7c4290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3g6>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?k9:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;oj6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7c?290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3g:>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?kk:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;oi6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7cd290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3d3>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?kj:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;om6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7`6290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3d0>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?h9:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;l?6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7`2290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3d:>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?h8:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;l36=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7`d290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3db>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?hm:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;=:6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f70a290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb353>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?9;:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;=96=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f714290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb354>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?9::18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;==6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f71e290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb35;>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?9n:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;=h6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f71c290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3:3>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?9j:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;=m6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7>4290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3:2>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?6=:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;2<6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7>2290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3:5>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?67:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;226=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7>d290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3:b>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?6m:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;3;6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7>c290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3:f>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?7<:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;3:6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7?5290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3;7>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?7::18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;336=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7?1290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3;4>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?7l:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;326=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f7?e290o6=4?{%fg>a?<@=2<7E:70:k01?6=3`9=6=44i2594?=n;10;66g;5;29?l2?2900e9750;9j0d<722c?n7>5;h6;7?6=3`>387>5;nf`>5<<g==1<75rb3;e>5<c290;w)jk:e;8L1>03A>3<6g<5;29?l512900e>950;9j7=<722c?97>5;h6;>5<<a=31<75f4`83>>o3j3:17d:73;29?l2?<3:17bjl:188k11=831vn?7k:18g>5<7s-no6i74H5:4?M2?82c897>5;h15>5<<a:=1<75f3983>>o3=3:17d:7:188m1?=831b8l4?::k7f?6=3`>3?7>5;h6;0?6=3fnh6=44o5594?=zj;3n6=4k:183!bc2m30D968;I6;4>o4=3:17d=9:188m61=831b?54?::k71?6=3`>36=44i5;94?=n<h0;66g;b;29?l2?;3:17d:74;29?jbd2900c9950;9~f170290?6=4?{%fg>3e<@=2<7E:70:k6<?6=3`?26=44iec94?=hl80;66sm40;94?2=83:p(ij5649K0=1<@=2;7);l:5a8m0>=831b944?::k6e?6=3fn:6=44}c62<?6=<3:1<v*kd;46?M2??2B?4=5+5b87g>o203:17d;6:188m0g=831dh<4?::a034=83>1<7>t$ef92f=O<1=0D96?;h7;>5<<a<31<75fd`83>>ic93:17pl;6583>1<729q/hi495:J7<2=O<1:0(8m54b9j1=<722c>57>5;h7b>5<<gm;1<75rb540>5<3290;w)jk:778L1>03A>3<6*:c;6`?l3?2900e8750;9j1d<722eo=7>5;|`77=<72=0;6=u+de85g>N30>1C85>4i4:94?=n=00;66gka;29?jb62900qo:<a;290?6=8r.oh78:;I6;3>N3091/9n4;c:k6<?6=3`?26=44i4c94?=hl80;66sm42;94?2=83:p(ij5649K0=1<@=2;7);l:5a8m0>=831b944?::k6e?6=3fn:6=44}c67`?6=<3:1<v*kd;4`?M2??2B?4=5f5983>>o213:17djn:188ka7=831vn9:i:187>5<7s-no6;;4H5:4?M2?82.>o7:l;h7;>5<<a<31<75f5`83>>ic93:17pl;4d83>1<729q/hi495:J7<2=O<1:0(8m54b9j1=<722c>57>5;h7b>5<<gm;1<75rb575>5<3290;w)jk:7a8L1>03A>3<6g:8;29?l3>2900eio50;9l`4<722wi88650;694?6|,mn1:85G4958L1>73-?h69m4i4:94?=n=00;66g:a;29?jb62900qo::7;290?6=8r.oh78:;I6;3>N3091/9n4;c:k6<?6=3`?26=44i4c94?=hl80;66sm44294?2=83:p(ij56b9K0=1<@=2;7d;7:188m0?=831bhl4?::mg5?6=3th?9?4?:583>5}#lm0=96F;869K0=6<,<i18n5f5983>>o213:17d;n:188ka7=831vn9;>:187>5<7s-no6;;4H5:4?M2?82.>o7:l;h7;>5<<a<31<75f5`83>>ic93:17pl;5283>1<729q/hi49c:J7<2=O<1:0e8650;9j1<<722com7>5;nf2>5<<uk>>97>54;294~"cl3<>7E:77:J7<5=#=j0?o6g:8;29?l3>2900e8o50;9l`4<722wi88:50;694?6|,mn1:85G4958L1>73-?h69m4i4:94?=n=00;66g:a;29?jb62900qo::9;290?6=8r.oh78l;I6;3>N3091b954?::k6=?6=3`nj6=44oe394?=zj=?i6=4;:183!bc2??0D968;I6;4>"2k3>h7d;7:188m0?=831b9l4?::mg5?6=3th?9l4?:583>5}#lm0=96F;869K0=6<,<i18n5f5983>>o213:17d;n:188ka7=831vn9;l:187>5<7s-no6;m4H5:4?M2?82c>47>5;h7:>5<<amk1<75`d083>>{e<<o1<7:50;2x ab=><1C8594H5:3?!3d2=i0e8650;9j1<<722c>m7>5;nf2>5<<uk>>h7>54;294~"cl3<>7E:77:J7<5=#=j0?o6g:8;29?l3>2900e8o50;9l`4<722wi?km50;694?6|,mn1:n5G4958L1>73`?36=44i4;94?=nlh0;66ak1;29?xd4nl0;694?:1y'`a<1=2B?4:5G4928 0e=<j1b954?::k6=?6=3`?j6=44oe394?=zj:lo6=4;:183!bc2??0D968;I6;4>"2k3>h7d;7:188m0?=831b9l4?::mg5?6=3th?9k4?:583>5}#lm0=o6F;869K0=6<a<21<75f5883>>oci3:17bj>:188yg2193:187>50z&g`?023A>3;6F;819'1f<3k2c>47>5;h7:>5<<a<k1<75`d083>>{e<?:1<7:50;2x ab=><1C8594H5:3?!3d2=i0e8650;9j1<<722c>m7>5;nf2>5<<uk9m57>54;294~"cl3<h7E:77:J7<5=n=10;66g:9;29?lbf2900ci?50;9~f6`e290?6=4?{%fg>33<@=2<7E:70:&6g?2d3`?36=44i4;94?=n=h0;66ak1;29?xd4nh0;694?:1y'`a<1=2B?4:5G4928 0e=<j1b954?::k6=?6=3`?j6=44oe394?=zj:lm6=4;:183!bc2?i0D968;I6;4>o203:17d;6:188mag=831dh<4?::a057=83>1<7>t$ef920=O<1=0D96?;%7`>1e<a<21<75f5883>>o2i3:17bj>:188yg2783:187>50z&g`?023A>3;6F;819'1f<3k2c>47>5;h7:>5<<a<k1<75`d083>>{e<981<7:50;2x ab=>j1C8594H5:3?l3?2900e8750;9j`d<722eo=7>5;|`741<72=0;6=u+de851>N30>1C85>4$4a90f=n=10;66g:9;29?l3f2900ci?50;9~f164290?6=4?{%fg>33<@=2<7E:70:&6g?2d3`?36=44i4;94?=n=h0;66ak1;29?xd38<0;694?:1y'`a<1k2B?4:5G4928m0>=831b944?::kge?6=3fn:6=44}c633?6=<3:1<v*kd;46?M2??2B?4=5+5b87g>o203:17d;6:188m0g=831dh<4?::a050=83>1<7>t$ef920=O<1=0D96?;%7`>1e<a<21<75f5883>>o2i3:17bj>:188yg2703:187>50z&g`?0d3A>3;6F;819j1=<722c>57>5;hfb>5<<gm;1<75rb52b>5<3290;w)jk:778L1>03A>3<6*:c;6`?l3?2900e8750;9j1d<722eo=7>5;|`74<<72=0;6=u+de851>N30>1C85>4$4a90f=n=10;66g:9;29?l3f2900ci?50;9~f16e290?6=4?{%fg>3e<@=2<7E:70:k6<?6=3`?26=44iec94?=hl80;66sm41f94?2=83:p(ij5649K0=1<@=2;7);l:5a8m0>=831b944?::k6e?6=3fn:6=44}c63g?6=<3:1<v*kd;46?M2??2B?4=5+5b87g>o203:17d;6:188m0g=831dh<4?::a05c=83>1<7>t$ef92f=O<1=0D96?;h7;>5<<a<31<75fd`83>>ic93:17pl;1183>1<729q/hi495:J7<2=O<1:0(8m54b9j1=<722c>57>5;h7b>5<<gm;1<75rb52e>5<3290;w)jk:778L1>03A>3<6*:c;6`?l3?2900e8750;9j1d<722eo=7>5;|`75d<72=0;6=u+de85g>N30>1C85>4i4:94?=n=00;66gka;29?jb62900qo:>c;290?6=8r.oh78:;I6;3>N3091/9n4;c:k6<?6=3`?26=44i4c94?=hl80;66sm40`94?2=83:p(ij5649K0=1<@=2;7);l:5a8m0>=831b944?::k6e?6=3fn:6=44}c625?6=<3:1<v*kd;4`?M2??2B?4=5f5983>>o213:17djn:188ka7=831vn9?<:187>5<7s-no6;;4H5:4?M2?82.>o7:l;h7;>5<<a<31<75f5`83>>ic93:17pl;1383>1<729q/hi495:J7<2=O<1:0(8m54b9j1=<722c>57>5;h7b>5<<gm;1<75rb537>5<3290;w)jk:7a8L1>03A>3<6g:8;29?l3>2900eio50;9l`4<722wi8<850;694?6|,mn1:85G4958L1>73-?h69m4i4:94?=n=00;66g:a;29?jb62900qo:>5;290?6=8r.oh78:;I6;3>N3091/9n4;c:k6<?6=3`?26=44i4c94?=hl80;66sm40f94?2=83:p(ij56b9K0=1<@=2;7d;7:188m0?=831bhl4?::mg5?6=3th?=k4?:583>5}#lm0=96F;869K0=6<,<i18n5f5983>>o213:17d;n:188ka7=831vn9?j:187>5<7s-no6;;4H5:4?M2?82.>o7:l;h7;>5<<a<31<75f5`83>>ic93:17pl;2183>1<729q/hi49c:J7<2=O<1:0e8650;9j1<<722com7>5;nf2>5<<uk>9>7>54;294~"cl3<>7E:77:J7<5=#=j0?o6g:8;29?l3>2900e8o50;9l`4<722wi8??50;694?6|,mn1:85G4958L1>73-?h69m4i4:94?=n=00;66g:a;29?jb62900qo:=3;290?6=8r.oh78l;I6;3>N3091b954?::k6=?6=3`nj6=44oe394?=zj=8>6=4;:183!bc2??0D968;I6;4>"2k3>h7d;7:188m0?=831b9l4?::mg5?6=3th?>94?:583>5}#lm0=96F;869K0=6<,<i18n5f5983>>o213:17d;n:188ka7=831vn9<9:187>5<7s-no6;m4H5:4?M2?82c>47>5;h7:>5<<amk1<75`d083>>{e<;21<7:50;2x ab=><1C8594H5:3?!3d2=i0e8650;9j1<<722c>m7>5;nf2>5<<uk>9;7>54;294~"cl3<>7E:77:J7<5=#=j0?o6g:8;29?l3>2900e8o50;9l`4<722wi8?750;694?6|,mn1:n5G4958L1>73`?36=44i4;94?=nlh0;66ak1;29?xd3:k0;694?:1y'`a<1=2B?4:5G4928 0e=<j1b954?::k6=?6=3`?j6=44oe394?=zj=8j6=4;:183!bc2??0D968;I6;4>"2k3>h7d;7:188m0?=831b9l4?::mg5?6=3th?>n4?:583>5}#lm0=o6F;869K0=6<a<21<75f5883>>oci3:17bj>:188yg25m3:187>50z&g`?023A>3;6F;819'1f<3k2c>47>5;h7:>5<<a<k1<75`d083>>{e<;n1<7:50;2x ab=><1C8594H5:3?!3d2=i0e8650;9j1<<722c>m7>5;nf2>5<<uk>897>54;294~"cl3<h7E:77:J7<5=n=10;66g:9;29?lbf2900ci?50;9~f150290?6=4?{%fg>33<@=2<7E:70:&6g?2d3`?36=44i4;94?=n=h0;66ak1;29?xd3;?0;694?:1y'`a<1=2B?4:5G4928 0e=<j1b954?::k6=?6=3`?j6=44oe394?=zj=8m6=4;:183!bc2?i0D968;I6;4>o203:17d;6:188mag=831dh<4?::a067=83>1<7>t$ef920=O<1=0D96?;%7`>1e<a<21<75f5883>>o2i3:17bj>:188yg2483:187>50z&g`?023A>3;6F;819'1f<3k2c>47>5;h7:>5<<a<k1<75`d083>>{e<:81<7:50;2x ab=>j1C8594H5:3?l3?2900e8750;9j`d<722eo=7>5;|`771<72=0;6=u+de851>N30>1C85>4$4a90f=n=10;66g:9;29?l3f2900ci?50;9~f154290?6=4?{%fg>33<@=2<7E:70:&6g?2d3`?36=44i4;94?=n=h0;66ak1;29?xd3;k0;694?:1y'`a<1k2B?4:5G4928m0>=831b944?::kge?6=3fn:6=44}c60`?6=<3:1<v*kd;46?M2??2B?4=5+5b87g>o203:17d;6:188m0g=831dh<4?::a06e=83>1<7>t$ef920=O<1=0D96?;%7`>1e<a<21<75f5883>>o2i3:17bj>:188yg24m3:187>50z&g`?0d3A>3;6F;819j1=<722c>57>5;hfb>5<<gm;1<75rb563>5<3290;w)jk:778L1>03A>3<6*:c;6`?l3?2900e8750;9j1d<722eo=7>5;|`77c<72=0;6=u+de851>N30>1C85>4$4a90f=n=10;66g:9;29?l3f2900ci?50;9~f126290?6=4?{%fg>3e<@=2<7E:70:k6<?6=3`?26=44iec94?=hl80;66sm45194?2=83:p(ij5649K0=1<@=2;7);l:5a8m0>=831b944?::k6e?6=3fn:6=44}c676?6=<3:1<v*kd;46?M2??2B?4=5+5b87g>o203:17d;6:188m0g=831dh<4?::a012=83>1<7>t$ef92f=O<1=0D96?;h7;>5<<a<31<75fd`83>>ic93:17pl;4783>1<729q/hi495:J7<2=O<1:0(8m54b9j1=<722c>57>5;h7b>5<<gm;1<75rb566>5<3290;w)jk:778L1>03A>3<6*:c;6`?l3?2900e8750;9j1d<722eo=7>5;|`702<72=0;6=u+de85g>N30>1C85>4i4:94?=n=00;66gka;29?jb62900qo:;9;290?6=8r.oh78:;I6;3>N3091/9n4;c:k6<?6=3`?26=44i4c94?=hl80;66sm45:94?2=83:p(ij5649K0=1<@=2;7);l:5a8m0>=831b944?::k6e?6=3fn:6=44}c67e?6=<3:1<v*kd;4`?M2??2B?4=5f5983>>o213:17djn:188ka7=831vn9:l:187>5<7s-no6;;4H5:4?M2?82.>o7:l;h7;>5<<a<31<75f5`83>>ic93:17pl;4c83>1<729q/hi495:J7<2=O<1:0(8m54b9j1=<722c>57>5;h7b>5<<gm;1<75rb345>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;<>6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb347>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;<86=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb341>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;<:6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb37e>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?n6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb37g>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?h6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb37a>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?j6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb37:>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?36=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb374>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?=6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb377>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?86=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb371>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?:6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb373>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;>m6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb36f>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;>o6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb36`>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;>i6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb34`>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;<i6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb34b>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;<26=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb34;>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;<<6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb343>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;?>6=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb36b>5<2290;w)jk:5d8L1>03A>3<6*:c;08m6e=831b?h4?::k75?6=3`>>6=44oe:94?=zj;>26=4::183!bc2=l0D968;I6;4>"2k380e>m50;9j7`<722c?=7>5;h66>5<<gm21<75rb55b>5<4290;w)jk:718L1>03A>3<6*:c;30?l3?2900e8750;9l`4<722wi8;h50;194?6|,mn1:>5G4958L1>73-?h6<=4i4:94?=n=00;66ak1;29?xd6;=0;6>4?:1y'`a<1;2B?4:5G4928 0e=9=1b954?::k6=?6=3fn:6=44}cd6>5<4290;w)jk:718L1>03A>3<6*:c;37?l3?2900e8750;9l`4<722wi><o50;194?6|,mn1:>5G4958L1>73-?h6<:4i4:94?=n=00;66ak1;29?xd6jh0;6>4?:1y'`a<1;2B?4:5G4928 0e=9=1b954?::k6=?6=3fn:6=44}cg4>5<4290;w)jk:718L1>03A>3<6*:c;37?l3?2900e8750;9l`4<722wii;4?:283>5}#lm0=?6F;869K0=6<,<i1=95f5983>>o213:17bj>:188ygc229086=4?{%fg>35<@=2<7E:70:&6g?733`?36=44i4;94?=hl80;66sme583>6<729q/hi493:J7<2=O<1:0(8m5159j1=<722c>57>5;nf2>5<<uko86=4<:183!bc2?90D968;I6;4>"2k3;?7d;7:188m0?=831dh<4?::aa7<72:0;6=u+de857>N30>1C85>4$4a951=n=10;66g:9;29?jb62900qok>:180>5<7s-no6;=4H5:4?M2?82.>o7?;;h7;>5<<a<31<75`d083>>{em90;6>4?:1y'`a<1;2B?4:5G4928 0e=9=1b954?::k6=?6=3fn:6=44}cfe>5<4290;w)jk:718L1>03A>3<6*:c;37?l3?2900e8750;9l`4<722wihh4?:283>5}#lm0=?6F;869K0=6<,<i1=95f5983>>o213:17bj>:188yg74>3:187>50z&g`?023A>3;6F;819'1f<4:2c>47>5;h7:>5<<a<k1<75`d083>>{en>0;694?:1y'`a<1=2B?4:5G4928 0e=;;1b954?::k6=?6=3`?j6=44oe394?=zj83j6=4;:183!bc2??0D968;I6;4>"2k38;7d;7:188m0?=831b9l4?::mg5?6=3th9=o4?:583>5}#lm0=96F;869K0=6<,<i1=h5f5983>>o213:17d;n:188ka7=831vn<lm:187>5<7s-no6;;4H5:4?M2?82.>o7?j;h7;>5<<a<31<75f5`83>>ic93:17pl>3983>0<729q/hi498:J7<2=O<1:0(8m5179j1=<722c>57>5;h7b>5<<a<h1<75`d083>>{en00;684?:1y'`a<102B?4:5G4928 0e=9?1b954?::k6=?6=3`?j6=44i4`94?=hl80;66sm1`394?3=83:p(ij5699K0=1<@=2;7);l:2f8m0>=831b944?::k6e?6=3`?i6=44oe394?=zj8hh6=4::183!bc2?20D968;I6;4>"2k3;m7d;7:188m0?=831b9l4?::k6f?6=3fn:6=44}c3:`?6==3:1<v*kd;4;?M2??2B?4=5+5b823>o203:17d;6:188m0g=831b9o4?::mg5?6=3th:5;4?:583>5}#lm0=96F;869K0=6<,<i1=85f5983>>o213:17d;n:188ka7=831vn<l=:180>5<7s-no6;=4H5:4?M2?82.>o7<i;h7;>5<<a<31<75`d083>>{e9:k1<7=50;2x ab=>:1C8594H5:3?!3d28>0e8650;9j1<<722eo=7>5;|`ef?6=;3:1<v*kd;40?M2??2B?4=5+5b820>o203:17d;6:188ka7=831vn<=l:187>5<7s-no6;;4H5:4?M2?82.>o7==;h7;>5<<a<31<75f5`83>>ic93:17plid;290?6=8r.oh78:;I6;3>N3091/9n4<2:k6<?6=3`?26=44i4c94?=hl80;66sm1c794?2=83:p(ij5649K0=1<@=2;7);l:218m0>=831b944?::k6e?6=3fn:6=44}c02a?6=<3:1<v*kd;46?M2??2B?4=5+5b807>o203:17d;6:188m0g=831dh<4?::a64`=83?1<7>t$ef92==O<1=0D96?;%7`>62<a<21<75f5883>>o2i3:17d;m:188ka7=831vn<68:186>5<7s-no6;64H5:4?M2?82.>o7k4i4:94?=n=00;66g:a;29?l3e2900ci?50;9~f77529086=4?{%fg>35<@=2<7E:70:&6g?743`?36=44i4;94?=hl80;66sm18794?3=83:p(ij5699K0=1<@=2;7);l:g9j1=<722c>57>5;h7b>5<<a<h1<75`d083>>{e9l>1<7;50;2x ab=>11C8594H5:3?!3d2:;0e8650;9j1<<722c>m7>5;h7a>5<<gm;1<75rb0g6>5<2290;w)jk:7:8L1>03A>3<6*:c;12?l3?2900e8750;9j1d<722c>n7>5;nf2>5<<uk;n:7>55;294~"cl3<37E:77:J7<5=#=j08=6g:8;29?l3>2900e8o50;9j1g<722eo=7>5;|`2a5<72<0;6=u+de85<>N30>1C85>4$4a974=n=10;66g:9;29?l3f2900e8l50;9l`4<722wi=h?50;794?6|,mn1:55G4958L1>73-?h6>?4i4:94?=n=00;66g:a;29?l3e2900ci?50;9~f4ge290>6=4?{%fg>3><@=2<7E:70:&6g?4c3`?36=44i4;94?=n=h0;66g:b;29?jb62900qo?nc;291?6=8r.oh787;I6;3>N3091/9n4=e:k6<?6=3`?26=44i4c94?=n=k0;66ak1;29?xd6im0;684?:1y'`a<102B?4:5G4928 0e=;81b954?::k6=?6=3`?j6=44i4`94?=hl80;66sm1`794?5=83:p(ij5629K0=1<@=2;7);l:3d8m0>=831b944?::mg5?6=3th:m:4?:483>5}#lm0=46F;869K0=6<,<i1?<5f5983>>o213:17d;n:188m0d=831dh<4?::a5d>=83?1<7>t$ef92==O<1=0D96?;%7`>67<a<21<75f5883>>o2i3:17d;m:188ka7=831vn<66:180>5<7s-no6;=4H5:4?M2?82.>o774i4:94?=n=00;66ak1;29?xd6n90;6>4?:1y'`a<1;2B?4:5G4928 0e=9=1b954?::k6=?6=3fn:6=44}c3;g?6=<3:1<v*kd;46?M2??2B?4=5+5b8a?l3?2900e8750;9j1d<722eo=7>5;|`2b4<72=0;6=u+de851>N30>1C85>4$4a964=n=10;66g:9;29?l3f2900ci?50;9~f4>b290>6=4?{%fg>3><@=2<7E:70:&6g?b<a<21<75f5883>>o2i3:17d;m:188ka7=831vn<h=:186>5<7s-no6;64H5:4?M2?82.>o7<7;h7;>5<<a<31<75f5`83>>o2j3:17bj>:188yg7>83:1?7>50z&g`?043A>3;6F;819'1f<5i2c>47>5;h7:>5<<gm;1<75rb0:e>5<2290;w)jk:7:8L1>03A>3<6*:c;a8m0>=831b944?::k6e?6=3`?i6=44oe394?=zj8on6=4<:183!bc2?90D968;I6;4>"2k38j7d;7:188m0?=831dh<4?::a647=83?1<7>t$ef92==O<1=0D96?;%7`>74<a<21<75f5883>>o2i3:17d;m:188ka7=831vn<kk:186>5<7s-no6;64H5:4?M2?82.>o7<l;h7;>5<<a<31<75f5`83>>o2j3:17bj>:188yg71j3:187>50z&g`?023A>3;6F;819'1f<5j2c>47>5;h7:>5<<a<k1<75`d083>>{e90>1<7;50;2x ab=>11C8594H5:3?!3d2;i0e8650;9j1<<722c>m7>5;h7a>5<<gm;1<75rb04`>5<3290;w)jk:778L1>03A>3<6*:c;0a?l3?2900e8750;9j1d<722eo=7>5;|`2=7<72<0;6=u+de85<>N30>1C85>4$4a9g>o203:17d;6:188m0g=831b9o4?::mg5?6=3th?:84?:483>5}#lm0=46F;869K0=6<,<i1:6g:8;29?l3>2900e8o50;9j1g<722eo=7>5;|`723<72<0;6=u+de85<>N30>1C85>4$4a90>o203:17d;6:188m0g=831b9o4?::mg5?6=3th?::4?:483>5}#lm0=46F;869K0=6<,<i186g:8;29?l3>2900e8o50;9j1g<722eo=7>5;|`72=<72<0;6=u+de85<>N30>1C85>4$4a9e>o203:17d;6:188m0g=831b9o4?::mg5?6=3th:m;4?:483>5}#lm0=46F;869K0=6<,<i1?=5f5983>>o213:17d;n:188m0d=831dh<4?::a5`4=83?1<7>t$ef92==O<1=0D96?;%7`>05<a<21<75f5883>>o2i3:17d;m:188ka7=831vn<o6:186>5<7s-no6;64H5:4?M2?82.>o7;<;h7;>5<<a<31<75f5`83>>o2j3:17bj>:188yg46l3:197>50z&g`?0?3A>3;6F;819'1f<6n2c>47>5;h7:>5<<a<k1<75f5c83>>ic93:17pl>dd83>0<729q/hi498:J7<2=O<1:0(8m53:k6<?6=3`?26=44i4c94?=n=k0;66ak1;29?xd5<;0;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl=4183>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd5<=0;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl=4783>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd6l;0;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl>d583>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd6l90;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl>d783>0<729q/hi4;f:J7<2=O<1:0(8m52:k0g?6=3`9n6=44i5394?=n<<0;66ak8;29?xd6l>0;684?:1y'`a<3n2B?4:5G4928 0e=:2c8o7>5;h1f>5<<a=;1<75f4483>>ic03:17pl=1883>7<729q/hi4:d:J7<2=O<1:0e8950;9l`4<722wi=o750;094?6|,mn19i5G4958L1>73`?<6=44oe394?=zj8om6=4=:183!bc2<n0D968;I6;4>o2?3:17bj>:188yg46k3:197>50z&g`?013A>3;6F;819'1f<5?2c>47>5;h7:>5<<a<k1<75`6183>>ic93:17pl>b083>3<729q/hi499:J7<2=O<1:0(8m5289j1=<722c>57>5;h7b>5<<a<h1<75`6183>>ic93:17pl>9683>6<729q/hi494:J7<2=O<1:0(8m5159j1=<722c>57>5;n43>5<<uk;3m7>56;294~"cl3<27E:77:J7<5=#=j0>7d;7:188m0?=831b9l4?::k6f?6=3f<;6=44oe394?=zj8o86=4;:183!bc2?=0D968;I6;4>"2k38i7d;7:188m0?=831b9l4?::m54?6=3th:ml4?:583>5}#lm0=;6F;869K0=6<,<i1>o5f5983>>o213:17d;n:188k36=831vn<ji:187>5<7s-no6;94H5:4?M2?82.>o7<9;h7;>5<<a<31<75f5`83>>i183:17p}:7683>3}Y=>=01<7n:4c894g62<h01<7k:4`894?12<k01<7::4:8yv2>j3:1>=uQ48f8Z1?73W?<j6P:7e9]0=`<V<=j7S;<a:\63`=Y=:h0R8;>;_6:e>X3101U8464^5;4?[2>>2T?585Q486891>?2<?01999:578910e2=?0199::57891132=?0199<:578911b2=?0199k:578941a2m=01<6?:e5894>62m=01<6=:e5894>42m=01<6;:e5894>22m=0q~;89;297~X2?0168:85d69>03d=l>1v8=>:181[34927:5k4k8:p1<6=83=pR87?;<026?3>34>=97;m;<652?3>34>=;7;6;<65<?3e34;oj7;7;|q622<721?pR888;<65`?5d34>=o7=l;<65f?5d34><97=l;<640?5d34><?7=l;<3b7?5d34;<j7=l;<3;4?5d34;3=7=l;<3;6?5d34;3?7=l;<3;0?5d34;397=l;<3`b?5d34;o=7=l;<3g7?5d34;o97=l;<3g<?5d34;o57=l;<3`7?5d34;h87=l;<3`1?5d34;h47=l;<3`2?5d34;h;7=l;<306?5d34;8=7=l;<304?5d34;9j7=l;<31a?5d34;9h7=l;<354?5d34;>j7=l;<36a?5d34;>h7=l;<36g?5d34;>n7=l;<360?5d34;>?7=l;<366?5d34;>=7=l;<364?5d34;?j7=l;<33=?5d34;;47=l;<333?5d34;;:7=l;<331?5d34;;87=l;<3:f?5d34;247=l;<3b6?5d34;2j7=l;<3:a?5d349o97=l;<1g2?5d349n=7=l;<1fg?5d349m?7=l;<1e0?5d349m97=l;<1e2?5d349m;7=l;<1e<?5d349o;7=l;<1g<?5d349o57=l;<1ge?5d349on7=l;<1gg?5d349oh7=l;<1ga?5d349oj7=l;<1f4?5d349n>7=l;<1f7?5d349n87=l;<1f1?5d349n:7=l;<1f3?5d349n47=l;<1f=?5d349nm7=l;<1ff?5d349nh7=l;<1fa?5d349nj7=l;<1e4?5d349m=7=l;<1e6?5d348=:7=l;<051?5d348=87=l;<057?5d348=>7=l;<055?5d348>j7=l;<06a?5d348>h7=l;<06g?5d348>n7=l;<06e?5d348>57=l;<06<?5d348>;7=l;<062?5d348>87=l;<067?5d348>>7=l;<065?5d348><7=l;<07b?5d348?i7=l;<07`?5d348?o7=l;<07f?5d348=o7=l;<05f?5d348=m7=l;<05=?5d348=47=l;<053?5d348=<7=l;<061?5d348?m7=l;<07=?5d34;o>7=l;<3g0?5d34;o<7=l;<3g2?5d34;o;7=l;|q672<72;qU9>94=0f`>a><uz?3<7>5cey]1=6<5==36>m4=555>6e<5==<6>m4=55f>6e<5==o6>m4=0f`>6e<58ni6>m4=326>6e<5;:=6>m4=324>6e<5;:36>m4=32:>6e<5;:j6>m4=32a>6e<5o91?n52f380g>;a939h70h?:2a89``=;j16ih4<c:?264<4k27:>=4<c:?25c<4k27:=h4<c:?25a<4k27:=n4<c:?250<4k27:=94<c:?256<4k27:=?4<c:?254<4k27:==4<c:?20=<4k27:8:4<c:?203<4k27:884<c:?201<4k27:8>4<c:?16g<4k279>l4<c:?16f<4k279>54<c:?162<4k279>44<c:?170<4k279?>4<c:?171<4k279?54<c:?173<4k279?:4<c:?10=<4k2798:4<c:?100<4k2798>4<c:?104<4k279?k4<c:?1e0<30:16>;j5491897e12=2870<m0;6;7>;5jk0?4>522d590=5<5;n:696<;<0gg?2?;279;44;829>6c4=<1901?8j:5:0?84>i3>3?63=8587<6=::1l185=4=3c1>1>4348j<7:73:?1e4<30:16>l85491897g42=2870<n4;6;7>;5i>0?4>522`:90=5<5;ki696<;<0b=?2?;279ml4;829>6dc=<1901?ol:5:0?84fl3>3?63=b387<6=::hl185=4=3`2>1>4348i97:73:?1f6<30:16>o:5491897d?2=2870<m6;6;7>;5j>0?4>522ca90=5<5;h2696<;<0ae?2?;279nk4;829>6gb=<1901?lj:5:0?84d83>3?63=c087<6=::j>185=4=3a1>1>4348h?7:73:?1g=<30:16>n;5491897e02=2870<lb;6;7>;5k00?4>522bc90=5<5;in696<;<0`g?2?;279oi4;829>6a4=<1901?mi:5:0?84c83>3?63=d487<6=::m9185=4=3f7>1>4348o47:73:?1`3<30:16>i95491897b>2=2870<ka;6;7>;5ll0?4>522e`90=5<5;no696<;<0f5?2?;279hk4;829>6`6=<1901?k;:5:0?84b:3>3?63=e287<6=::l?185=4=3g5>1>4348nm7:73:?1a=<30:16>h75491897cc2=2870<jb;6;7>;5mj0?4>522g290=5<5;on696<;<0fb?2?;279j<4;829>6c5=<1901?h9:5:0?84a<3>3?63=f487<6=::o3185=4=3d4>1>4348m47:73:?1bf<30:16>ko5491897`e2=2870<81;6;7>;5>o0?4>5226290=5<5;=?696<;<046?2?;279;>4;829>621=<1901?9::5:0?840>3>3?63=7c87<6=::>2185=4=35b>1>4348<o7:73:?13a<30:16>5>54918971b2=2870<8f;6;7>;50:0?4>5229390=5<5;29696<;<0;3?2?;279484;829>6=0=<1901?67:5:0?84?13>3?63=8b87<6=::1k185=4=3:a>1>43482<7:73:?1<a<30:16>5k5491897?42=2870<61;6;7>;51;0?4>5228690=5<5;3>696<;<0:<?2?;2795;4;829>6<1=<1901?7l:5:0?84>13>3?63=9c87<6=::0l185=4=3;g>1>43482i7:73:?107<4k2798=4<c:?101<4k2798;4<c:p1=`=838pR868;<03f?b?3ty>4i4?:3y]1=0<5;:j6i64}r7;g?6=:rT>485221;9`==z{<2i6=4={_7;0>;5810o46s|59c94?4|V<2870<?7;f;?xu2000;6?uQ590897612m20q~;78;296~X20816>=;5d99~w04?2909wS;?4:?123<c02wx9?850;0xZ064348=97j7;|q660<72;qU9=<4=347>a><uz?987>52z\644=::?91h55rs400>5<5sW?;<63=638g<>{t=;81<7<t^5de?84193n37p}:2183>7}Y<on01?;i:e:8yv36n3:1>vP;fb9>60c=l11v8?j:181[2aj2799i4k8:p14b=838pR9hn;<06g?b?3ty>=n4?:3y]0c?<5;?i6i64}r72f?6=:rT?j55224c9`==z{<;j6=4={_6e3>;5=00o46s|50;94?4|V=l=70<:8;f;?xu2910;6?uQ4g7897302m20q~;>7;296~X3n=16>885d99~w0722909wS:i2:?111<c02wx9<:50;0xZ1`6348>?7j7;|q656<72;qU8k>4=371>a><uz?:>7>52z\7ac=::<;1h55rs432>5<5sW>ni63=518g<>{t=8:1<7<t^5gg?843n3n37p}:0g83>7}Y<li01?:j:e:8yv37m3:1>vP;ec9>61b=l11v8>k:181[2bi2798n4k8:p15e=838pR9k6;<07f?b?3ty>>k4?:3y]15g<5;<h6i64}r71a?6=:rT><45227`9`==z{<8o6=4={_73<>;5>h0o46s|53a94?4|V<:<70<99;f;?xu2:k0;6?uQ5148970?2m20q~;=a;296~X28<16>;95d99~w04>2909wS:ie:?125<c02wx9??50;0xZ1`4348>97j7;|q653<72;qU8h64=36b>a><uz?;n7>52z\7a2=::=31h55rs455>5<5sW?=i63>848g<>{t=>>1<7<t^44g?87?<3n37p}:7283>7}Y=?i01<6<:e:8yv30:3:1>vP:6c9>5=4=l11v89>:181[31i27:4<4k8:p126=838pR886;<3;4?b?3ty>:k4?:3y]13><58=m6i64}r6gb?6==rT?no5228a900=::0l1885228f900=::0o1885rs5fg>5<2sW>im63=99871>;51>0?963=98871>;51k0?96s|4ea94?3|V=h270<63;66?84><3>>70<65;66?84>>3>>7p};dc83>0}Y<k201?7?:57897>b2=?01?7>:57897?52=?0q~:ka;291~X3j>16>5m5449>6=g=<<16>5l5449>6=b=<<1v9j6:186[2e>2794:4;5:?1<3<3=279454;5:?1<<<3=2wx8i950;7xZ1d33483?7::;<0;5?223483>7::;<0;1?223ty?h;4?:4y]0g5<5;=o69;4=3:3>13<5;=n69;4=35e>13<uz>o97>55z\7f7=::>h1885226:900=::>k1885226a900=z{=n?6=4:{_6a5>;5?=0?963=76871>;5?<0?963=77871>{t<m91<7;t^5`3?84093>>70<80;66?840:3>>70<83;66?xu3l;0;68uQ4`d897`d2=?01?hn:57897`e2=?01?8i:578yv2c93:19vP;ad9>6c0=<<16>k75449>6c1=<<16>k65449~w1b7290>wS:nd:?1b4<3=279j>4;5:?1b1<3=279j84;5:p0f`=83?pR9ol;<0f`?22348m<7::;<0fa?22348nj7::;|q7g`<72<qU8ll4=3gb>13<5;o269;4=3ga>13<5;oh69;4}r6`g?6==rT?m4522d6900=::l?188522d4900=::l21885rs5aa>5<2sW>j463=e0871>;5m90?963=e3871>;5m:0?96s|4bc94?3|V=k<70<ke;66?84cj3>>70<kd;66?84cn3>>7p};c883>0}Y<h<01?j7:57897b02=?01?j6:57897bf2=?0q~:l8;291~X3i<16>i;5449>6a5=<<16>i:5449>6a0=<<1v9m8:186[2f<279oh4;5:?1`7<3=279ok4;5:?1`5<3=2wx8n850;7xZ1g4348hn7::;<0`e?22348ho7::;<0``?223ty?o84?:4y]0d4<5;i369;4=3a6>13<5;i<69;4=3a:>13<uz>h87>55z\7e4=::j;188522b6900=::j8188522b1900=z{=i86=4:{_6b4>;5jo0?963=be871>;5jl0?963=c1871>{t<l<1<7;t^5a2?84e03>>70<mc;66?84e13>>70<ma;66?xu3m<0;68uQ4b2897d22=?01?l;:57897d12=?01?l8:578yv2b<3:19vP;bg9>6g4=<<16>lh5449>6g7=<<16>o=5449~w1c4290>wS:me:?1eg<3=279mh4;5:?1ef<3=279mi4;5:p0`4=83?pR9lk;<0b3?22348j47::;<0b=?22348jm7::;|q7a4<72<qU8om4=3c1>13<5;k=69;4=3c0>13<5;k?69;4}r6f4?6==rT?n85228c900=::1l188522`2900=::h;1885rs5f;>5<2sW>jm63=78871>;5n;0?963=6d871>;50=0?96s|4bf94?3|V=3m70<l6;66?84b?3>>70<k1;66?84ck3>>7p};c383>0}Y<0o01?o::578970c2=?01?l?:57897de2=?0q~9?:18682?13n870?9d;63?87003>;70?i3;63?87am3>;7p};6b83>6}:<?n1885247a9`==:<?h1?h5rs54g>5<5s4>=h7j7;<65b?3?3ty?;:4?:2y>02>=<<168:853d9>021=l11v997:18182003n370:8a;7;?xu3>k0;6>u247a900=:<?h1h55247d91<=z{===6=4<{<642?b?34><;7::;<64e?3>3ty?:h4?:5y>023=l>168::5d69>025=l>168;h5d09~w1152909=v3;748g<>;6i:0o;63>7g875>;6090?=63>80875>;60;0?=63>82875>;60=0?=63>84875>;6ko0?=63>d0875>;6l:0?=63>d4875>;6l10?=63>d8875>;6k:0o;63>c5875>;6k<0?=63>c9875>;6k?0?=63>c6875>;61k0?=63>99875>;6i;0?=63>9g8g3>;61l0o;63>8686=>;6l;0?=63>d5875>;6l90?=63>d7875>;6l>0?=63>8`86f>{t<>;1<7?6{<640?b?34;8>7:>;<305?2634;8<7:>;<31b?2634;9i7:>;<31`?2634;=<7:>;<36b?2634;>i7:>;<36`?2634;>o7:>;<36f?2634;>87:>;<367?2634;>>7:>;<365?2634;><7:>;<37b?2634;;57:>;<33<?2634;;;7:>;<332?2634;;97:>;<330?263ty?;=4?:5;x91142m201>j::53896b12=;01>k>:53896cd2=;01>h<:53896`32=;01>h::53896`12=;01>h8:53896`?2=;01>j8:53896b?2=;01>j6:53896bf2=;01>jm:53896bd2=;01>jk:53896bb2=;01>ji:53896c72=;01>k=:53896c42=;01>k;:53896c22=;01>k9:53896c02=;01>k7:53896c>2=;01>kn:53896ce2=;01>kk:53896cb2=;01>ki:53896`72=;01>h>:53896`52=;01?89:53897022=;01?8;:53897042=;01?8=:53897062=;01?;i:538973b2=;01?;k:538973d2=;01?;m:538973f2=;01?;6:538973?2=;01?;8:53897312=;01?;;:53897342=;01?;=:53897362=;01?;?:538972a2=;01?:j:538972c2=;01?:l:538972e2=;01?8l:538970e2=;01?8n:538970>2=;01?87:53897002=;01?8?:53897322=;01?:n:538972>2=;0q~:89;297~;3?l0o;63;7e8g3>;3?h0o=6s|46a94?47s4><i7j7;<3gg?b034;on7j8;<031?26348;:7:>;<033?26348;47:>;<03=?26348;m7:>;<03f?263489n7:>;<01e?263489o7:>;<01<?b03489;7:>;<01=?26348897:>;<007?b0348887:>;<00<?263488:7:>;<003?26348?47:>;<073?26348?97:>;<077?26348?=7:>;<00b?26348?>7:>;<074?26348?87:>;<072?263ty?;o4?:0;x911c2m201k=5409>b7<3927m=7:>;<d3>17<5ll18<52ed875>;6:80?=63>21875>;69o0?=63>1d875>;69m0?=63>1b875>;69<0?=63>15875>;69:0?=63>13875>;6980?=63>11875>;6<10?=63>46875>;6<?0?=63>44875>;6<=0?=63>42875>{t9h>1<7<t=0c0>13<58k26i?4}r3b7?6=;r7:m>4k8:?2=a<2027:584:9:p5=0=838p1<9i:57894>02m;0q~?78;296~;6090?963>888g5>{t91h1<7<t=0:2>13<582h6i?4}r3;`?6=:r7:4?4;5:?2<`<c92wx=5h50;0x94>42=?01<6i:e38yv7>93:1>v3>85871>;61;0o=6s|18194?4|582>69;4=0;7>a7<uz;om7>536y>5f`=;l16=i?53d9>5a5=;l16=i;53d9>5a>=;l16=i753d9>5f5=;l16=n:53d9>5f3=;l16=n653d9>5f0=;l16=n953d9>7a3=;l16?i853d9>7`7=;l16?hm53d9>7c5=;l16?k:53d9>7c3=;l16?k853d9>7c1=;l16?k653d9>7a1=;l16?i653d9>7a?=;l16?io53d9>7ad=;l16?im53d9>7ab=;l16?ik53d9>7a`=;l16?h>53d9>7`4=;l16?h=53d9>7`2=;l16?h;53d9>7`0=;l16?h953d9>7`>=;l16?h753d9>7`g=;l16?hl53d9>7`b=;l16?hk53d9>7``=;l16?k>53d9>7c7=;l16?k<53d9>5<3=l816=l855c9>5a4=;l16=i:53d9>5a6=;l16=i853d9>5a1=;l1v<lk:18:87dn3>>70?l3;f;?87ei3?270?mb;7b?87ek3?j70?n8;7b?87c83>>70?m9;74?87e93?37p}>c883><5|58im6i64=3c6>1><5;<o6964=3a5>1><5;h;6964=3`a>1><5;o<6964=3f2>1><5;nh6964=35:>1><5;l96964=34f>1><5;3j6964=3:7>1><5;2m6964=3c1>1><5;k;6964=3c2>1><5;k=6964=3c0>1><5;k?6964=3c4>1><5;k36964=3ca>1><5;k26964=3cb>1><5;kn6964=3c`>1><5;ko6964=3`1>1><5;km6964=3`2>1><5;h>6964=3`0>1><5;h?6964=3`;>1><5;h=6964=3`4>1><5;hh6964=3`:>1><5;hj6964=3`e>1><5;ho6964=3`f>1><5;i;6964=3a2>1><5;i?6964=3a1>1><5;i86964=3a;>1><5;i>6964=3a4>1><5;ii6964=3a:>1><5;ij6964=3af>1><5;ih6964=3ag>1><5;n96964=3ae>1><5;n;6964=3f6>1><5;n86964=3f7>1><5;n36964=3f5>1><5;n<6964=3f:>1><5;nj6964=3ff>1><5;ni6964=3fg>1><5;o:6964=3fe>1><5;o;6964=3g7>1><5;o96964=3g0>1><5;o>6964=3g5>1><5;oj6964=3g;>1><5;o26964=3gg>1><5;oi6964=3g`>1><5;l;6964=3gf>1><5;om6964=3d2>1><5;l86964=3d5>1><5;l?6964=3d6>1><5;l26964=3d4>1><5;l36964=3d`>1><5;lj6964=3da>1><5;=:6964=34e>1><5;=;6964=357>1><5;=96964=350>1><5;=<6964=356>1><5;==6964=35a>1><5;=36964=35b>1><5;=h6964=35g>1><5;2;6964=35f>1><5;=m6964=3:0>1><5;2:6964=3:1>1><5;2<6964=3:6>1><5;2=6964=3:;>1><5;226964=3:`>1><5;2j6964=3:a>1><5;3;6964=3:g>1><5;2n6964=3;0>1><5;3:6964=3;1>1><5;3?6964=3;6>1><5;336964=3;5>1><5;3<6964=3;`>1><5;326964=3;a>1><5;3m6964=3;g>1><5;3n6964=d091<=:9hh19l5rs0`f>5<?s4;o=7::;<3`0?b?34;im7;7;<3af?3>34;io7;6;<3b1?3?34;o>7::;<3a5?3>3ty:ol4?:86x94b62m201?o::5;8970c2=301?m9:5;897d72=301?lm:5;897c02=301?j>:5;897bd2=301?96:5;897`52=301?8j:5;897?f2=301?6;:5;897>a2=301?o=:5;897g72=301?o>:5;897g12=301?o<:5;897g32=301?o8:5;897g?2=301?om:5;897g>2=301?on:5;897gb2=301?ol:5;897gc2=301?l=:5;897ga2=301?l>:5;897d22=301?l<:5;897d32=301?l7:5;897d12=301?l8:5;897dd2=301?l6:5;897df2=301?li:5;897dc2=301?lj:5;897e72=301?m>:5;897e32=301?m=:5;897e42=301?m7:5;897e22=301?m8:5;897ee2=301?m6:5;897ef2=301?mj:5;897ed2=301?mk:5;897b52=301?mi:5;897b72=301?j::5;897b42=301?j;:5;897b?2=301?j9:5;897b02=301?j6:5;897bf2=301?jj:5;897be2=301?jk:5;897c62=301?ji:5;897c72=301?k;:5;897c52=301?k<:5;897c22=301?k9:5;897cf2=301?k7:5;897c>2=301?kk:5;897ce2=301?kl:5;897`72=301?kj:5;897ca2=301?h>:5;897`42=301?h9:5;897`32=301?h::5;897`>2=301?h8:5;897`?2=301?hl:5;897`f2=301?hm:5;897162=301?8i:5;897172=301?9;:5;897152=301?9<:5;897102=301?9::5;897112=301?9m:5;8971?2=301?9n:5;8971d2=301?9k:5;897>72=301?9j:5;8971a2=301?6<:5;897>62=301?6=:5;897>02=301?6::5;897>12=301?67:5;897>>2=301?6l:5;897>f2=301?6m:5;897?72=301?6k:5;897>b2=301?7<:5;897?62=301?7=:5;897?32=301?7::5;897??2=301?79:5;897?02=301?7l:5;897?>2=301?7m:5;897?a2=301?7k:5;897?b2=301h<5599>a4<2127:mn4:b:p5g`=83=p1<j<:57894e22m201<lm:4:894dd2<h01<o7:4:894b32=?01<l>:4c8yv7dj3:159u21e19`==::h?18l5227f90d=::j<18l522c290d=::kh18l522d590d=::m;18l522ea90d=::>318l522g090d=::?o18l5228c90d=::1>18l5229d90d=::h818l522`290d=::h;18l522`490d=::h918l522`690d=::h=18l522`:90d=::hh18l522`;90d=::hk18l522`g90d=::hi18l522`f90d=::k818l522`d90d=::k;18l522c790d=::k918l522c690d=::k218l522c490d=::k=18l522ca90d=::k318l522cc90d=::kl18l522cf90d=::ko18l522b290d=::j;18l522b690d=::j818l522b190d=::j218l522b790d=::j=18l522b`90d=::j318l522bc90d=::jo18l522ba90d=::jn18l522e090d=::jl18l522e290d=::m?18l522e190d=::m>18l522e:90d=::m<18l522e590d=::m318l522ec90d=::mo18l522e`90d=::mn18l522d390d=::ml18l522d290d=::l>18l522d090d=::l918l522d790d=::l<18l522dc90d=::l218l522d;90d=::ln18l522d`90d=::li18l522g290d=::lo18l522dd90d=::o;18l522g190d=::o<18l522g690d=::o?18l522g;90d=::o=18l522g:90d=::oi18l522gc90d=::oh18l5226390d=::?l18l5226290d=::>>18l5226090d=::>918l5226590d=::>?18l5226490d=::>h18l5226:90d=::>k18l5226a90d=::>n18l5229290d=::>o18l5226d90d=::1918l5229390d=::1818l5229590d=::1?18l5229490d=::1218l5229;90d=::1i18l5229c90d=::1h18l5228290d=::1n18l5229g90d=::0918l5228390d=::0818l5228690d=::0?18l5228:90d=::0<18l5228590d=::0i18l5228;90d=::0h18l5228d90d=::0n18l5228g90d=:m80>463j0;7:?87fj3?i7p}>c183>2}:9m?188521b49`==:9ki195521`591d=:9m<188521e5900=:9k;19o5rs0a`>5<>;r7:h84k8:?1e0<3j279:i4;b:?1g3<3j279n=4;b:?1fg<3j279i:4;b:?1`4<3j279hn4;b:?13<<3j279j?4;b:?12`<3j2795l4;b:?1<1<3j2794k4;b:?1e7<3j279m=4;b:?1e4<3j279m;4;b:?1e6<3j279m94;b:?1e2<3j279m54;b:?1eg<3j279m44;b:?1ed<3j279mh4;b:?1ef<3j279mi4;b:?1f7<3j279mk4;b:?1f4<3j279n84;b:?1f6<3j279n94;b:?1f=<3j279n;4;b:?1f2<3j279nn4;b:?1f<<3j279nl4;b:?1fc<3j279ni4;b:?1f`<3j279o=4;b:?1g4<3j279o94;b:?1g7<3j279o>4;b:?1g=<3j279o84;b:?1g2<3j279oo4;b:?1g<<3j279ol4;b:?1g`<3j279on4;b:?1ga<3j279h?4;b:?1gc<3j279h=4;b:?1`0<3j279h>4;b:?1`1<3j279h54;b:?1`3<3j279h:4;b:?1`<<3j279hl4;b:?1``<3j279ho4;b:?1`a<3j279i<4;b:?1`c<3j279i=4;b:?1a1<3j279i?4;b:?1a6<3j279i84;b:?1a3<3j279il4;b:?1a=<3j279i44;b:?1aa<3j279io4;b:?1af<3j279j=4;b:?1a`<3j279ik4;b:?1b4<3j279j>4;b:?1b3<3j279j94;b:?1b0<3j279j44;b:?1b2<3j279j54;b:?1bf<3j279jl4;b:?1bg<3j279;<4;b:?12c<3j279;=4;b:?131<3j279;?4;b:?136<3j279;:4;b:?130<3j279;;4;b:?13g<3j279;54;b:?13d<3j279;n4;b:?13a<3j2794=4;b:?13`<3j279;k4;b:?1<6<3j2794<4;b:?1<7<3j2794:4;b:?1<0<3j2794;4;b:?1<=<3j279444;b:?1<f<3j2794l4;b:?1<g<3j2795=4;b:?1<a<3j2794h4;b:?1=6<3j2795<4;b:?1=7<3j279594;b:?1=0<3j279554;b:?1=3<3j2795:4;b:?1=f<3j279544;b:?1=g<3j2795k4;b:?1=a<3j2795h4;b:?f4?3?34nm6874}r3`5?6==r7:h54;5:?2g2<c027:n?4:8:?2f0<2i27:m;4:9:p5fb=83>ow0?k8;f;?870>3?270:>9;7;?82603?370:94;7;?821;3?370:<a;7;?82413?370:;f;7;?823m3?370::8;7;?822?3?370::2;7;?82293?370::5;7;?822<3?370::b;7;?822i3?370::e;7;?822l3?370=ie;7;?85al3?370:91;7;?82183?370=ib;7;?85ai3?370:?1;7;?82783?370:?4;7;?827;3?370:?7;7;?827>3?370:?a;7;?82713?370:?d;7;?827k3?370:>0;7;?827n3?370:>c;7;?826j3?370:>3;7;?826:3?370:>6;7;?826=3?370:>f;7;?826m3?370:=2;7;?82593?370:=5;7;?825<3?370:=8;7;?825?3?370:=b;7;?825i3?370:=e;7;?825l3?370:<7;7;?824>3?370:<1;7;?82483?370:<4;7;?824;3?370:<d;7;?824k3?370:;0;7;?824n3?370:;3;7;?823:3?370:;6;7;?823=3?370:;9;7;?82303?370:;c;7;?823j3?370ji:4:89ac==016=lm55`9~w4e5290?w0?k9;66?87d03n370?m5;7;?87f?3?37p}>cd83>7?|58n26i64=054>0?<58:269;4=534>ag<5=<96io4=51;>ag<5=>o6io4=575>ag<5=?;6io4=570>ag<5=?26io4=57`>ag<5:lh6io4=57e>ag<5:l26io4=2de>ag<5=:96io4=526>ag<5=:36io4=52a>ag<5=:n6io4=53b>ag<5=;:6io4=537>ag<5=;o6io4=503>ag<5=886io4=505>ag<5=826io4=50`>ag<5=9>6io4=50e>ag<5=996io4=51a>ag<5=9n6io4=562>ag<5=>?6io4=564>ag<5=>j6io4=eg91==:9hn19o5rs0fg>5<4s4;oo7::;<3gf?2234;n>7j>;|q2`g<72>q6=il5d99>644==1168;;55`9>030==k168;955c9>03>==016=ik55`9~w7632909w0<?5;66?87am3n:7p}=0b83>7}::9<188521dd9`4=z{;:o6=4={<033?2234;m<7j>;|q14`<72;q6>=65449>5c7=l81v?>i:18184713>>70?i2;f2?xu5990;6?u221c900=::8;1h<5rs0g`>5<5s48;n7::;<3f`?b63ty:mk4?:3y>5f5=<<16=o75d09~w4d12909w0?l4;66?87ei3n:7p}>b683>7}:9j?188521c`9`4=z{8h?6=4={<3`<?2234;i97j>;|q2f=<72;q6=n85449>5ge=l81v<l?:18187d?3>>70?m2;f2?xu6l90;6?u216091==:9m:1h55rs004>5<2s4;<>7;6;<35`?2134;9h7j7;<3bf?3>34;j47;m;|q237<72:q6=:<5d09>53b=lh16=:655g9~w40c2908w0?9d;f2?871m3>;70?89;63?xu6?l0;6?u216:9`4=:91=19o5rs0f1>5<5s4;<?7;7;<3g6?b?3ty:>54?:4y>525==016=;k5479>57c=l116=lm5589>5d3==01v<9<:180870;3n:70?9e;fb?87013?m7p}>6d83>6}:9?o1h<5217d905=:9>k18=5rs04b>5<0s4;<57j>;<3;=?3>34;3o7;n;<3;a?3f34;2<7;6;<35f?3f34;=o7;6;|q2`1<72;q6=::5599>5a2=l11v<<6:186870<3?270?9f;65?875n3n370?nb;7;?87f03?27p}>7583>6}:9>>1h<5217d9`d=:9>k19k5rs04e>5<4s4;=j7j>;<344?2734;<n7:?;|q223<72?q6=:o5d09>5=e==016=5k5589>5<6==116=;l5589>53e==11v<j9:181870=3?370?k6;f;?xu6:h0;68u216791<=:9>:18;521229`==:9hn194521`591g=z{8=>6=4<{<341?b634;<<7jn;<34f?3a3ty:;=4?:2y>526=l816=:?5419>52e=<91v<88:186870j3n:70?7e;7a?87?n3?270?64;7;?871k3?j7p}>2c83>0}:9><19552163903=:9:;1h5521`a91==:9h<1955rs055>5<4s4;<:7j>;<345?bf34;<o7;i;|q234<72;q6=:?5d09>52b=<91v<87:187870k3n:70?7f;7b?87><3?270?62;7:?xu6:j0;69u216591==:9:81h5521`f91d=:9h=1945rs054>5<5s4;<;7j>;<34`?3a3ty::44?:2y>52b=l816=4:55`9>5<4==h1v?:?:18087a03?370?i3;65?84383n37p}j8;290~;6n10>563je;f;?87b<3?270?j1;7a?xu6n10;6>u21g:9`4=:9o91hl521gg91c=z{8l86=4<{<3e7?b634;m87:?;<3eb?273ty98?4?:2y>5c?==116=k:5479>614=l11vh750;6x94`>2<301hh5d99>5`3==h16=ik5599~w4`>2908w0?i9;f2?87a<3nj70?if;7e?xu6n=0;6>u21g69`4=:9o?18=52212905=z{8oi6=49{<3eb?b634;m<7;7;<3e5?3?34;m>7;7;<3fa?3?34;nj7;8;|q101<72:q6=ko5599>5c3=<?16>9:5d99~w`g=83>p1<hn:4;89c6=l116=h:55c9>5`7==01v<hn:18087ai3n:70?i5;fb?84783?m7p}>f483>6}:9o?1h<521g4905=::9;18=5rs0g4>5<2s48;<7j>;<3e4?3>34;m=7;6;<3e6?3>34;ni7;6;|qff?6=<r7:jo4:8:?e5?b?34;n:7;m;<3f4?3e3ty98;4?:2y>5cd==016=k85479>610=l11v<hm:18087aj3n:70?i6;fb?84793?m7p}>f783>6}:9o<1h<521g5905=::9818=5rs0g;>5<2s48;=7j>;<3e5?3f34;m>7;n;<025?3?34;nh7;7;|q17a<720q6=km5599>5c1=<?16>995d99>a1<2027n?7;6;<651?3?34>=:7;n;<653?3?34>=47;n;|qfg?6=<r7:jn4:9:?e6?b?34;n97;6;<3gb?3f3ty:jn4?:2y>5ce=l816=k95d`9>654==o1v<h8:18187a?3n:70<?3;63?xu6m00;69u22109`4=:9o819o5220391<=:9ln1945rs31f>5<?s4;mh7;7;<37<?22348?47j7;<g0>0><5=<>6874=545>0><5=<<68o4=54;>0><uzoo6=4;{<3e`?3>34l86i64=0g5>0?<58o;6874}r3e`?6=:r7:ji4k1:?146<2n2wx=ho50;1x97642m;01??>:4c894cc2<k0q~?>b;291~;a;3>>70?=1;f;?8`22<301k95599>b<<2i2wxj94?:3y>b7<3=27m97j>;|qe2?6=:r7m=7::;<d4>a7<uzl36=4;{<d3>13<5o31h<52fc86=>;al3?j7p}ia;296~;bn3>>70hm:e38yv`d2909w0kj:5789cb=l81v<;n:186874:3>>70?90;f;?874<3?270?<6;7;?87403?j7p}>3283>7}:9:;188521269`4=z{89>6=4={<304?2234;8:7j>;|q272<72=q6=?h5449>56>=l816=>o5589>56e==h1v<=6:181875m3>>70?<a;f2?xu6;k0;6?u213f900=:9:i1h<5rs06f>5<5s4;=<7::;<360?b?3ty:8i4?:3y>50`=<<16=8=5d99~w43>290?w0?:f;f;?874<3?370?<6;7:?87403?i7p}>4b83>7}:9<o188521409`==z{8?36=4<{<36a?b?34;8:7;n;<30<?3?3ty:8o4?:3y>50b=<<16=8?5d99~w4302909w0?:d;f;?87403?27p}>4`83>7}:9<i188521429`==z{8?=6=4<{<36g?b?34;8m7;7;<30g?3>3ty:844?:3y>50d=<<16=9h5d99~w4322909w0?:b;f;?874k3?37p}>0g83>7}:9;;188521079`==z{8:n6=4={<314?2234;:87j7;|q25d<72=q6=?>5d99>b0<2027m;7;6;<d:>0d<uz;;h7>52z?25c<3=27:=>4k8:p54?=839p1<?i:e:89c1==h16j44:8:p55e=838p1<?j:57894752m20q~?>8;296~;69l0o463i9;7:?xu68k0;6?u210f900=:98;1h55rs034>5<4s4;:h7j7;<da>0><5on1945rs02b>5<5s4;:o7::;<324?b?3ty:=;4?:3y>54e=l116ji4:8:p514=838p1<;;:578942?2m20q~?;1;296~;6=:0?963>468g<>{t9=:1<7<t=071>13<58>=6i64}r30b?6=:r7:9<4;5:?200<c02wx=>k50;0x94372=?01<:;:e:8yv74l3:1>v3>4g871>;6<:0o46s|11194?4|58;>69;4=02:>a><uz;;>7>52z?251<3=27:<54k8:p557=838p1<?<:57894602m20q~??0;296~;69;0?963>078g<>{tno0;6?u2103900=:99?1h55rsgg94?4|58;;69;4=027>a><uz;9>7>52z?24=<3=27oi7j>;|q266<72;q6==95449>`c<c92wx=?:50;0x94612=?01h>5d09~w4422909w0??5;66?8c62m;0q~?=6;296~;68=0?963j2;f2?xu6>80;6?u2155900=:m:0o=6s|17094?4|58>=69;4=d69`4=z{8<86=4={<371?2234o>6i?4}r350?6=:r7:894;5:?f2?b63ty::84?:3y>515=<<16i:4k1:p5<e=838p1<7m:57894?c2m;0q~?6b;29<~;61k0o463>9`86=>;6i80>m63>9e86e>;61?0>463>9486f>;61>0>563>8`86=>{t9031<7=t=0;;>13<58k969;4=0;b>a7<uz;247>58z?2==<c027:5l4:8:?2e4<2127:5i4:9:?2=3<2127:584:a:?2=2<2027:4l4:8:p5d4=839p1<o=:e:894>02<k01<6n:4c8yv7f83:1?v3>9g871>;61l0?963>a08g5>{t90o1<7<t=0;f>a><58k:6864}r65e?6=9>q6>?l53d9>67g=;l16>?m53d9>67>=;l16>?953d9>67?=;l16>>;53d9>665=;l16>>:53d9>66>=;l16>>853d9>661=;l16>9653d9>611=;l16>9;53d9>615=;l16>9?53d9>66`=;l16><<5d09>614=;l16>9>53d9>612=;l16>9853d9~w7732909w0<=b;66?846m3n:7p}=2483>0}::;h1h552225900=::8o1955220d91d=:9ml1945rs33;>5<5s489m7::;<02`?b63ty9>94?:7y>67g=l116>>85449>64c==h16><h55c9>5`6==h16><j5599~w7722909w0<=c;66?846n3n:7p}=2783>1}::;i1h55222:900=::8l195521d291==z{;;=6=4={<01<?22348:m7j>;|q167<72>q6>?65d99>662=<<16><o5599>64d==016><j55`9>5ac==016><m5589~w7742909w0<=7;66?84613n:7p}=2083>=}::;=1h552221900=::8k1945220`91d=:9l;19l5220f91<=::8319:5220a91==z{;;<6=4={<01=?22348:n7j>;|q166<72?q6>?75d99>663=<<16><l5599>5`7==116><j55c9>64e==h1v?<i:187844=3n370<;3;66?87b<3?j70<;4;66?xu5:m0;69u22219`==:::l188521d691==::=:1885rs30f>5<3s48887j7;<075?2234;n97;m;<076?223ty9??4?:2y>66>=l116>965449>5`0==11v?=?:187844>3n370<;5;66?87b>3?j70<;6;66?xu5;80;6>u22259`==::==188521d791==z{;9h6=463z?100<c0279m84<8:?12a<40279o;4<8:?1f5<40279no4<8:?1a2<40279h<4<8:?1`f<40279;44<8:?1b7<40279:h4<8:?1=d<40279494<8:?1<c<40279m?4<8:?1e5<40279m<4<8:?1e3<40279m>4<8:?1e1<40279m:4<8:?1e=<40279mo4<8:?1e<<40279ml4<8:?1e`<40279mn4<8:?1ea<40279n?4<8:?1ec<40279n<4<8:?1f0<40279n>4<8:?1f1<40279n54<8:?1f3<40279n:4<8:?1ff<40279n44<8:?1fd<40279nk4<8:?1fa<40279nh4<8:?1g5<40279o<4<8:?1g1<40279o?4<8:?1g6<40279o54<8:?1g0<40279o:4<8:?1gg<40279o44<8:?1gd<40279oh4<8:?1gf<40279oi4<8:?1`7<40279ok4<8:?1`5<40279h84<8:?1`6<40279h94<8:?1`=<40279h;4<8:?1`2<40279h44<8:?1`d<40279hh4<8:?1`g<40279hi4<8:?1a4<40279hk4<8:?1a5<40279i94<8:?1a7<40279i>4<8:?1a0<40279i;4<8:?1ad<40279i54<8:?1a<<40279ii4<8:?1ag<40279in4<8:?1b5<40279ih4<8:?1ac<40279j<4<8:?1b6<40279j;4<8:?1b1<40279j84<8:?1b<<40279j:4<8:?1b=<40279jn4<8:?1bd<40279jo4<8:?134<40279:k4<8:?135<40279;94<8:?137<40279;>4<8:?132<40279;84<8:?133<40279;o4<8:?13=<40279;l4<8:?13f<40279;i4<8:?1<5<40279;h4<8:?13c<402794>4<8:?1<4<402794?4<8:?1<2<40279484<8:?1<3<40279454<8:?1<<<402794n4<8:?1<d<402794o4<8:?1=5<402794i4<8:?1<`<402795>4<8:?1=4<402795?4<8:?1=1<40279584<8:?1==<402795;4<8:?1=2<402795n4<8:?1=<<402795o4<8:?1=c<402795i4<8:?1=`<4027n97;7;<g7>0?<uz88n7>592y>615=l116>l;5369>63b=;>16>n85369>6g6=;>16>ol5369>6`1=;>16>i?5369>6ae=;>16>:75369>6c4=;>16>;k5369>6<g=;>16>5:5369>6=`=;>16>l<5369>6d6=;>16>l?5369>6d0=;>16>l=5369>6d2=;>16>l95369>6d>=;>16>ll5369>6d?=;>16>lo5369>6dc=;>16>lm5369>6db=;>16>o<5369>6d`=;>16>o?5369>6g3=;>16>o=5369>6g2=;>16>o65369>6g0=;>16>o95369>6ge=;>16>o75369>6gg=;>16>oh5369>6gb=;>16>ok5369>6f6=;>16>n?5369>6f2=;>16>n<5369>6f5=;>16>n65369>6f3=;>16>n95369>6fd=;>16>n75369>6fg=;>16>nk5369>6fe=;>16>nj5369>6a4=;>16>nh5369>6a6=;>16>i;5369>6a5=;>16>i:5369>6a>=;>16>i85369>6a1=;>16>i75369>6ag=;>16>ik5369>6ad=;>16>ij5369>6`7=;>16>ih5369>6`6=;>16>h:5369>6`4=;>16>h=5369>6`3=;>16>h85369>6`g=;>16>h65369>6`?=;>16>hj5369>6`d=;>16>hm5369>6c6=;>16>hk5369>6``=;>16>k?5369>6c5=;>16>k85369>6c2=;>16>k;5369>6c?=;>16>k95369>6c>=;>16>km5369>6cg=;>16>kl5369>627=;>16>;h5369>626=;>16>::5369>624=;>16>:=5369>621=;>16>:;5369>620=;>16>:l5369>62>=;>16>:o5369>62e=;>16>:j5369>6=6=;>16>:k5369>62`=;>16>5=5369>6=7=;>16>5<5369>6=1=;>16>5;5369>6=0=;>16>565369>6=?=;>16>5m5369>6=g=;>16>5l5369>6<6=;>16>5j5369>6=c=;>16>4=5369>6<7=;>16>4<5369>6<2=;>16>4;5369>6<>=;>16>485369>6<1=;>16>4m5369>6<?=;>16>4l5369>6<`=;>16>4j5369>6<c=;>16i;4:8:?f1?3>3ty9?l4?:81x97262m201?o::248970c2:<01?m9:24897d72:<01?lm:24897c02:<01?j>:24897bd2:<01?96:24897`52:<01?8j:24897?f2:<01?6;:24897>a2:<01?o=:24897g72:<01?o>:24897g12:<01?o<:24897g32:<01?o8:24897g?2:<01?om:24897g>2:<01?on:24897gb2:<01?ol:24897gc2:<01?l=:24897ga2:<01?l>:24897d22:<01?l<:24897d32:<01?l7:24897d12:<01?l8:24897dd2:<01?l6:24897df2:<01?li:24897dc2:<01?lj:24897e72:<01?m>:24897e32:<01?m=:24897e42:<01?m7:24897e22:<01?m8:24897ee2:<01?m6:24897ef2:<01?mj:24897ed2:<01?mk:24897b52:<01?mi:24897b72:<01?j::24897b42:<01?j;:24897b?2:<01?j9:24897b02:<01?j6:24897bf2:<01?jj:24897be2:<01?jk:24897c62:<01?ji:24897c72:<01?k;:24897c52:<01?k<:24897c22:<01?k9:24897cf2:<01?k7:24897c>2:<01?kk:24897ce2:<01?kl:24897`72:<01?kj:24897ca2:<01?h>:24897`42:<01?h9:24897`32:<01?h::24897`>2:<01?h8:24897`?2:<01?hl:24897`f2:<01?hm:24897162:<01?8i:24897172:<01?9;:24897152:<01?9<:24897102:<01?9::24897112:<01?9m:248971?2:<01?9n:248971d2:<01?9k:24897>72:<01?9j:248971a2:<01?6<:24897>62:<01?6=:24897>02:<01?6::24897>12:<01?67:24897>>2:<01?6l:24897>f2:<01?6m:24897?72:<01?6k:24897>b2:<01?7<:24897?62:<01?7=:24897?32:<01?7::24897??2:<01?79:24897?02:<01?7l:24897?>2:<01?7m:24897?a2:<01?7k:24897?b2:<01h95599>a3<212wx>>750;;1844n3n370<n5;16?841l39>70<l6;16?84e839>70<mb;16?84b?39>70<k1;16?84ck39>70<89;16?84a:39>70<9e;16?84>i39>70<74;16?84?n39>70<n2;16?84f839>70<n1;16?84f>39>70<n3;16?84f<39>70<n7;16?84f039>70<nb;16?84f139>70<na;16?84fm39>70<nc;16?84fl39>70<m2;16?84fn39>70<m1;16?84e=39>70<m3;16?84e<39>70<m8;16?84e>39>70<m7;16?84ek39>70<m9;16?84ei39>70<mf;16?84el39>70<me;16?84d839>70<l1;16?84d<39>70<l2;16?84d;39>70<l8;16?84d=39>70<l7;16?84dj39>70<l9;16?84di39>70<le;16?84dk39>70<ld;16?84c:39>70<lf;16?84c839>70<k5;16?84c;39>70<k4;16?84c039>70<k6;16?84c?39>70<k9;16?84ci39>70<ke;16?84cj39>70<kd;16?84b939>70<kf;16?84b839>70<j4;16?84b:39>70<j3;16?84b=39>70<j6;16?84bi39>70<j8;16?84b139>70<jd;16?84bj39>70<jc;16?84a839>70<je;16?84bn39>70<i1;16?84a;39>70<i6;16?84a<39>70<i5;16?84a139>70<i7;16?84a039>70<ic;16?84ai39>70<ib;16?840939>70<9f;16?840839>70<84;16?840:39>70<83;16?840?39>70<85;16?840>39>70<8b;16?840039>70<8a;16?840k39>70<8d;16?84?839>70<8e;16?840n39>70<73;16?84?939>70<72;16?84??39>70<75;16?84?>39>70<78;16?84?139>70<7c;16?84?i39>70<7b;16?84>839>70<7d;16?84?m39>70<63;16?84>939>70<62;16?84><39>70<65;16?84>039>70<66;16?84>?39>70<6c;16?84>139>70<6b;16?84>n39>70<6d;16?84>m39>70k8:4;8yv5?l3:1>v3<d4871>;3>;0o=6s|3c394?4|5:n>6i64=36:>13<uz9247>52z?0`3<3=27?=:4k1:p7ge=838p1>j9:e:8972f2=?0q~=n3;296~;4m80?963;398g5>{t;j=1<7<t=2g2>a><5;?>69;4}r1be?6=:r78in4;5:?70a<c92wx?nk50;0x96cd2m201?8?:578yv5fj3:1>v3<f2871>;3=90o=6s|3bd94?4|5:l86i64=344>13<uz9jo7>52z?0b1<3=27?9>4k1:p7a6=838p1>h;:e:8970?2=?0q~=nd;296~;4n<0?963;578g5>{t;m;1<7<t=2d6>a><5;<269;4}r1ba?6=:r78j;4;5:?71<<c92wx?i<50;0x96`12m201?8n:578yv5fn3:1>v3<f6871>;3=j0o=6s|3e194?4|5:l<6i64=34a>13<uz9i<7>52z?0b=<3=27?9k4k1:p7a2=838p1>h7:e:8970d2=?0q~=7e;296~;4l>0?963<f88g5>{t;k81<7<t=2f4>a><5;>i69;4}r1;b?6=:r78h54;5:?0bf<c92wx?o=50;0x96b?2m201?:l:578yv5>83:1>v3<d8871>;4no0o=6s|3c694?4|5:n26i64=36g>13<uz92=7>52z?0`d<3=27?<?4k1:p7g3=838p1>jn:e:8972b2=?0q~=62;296~;4lk0?963;048g5>{t;k<1<7<t=2fa>a><5;>m69;4}r1:7?6=:r78hn4;5:?74=<c92wx?o950;0x96bd2m201?;?:578yv5><3:1>v3<de871>;38k0o=6s|3c:94?4|5:no6i64=372>13<uz9297>52z?0``<3=27?<h4k1:p7g?=838p1>jj:e:897352=?0q~=66;296~;4lo0?963;108g5>{t;kk1<7<t=2fe>a><5;?869;4}r1:3?6=:r78i=4;5:?751<c92wx?ol50;0x96c72m201?;;:578yv5>13:1>v3<e3871>;39h0o=6s|3cf94?4|5:o96i64=375>13<uz92m7>52z?0a6<3=27?=i4k1:p7gc=838p1>k<:e:897302=?0q~=6b;296~;4m=0?963;218g5>{t;kl1<7<t=2g7>a><5;?369;4}r1:g?6=:r78i84;5:?766<c92wx?n>50;0x96c22m201?;6:578yv5>l3:1>v3<e7871>;3:?0o=6s|3b394?4|5:o=6i64=37b>13<uz92i7>52z?0a2<3=27?>44k1:p7f4=838p1>k8:e:8973e2=?0q~=6f;296~;4m10?963;2b8g5>{t;j91<7<t=2g;>a><5;?h69;4}r1b4?6=:r78i44;5:?76c<c92wx?n:50;0x96c>2m201?;k:578yv5f93:1>v3<e`871>;3;;0o=6s|3b794?4|5:oj6i64=37f>13<uz9j>7>52z?0ag<3=27??84k1:p7f0=838p1>km:e:8973a2=?0q~=n4;296~;4mm0?963;3c8g5>{t;j21<7<t=2gg>a><5;<:69;4}r1b1?6=:r78ih4;5:?77`<c92wx?n750;0x96cb2m201?8=:578yv5f>3:1>v3<eg871>;3<80o=6s|3bc94?4|5:om6i64=340>13<uz9j;7>52z?0b5<3=27?894k1:p7fd=838p1>h?:e:897032=?0q~=n8;296~;4n80?963;468g5>{t;ji1<7<t=2d2>a><5;<>69;4}r1b=?6=:r78j?4;5:?70d<c92wx?nj50;0x96`52m201?89:578yv21>3:1>8u22`790=2<5;n:696;;<05a?2?<2795l4;859>6d5=<1>01?o7:5:7?84fk3>3863=b087<1=::k?185:4=3`:>1>3348ii7:74:?1g7<30=16>n95496897ee2=2?70<lf;6;0>;5l=0?49522e:90=2<5;no696;;<0f5?2?<279i84;859>6`g=<1>01?kj:5:7?84a;3>3863=f687<1=::oh185:4=352>1>3348<97:74:?13d<30=16>:k5496897>52=2?70<77;6;0>;50k0?495228290=2<5;3?696;;<0:<?2?<2795i4;859>030=l81v>68:18184f=3><70:94;7b?xu3><0;6?;t=34g>1>3348h:7:74:?1b7<30=16>5h5496897g52=2?70<n7;6;0>;5ik0?49522`d90=2<5;h?696;;<0a<?2?<279ni4;859>6f7=<1>01?m::5:7?84di3>3863=cd87<1=::m9185:4=3f4>1>3348on7:74:?1a5<30=16>h:5496897c>2=2?70<jd;6;0>;5n80?49522g490=2<5;lj696;;<044?2?<279;94;859>62>=<1>01?9k:5:7?84?93>3863=8787<1=::1k185:4=3:f>1>33482?7:74:?1=2<30=16>4m5496891022m;0q~=8c;296~;5>m0?;63;6586=>{t;821<7<t=3a5>11<5=;26874}r653?6=:<q6>o>5496897bd2=2?70<89;6;0>;5i90?49522`690=2<5;k2696;;<0b`?2?<279n?4;859>6g0=<1>01?ln:5:7?84en3>3863=c287<1=::j2185:4=3a`>1>3348o<7:74:?1`0<30=16>i75496897bb2=2?70<j2;6;0>;5m?0?49522d`90=2<5;om696;;<0e0?2?<279j54;859>6ce=<1>01?9=:5:7?840>3>3863=7c87<1=::>l185:4=3:0>1>3348347:74:?1<f<30=16>4?5496897?22=2?70<69;6;0>;51l0?49524759`4=z{::96=4={<0a4?2034>=?7;6;|q72=<72;?p1?lm:5:7?84b?3>3863=8587<1=::h;185:4=3c5>1>3348jm7:74:?1e`<30=16>o=5496897d02=2?70<mc;6;0>;5k90?49522b690=2<5;i2696;;<0``?2?<279h?4;859>6a0=<1>01?jn:5:7?84cn3>3863=e287<1=::l2185:4=3g`>1>3348m<7:74:?1b0<30=16>k754968970a2=2?70<83;6;0>;5?>0?495226a90=2<5;2;696;;<0;1?2?<279444;859>6=b=<1>01?7=:5:7?84>>3>3863=9c87<1=::0l185:4=54;>a7<uz9;h7>52z?1fg<3?27?:>4:a:p76?=838p1?k8:558917?2<k0q~==3;296~;5l80?;63;1886e>{t;;o1<7<t=3f`>11<5=;36874}r16e?6=:r79;44;7:?77<<212wx?9:50;0x97`52==019=n:4;8yv53n3:1>v3=6d873>;3;h0>m6s|37;94?4|5;3j6994=56e>0g<uz9=97>52z?1<1<3?27??44:a:p73>=838p1?6i:558912a2<30q~=9c;296~;5i;0?;63;5386=>{t;?k1<7<t=3c3>11<5=>n6874}r15f?6=:r79m<4;7:?70`<2i2wx?;h50;0x97g12==019;>:4c8yv51l3:1>v3=a2873>;3=;0>m6s|37g94?4|5;k?6994=572>0?<uz9<<7>52z?1e2<3?27?984:9:p727=838p1?o7:55891322<k0q~=84;296~;5ik0?;63;5986=>{t;>81<7<t=3c:>11<5=??6874}r147?6=:r79ml4;7:?711<2i2wx?:950;0x97gb2==019;8:4c8yv50=3:1>v3=ab873>;3=10>m6s|36494?4|5;ko6994=574>0?<uz9<m7>52z?1f7<3?27?9l4:9:p72>=838p1?oi:558913e2<30q~=89;296~;5j80?;63;5c86e>{t;>o1<7<t=3`6>11<5=?n68o4}r14f?6=:r79n>4;7:?71d<2i2wx?:j50;0x97d32==019;j:4;8yv5?93:1>v3=b9873>;3>80>56s|36d94?4|5;h=6994=57g>0?<uz93<7>52z?1f2<3?27?9i4:a:p7=2=838p1?ll:55891072<k0q~=72;296~;5j00?;63;6086e>{t;191<7<t=3`b>11<5=<;6874}r1;<?6=:r79nk4;7:?0bd<212wx?5;50;0x97dc2==01>hm:4;8yv5?>3:1>v3=bd873>;4nk0>m6s|39;94?4|5;i;6994=2db>0g<uz93m7>52z?1g4<3?278jh4:9:p6cb=838p1?m;:55896`c2<k0q~=7b;296~;5k;0?;63<fd86e>{t;1i1<7<t=3a0>11<5:lo6874}r134?6=:r79o54;7:?745<212wx>kk50;0x97e22==019>>:4;8yv4an3:1>v3=c6873>;3880>m6s|31694?4|5;ii6994=527>0g<uz9;=7>52z?1g<<3?27?<=4:a:p755=838p1?mn:55891632<30q~=?7;296~;5kl0?;63;0686=>{t;9?1<7<t=3a`>11<5=:86874}r132?6=:r79oi4;7:?746<2i2wx?=o50;0x97b52==019>9:4c8yv5703:1>v3=cg873>;38>0>m6s|31;94?4|5;n;6994=525>0?<uz9;i7>52z?1`0<3?27?<44:9:p75d=838p1?j<:558916f2<30q~=?c;296~;5l=0?;63;0`86e>{t;8;1<7<t=3f;>11<5=:o68o4}r13b?6=:r79h;4;7:?74<<2i2wx?<>50;0x97b02==019>k:4;8yv56:3:1>v3=d8873>;38j0>56s|30194?4|5;nj6994=52`>0g<uz9::7>52z?1``<3?27?<k4:9:p742=838p1?jm:55891772<30q~=>5;296~;5lm0?;63;1186e>{t;8k1<7<t=3g2>11<5=;868o4}r123?6=:r79hk4;7:?74c<2i2wx?<750;0x97c72==019?<:4;8yv56l3:1>v3=e5873>;39?0>56s|30`94?4|5;o96994=531>0?<uz9:o7>52z?1a6<3?27?=?4:a:p74c=838p1?k::55891712<k0q~=>f;296~;5m?0?;63;1486=>{t;;81<7<t=3gb>11<5=;h68o4}r114?6=:r79i54;7:?750<2i2wx???50;0x97c>2==019?l:4;8yv55>3:1>v3=ee873>;39o0>56s|33694?4|5;oi6994=53a>0?<uz9997>52z?1af<3?27?=o4:a:p77?=838p1?h?:558917b2<k0q~==7;296~;5ml0?;63;1g86e>{t;;21<7<t=3ge>11<5=;n6874}r11e?6=:r79j<4;7:?767<212wx??l50;0x97`42==019<=:4c8yv55n3:1>v3=f7873>;3:<0>56s|33a94?4|5;l?6994=502>0?<uz99h7>52z?1b0<3?27?><4:a:p764=838p1?h6:55891432<k0q~=<0;296~;5n>0?;63;2486e>{t;:;1<7<t=3d;>11<5=8?6874}r101?6=:r79jn4;7:?762<212wx?>=50;0x97`f2==019<7:4;8yv54<3:1>v3=fc873>;3:10>m6s|32:94?4|5;=:6994=50a>0g<uz98:7>52z?12c<3?27?>:4:a:p761=838p1?9?:558914e2<30q~=<c;296~;5?=0?;63;2d86=>{t;:k1<7<t=351>11<5=8j6874}r10f?6=:r79;>4;7:?76d<2i2wx?>h50;0x97102==019<k:4c8yv54l3:1>v3=74873>;3:l0>m6s|32g94?4|5;==6994=50g>0?<uz9?>7>52z?13g<3?27??=4:9:p716=838p1?97:55891562<30q~=;1;296~;5?h0?;63;3086e>{t;=91<7<t=35`>11<5=9;68o4}r171?6=:r79;i4;7:?771<212wx?9650;0x97>72==019=<:4c8yv53>3:1>v3=7d873>;3;=0>m6s|35594?4|5;=m6994=510>0?<uz9?n7>52z?1<6<3?27??;4:9:p71?=838p1?6>:55891502<30q~=;a;296~;50;0?;63;3686e>{t;=o1<7<t=3:4>11<5=9o68o4}r17g?6=:r79484;7:?773<2i2wx?9j50;0x97>12==019=k:4;8yv5283:1>v3=89873>;3;j0>56s|34394?4|5;226994=51`>0g<uz9>87>52z?1<f<3?27??k4:9:p704=838p1?6n:55891272<30q~=:3;296~;50k0?;63;4186e>{t;<=1<7<t=3;3>11<5=>868o4}r161?6=:r794i4;7:?77c<2i2wx?8850;0x97>b2==019:<:4;8yv52j3:1>v3=92873>;3<?0>56s|34:94?4|5;3:6994=561>0?<uz9>57>52z?1=7<3?27?8?4:a:p70e=838p1?7;:55891212<k0q~=:d;296~;51<0?;63;4486=>{t;?:1<7<t=3;;>11<5=>268o4}r16a?6=:r795;4;7:?700<2i2wx?8h50;0x97?02==019:6:4;8yv51;3:1>v3=9b873>;3<j0>56s|37394?4|5;326994=56;>0?<uz9=>7>52z?1=g<3?27?854:a:p731=838p1?7i:558912e2<k0q~=94;296~;51m0?;63;4b86e>{t;?<1<7<t=3;f>11<5=>i6874}r62=?6=:r7?=:4:8:?75<<c92wx8<650;0x91702<3019?7:e38yv21<3:1>v3;6386<>;3>=0o=6s|47194?4|5=<96874=540>a7<uz>8m7>52z?77=<2027??l4k1:p06?=838p19=7:4;8915>2m;0q~:;f;296~;3<m0>463;4g8g5>{t<=o1<7<t=56g>0?<5=>n6i?4}r66<?6=:r7?9;4:8:?71=<c92wx88950;0x91312<3019;8:e38yv22:3:1>v3;5186<>;3=;0o=6s|44394?4|5=?;6874=572>a7<uz>>97>52z?716<2027?984k1:p002=838p19;<:4;891332m;0q~::b;296~;3=00>463;5c8g5>{t<<k1<7<t=57:>0?<5=?j6i?4}r66a?6=:r7?9n4:8:?71`<c92wx88j50;0x913d2<3019;k:e38yv5am3:1>v3<fb86<>;4nl0o=6s|3gf94?4|5:lh6874=2dg>a7<uz>==7>52z?71c<2027?:<4k1:p036=838p19;i:4;891072m;0q~=ib;296~;4n00>463<fc8g5>{t;ok1<7<t=2d:>0?<5:lj6i?4}r635?6=:r78jk4:8:?744<c92wx8=>50;0x96`a2<3019>?:e38yv27<3:1>v3;0386<>;38=0o=6s|41194?4|5=:96874=520>a7<uz>;;7>52z?740<2027?<:4k1:p050=838p19>::4;891612m;0q~:?a;296~;3810>463;0`8g5>{t<931<7<t=52;>0?<5=:26i?4}r63`?6=:r7?<o4:8:?74a<c92wx8=m50;0x916e2<3019>l:e38yv2683:1>v3;0d86<>;3990o=6s|41d94?4|5=:n6874=52e>a7<uz>:o7>52z?75d<2027?=n4k1:p04d=838p19?n:4;8917e2m;0q~:>3;296~;3980>463;128g5>{t<881<7<t=532>0?<5=;96i?4}r622?6=:r7?=94:8:?753<c92wx8<;50;0x91732<3019?::e38yv26n3:1>v3;1e86<>;39o0o=6s|40g94?4|5=;o6874=53f>a7<uz>9>7>52z?765<2027?>?4k1:p077=838p19<?:4;891462m;0q~:=5;296~;3::0>463;248g5>{t<;>1<7<t=500>0?<5=8?6i?4}r61<?6=:r7?>;4:8:?76=<c92wx8?950;0x91412<3019<8:e38yv25j3:1>v3;2886<>;3:k0o=6s|43c94?4|5=826874=50b>a7<uz>9i7>52z?76f<2027?>h4k1:p07b=838p19<l:4;8914c2m;0q~:<7;296~;3;<0>463;368g5>{t<:<1<7<t=516>0?<5=9=6i?4}r605?6=:r7?>k4:8:?774<c92wx8>>50;0x914a2<3019=?:e38yv24<3:1>v3;3386<>;3;=0o=6s|42194?4|5=996874=510>a7<uz>8h7>52z?77g<2027??i4k1:p06e=838p19=m:4;8915d2m;0q~:;0;296~;3;l0>463;418g5>{t<:l1<7<t=51f>0?<5=9m6i?4}r677?6=:r7?8<4:8:?706<c92wx89<50;0x91262<3019:=:e38yv23>3:1>v3;4586<>;3<?0o=6s|45794?4|5=>?6874=566>a7<uz>?57>52z?702<2027?844k1:p01>=838p19:8:4;8912?2m;0q~:;c;296~;3<h0>463;4b8g5>{t<=h1<7<t=56b>0?<5=>i6i?4}r65=?6=:<q6>;853d9>633=;l16>;:53d9>635=;l16>;<53d9>637=;l16>8h53d9>60c=;l16>8j53d9>60e=;l16>8l53d9>60g=;l16>8753d9>60>=;l16>8953d9>600=;l16>8:53d9>605=;l16>8<53d9>607=;l16>8>53d9>61`=;l16>9k53d9>61b=;l16>9m53d9>61d=;l16>;m53d9>63d=;l16>;o53d9>63?=;l16>;653d9>631=;l16>;>53d9>603=;l16>9o53d9>61?=;l16=485d09~wd1=838p1<l=:4;894d62?:0q~?m3;296~;6j<0>563>b08g5>{ti?0;6?u220g91<=::8i1:=5rs303>5<5s48:j7;6;<02g?b63ty:mh4?:3y>5=1==116=495619~w4c32909w0?j4;f2?87b;3?j7p}>e483>7}:9l?1h<521d191<=z{8o=6=4={<3f2?b634;n?7;7;|q2a5<72;q6=h>5d09>5`4==11v<k>:18187b93n:70?j2;7:?xu6ik0;6?u21``9`4=:9hk19l5rs0c`>5<5s4;jo7j>;<3be?3>3ty:h:4?:3y>5db==116=i95d99~w4gc2909w0?nd;f2?87fi3?37p}>a483>7}:9h?1h<521`491d=z{8k<6=4={<3b3?b634;j57;7;|q2e=<72;q6=l65d09>5d?==01vll50;4x94>>2<201<6l:4:894>b2<201<6i:4:894?52<201<6n:e38yv0a2909w0?60;f2?87?n3?i7p}na;297~;6ml0o=63=1086f>;6mm0>n6s|a983>7}:9?h1955219c925=z{j;1<7<t=04a>a7<583?68l4}ra6>5<5s4;=o7j>;<3:6?3e3ty:m;4?:3y>5d0=l816=l755`9~w4bb2909w0?j2;7b?87cm3n:7p}81;296~;6m;0>n63>e2854>{t0>0;6?u21`;91g=:9hk1:=5rs8;94?4|58nn68l4=0fe>36<uty?hk4?:3y]0gd<5:k18ol4$55e>f7<uz>oh7>52z\7fd=:;h0?nl5+46d9g7=z{=nh6=4={_6a=>;4i3>i56*;7g8`1>{t<mh1<7<t^5`;?85f2=h37):8f;a:?xu3lh0;6?uQ4c5896g=<k=0(99i:638yv2c13:1>vP;b79>7d<3j?1/8:h57b9~w1b02909wS:m4:?0e?2e<2.?;k477:p0a0=838pR9l<;<1b>1d43-><j77=;|q7`0<72;qU8o<4=2c90g4<,==m6474}r6g0?6=:rT?n<523`87f4=#<>l1m?5rs5f0>5<5sW>i<63<a;6a4>"3?o0j:6s|4e094?4|V=km70=n:5ce?!20n3k<7p};d083>7}Y<ho01>o54`g8 11a2h20q~:k0;296~X3im16?l4;ae9'02`=i01v9mi:181[2fk278m7:nc:&73c<fj2wx8nk50;0xZ1ge349j69om;%64b?gd3ty?on4?:3y]0d?<5:k18l74$55e>db<uz>hn7>52z\7e==:;h0?m55+46d9e`=z{=ij6=4={_6b3>;4i3>j;6*;7g8bb>{t<j31<7<t^5c5?85f2=k=7):8f;`3?xu3k10;6?uQ4`7896g=<h?0(99i:c38yv2d?3:1>vP;a59>7d<3i=1/8:h5b39~w1e12909wS:n3:?0e?2f;2.?;k4m3:p0f3=838pR9o=;<1b>1g53-><j7l;;|q7g1<72;qU8l?4=2c90d7<,==m6o;4}r6`7?6=:rT?m=523`87e5=#<>l1n;5rs5g5>5<5sW>h=63<a;6`5>"3?o0i;6s|4d794?4|V=i;70=n:5a3?!20n3h37p};e583>7}Y<kl01>o54cd8 11a2k30q~:j3;296~X3jl16?l4;bd9'02`=jh1v9k=:181[2el278m7:md:&73c<ej2wx8h?50;0xZ1dd349j69ll;%64b?dd3ty?i=4?:3y]0g3<5:k18o;4$55e>gb<uz>o47>52z\7ed=:;h0?ml5+46d9f`=z{=io6=4={_6:b>;4i3>2j6*;7g8ab>{t<j81<7<t^5;f?85f2=3n7):8f;a3?xu2>>0;6?uQ575896g==?=0(99i:b18yv30?3:1>vP:769>7d<2?>1/8:h5c59~w01>2909wS;89:?0e?3012.?;k4l6:p1=6=838pR86?;<1b>0>73-><j7m8;|q6=5<72;qU94>4=2c91<6<,==m6n64}r71<?6=:rT><9523`8641=#<>l1ol5rs405>5<5sW?;?63<a;737>"3?o0hn6s|53794?4|V<:970=n:421?!20n3ih7p}:2583>7}Y=9;01>o55138 11a2jn0q~;=3;296~X28916?l4:019'02`=kl1v8<=:181[2an278m7:if:&73c<0:2wx9?>50;0xZ1`c349j69hk;%64b?143ty>=k4?:3y]0ce<5:k18km4$55e>22<uz?:i7>52z\7bg=:;h0?jo5+46d930=z{<;o6=4={_6ee>;4i3>mm6*;7g842>{t=8i1<7<t^5d:?85f2=l27):8f;54?xu29k0;6?uQ4g:896g=<o20(99i:6:8yv36i3:1>vP;f69>7d<3n>1/8:h5789~w07>2909wS:i6:?0e?2a>2.?;k48a:p14>=838pR9h:;<1b>1`23-><j79m;|q652<72;qU8k:4=2c90c2<,==m6:j4}r721?6=:rT?j?523`87b7=#<>l1;h5rs437>5<5sW>m=63<a;6e5>"3?o0<j6s|50194?4|V=l;70=n:5d3?!20n32;7p}:1383>7}Y<ll01>o54dd8 11a21;0q~;>1;296~X3ml16?l4;ed9'02`=0;1v8??:181[2bl278m7:jd:&73c<?;2wx9=h50;0xZ1cd349j69kl;%64b?>33ty><h4?:3y]0`d<5:k18hl4$55e>=3<uz?;h7>52z\7ad=:;h0?il5+46d9<3=z{<:h6=4={_6f=>;4i3>n56*;7g8;<>{t=;l1<7<t^42b?85f2<:j7):8f;::?xu2:l0;6?uQ51;896g==930(99i:9c8yv35l3:1>vP:099>7d<2811/8:h58c9~w04d2909wS;?7:?0e?37?2.?;k47c:p17d=838pR8>9;<1b>0613-><j76k;|q66d<72;qU9=;4=2c9153<,==m65k4}r71=?6=:rT?jh523`87b`=#<>l14k5rs402>5<5sW>m?63<a;6e7>"3?o02<6s|50494?4|V=o370=n:5g;?!20n33:7p}:0c83>7}Y<l=01>o54d58 11a2090q~;<1;296~X2;816?l4:309'02`=1=1v8=8:181[34?278m7;<7:&73c<>=2wx9:850;0xZ00b349j688j;%64b??13ty>;94?:3y]13b<5:k19;j4$55e><1<uz?<?7>52z\62f=:;h0>:n5+46d9===z{<=96=4={_75f>;4i3?=n6*;7g8:e>{t=>;1<7<t^44b?85f2<<j7):8f;;a?xu2?90;6?uQ57;896g==?30(99i:8a8yv31n3:1>vP:699>7d<2>11/8:h59e9~w0>a2909wS;77:?0e?3??2.?;k46e:p1=b=838pR869;<1b>0>13-><j77i;|q6<f<72;qU95;4=2c91=3<,==m6l>4}r7;f?6=:rT>49523`86<1=#<>l1m<5rs4:b>5<5sW?3?63<a;7;7>"3?o0j?6s|59;94?4|V<2970=n:4:1?!20n3k?7p}:8983>7}Y=1;01>o55938 11a2h?0qp`>3e394?4|@=2;7p`>3e094?4|@=2;7p`>3e194?4|@=2;7p`>3e694?4|@=2;7p`>3e794?4|@=2;7p`>3e494?4|@=2;7p`>3e594?4|@=2;7p`>3e:94?4|@=2;7p`>3e;94?4|@=2;7p`>3ec94?4|@=2;7p`>3e`94?4|@=2;7p`>3ea94?4|@=2;7p`>3ef94?4|@=2;7p`>3eg94?4|@=2;7p`>3ed94?4|@=2;7p`>3d294?4|@=2;7p`>3d394?4|@=2;7p`>3d094?4|@=2;7p`>3d194?4|@=2;7p`>3d694?4|@=2;7p`>3d794?4|@=2;7p`>3d494?4|@=2;7p`>3d594?4|@=2;7p`>3d:94?4|@=2;7p`>3d;94?4|@=2;7p`>3dc94?4|@=2;7p`>3d`94?4|@=2;7p`>3da94?4|@=2;7p`>3df94?4|@=2;7p`>3dg94?4|@=2;7p`>3dd94?4|@=2;7p`>3g294?4|@=2;7p`>3g394?4|@=2;7p`>3g094?4|@=2;7p`>3g194?4|@=2;7p`>3g694?4|@=2;7p`>3g794?4|@=2;7p`>3g494?4|@=2;7p`>3g594?4|@=2;7p`>3g:94?4|@=2;7p`>3g;94?4|@=2;7p`>3gc94?4|@=2;7p`>3g`94?4|@=2;7p`>3ga94?4|@=2;7p`>3gf94?4|@=2;7p`>3gg94?4|@=2;7p`>3gd94?4|@=2;7p`>41294?4|@=2;7p`>41394?4|@=2;7p`>41094?4|@=2;7p`>41194?4|@=2;7p`>41694?4|@=2;7p`>41794?4|@=2;7p`>41494?4|@=2;7p`>41594?4|@=2;7p`>41:94?4|@=2;7p`>41;94?4|@=2;7p`>41c94?4|@=2;7p`>41`94?4|@=2;7p`>41a94?4|@=2;7p`>41f94?4|@=2;7p`>41g94?4|@=2;7p`>41d94?4|@=2;7p`>40294?4|@=2;7p`>40394?4|@=2;7p`>40094?4|@=2;7p`>40194?4|@=2;7p`>40694?4|@=2;7p`>40794?4|@=2;7p`>40494?4|@=2;7p`>40594?4|@=2;7p`>40:94?4|@=2;7p`>40;94?4|@=2;7p`>40c94?4|@=2;7p`>40`94?4|@=2;7p`>40a94?4|@=2;7p`>40f94?4|@=2;7p`>40g94?4|@=2;7p`>40d94?4|@=2;7p`>43294?4|@=2;7p`>43394?4|@=2;7p`>43094?4|@=2;7p`>43194?4|@=2;7p`>43694?4|@=2;7p`>43794?4|@=2;7p`>43494?4|@=2;7p`>43594?4|@=2;7p`>43:94?4|@=2;7p`>43;94?4|@=2;7p`>43c94?4|@=2;7p`>43`94?4|@=2;7p`>43a94?4|@=2;7p`>43f94?4|@=2;7p`>16194?7|@=2;7p`>1e294?7|@=2;7p`>1e394?7|@=2;7p`>1e094?7|@=2;7p`>1e194?7|@=2;7p`>1e694?7|@=2;7p`>1e794?7|@=2;7p`>1e494?7|@=2;7p`>1e594?7|@=2;7p`>1e:94?7|@=2;7p`>1e;94?7|@=2;7p`>1ec94?7|@=2;7p`>1e`94?7|@=2;7p`>1ea94?7|@=2;7p`>1ef94?7|@=2;7p`>1eg94?7|@=2;7p`>1ed94?7|@=2;7p`>1d294?7|@=2;7p`>1d394?7|@=2;7p`>1d094?7|@=2;7p`>1d194?7|@=2;7p`>1d694?7|@=2;7p`>1d794?7|@=2;7p`>1d494?7|@=2;7p`>1d594?7|@=2;7p`>1d:94?7|@=2;7p`>1d;94?7|@=2;7p`>1dc94?7|@=2;7p`>1d`94?7|@=2;7p`>1da94?7|@=2;7p`>1df94?7|@=2;7p`>1dg94?7|@=2;7p`>1dd94?7|@=2;7p`>1g294?7|@=2;7p`>1g394?7|@=2;7p`>1g094?7|@=2;7p`>1g194?7|@=2;7p`>1g694?7|@=2;7p`>1g794?7|@=2;7p`>1g494?7|@=2;7p`>1g594?7|@=2;7p`>1g:94?7|@=2;7p`>1g;94?7|@=2;7p`>1gc94?7|@=2;7p`>1g`94?7|@=2;7p`>1ga94?7|@=2;7p`>1gf94?7|@=2;7p`>1gg94?7|@=2;7p`>1gd94?7|@=2;7p`>21294?7|@=2;7p`>21394?7|@=2;7p`>21094?7|@=2;7p`>21194?7|@=2;7p`>21694?7|@=2;7p`>21794?7|@=2;7p`>21494?7|@=2;7p`>21594?7|@=2;7p`>21:94?7|@=2;7p`>21;94?7|@=2;7p`>21c94?7|@=2;7p`>21`94?7|@=2;7p`>21a94?7|@=2;7p`>21f94?7|@=2;7p`>21g94?7|@=2;7p`>21d94?7|@=2;7p`>20294?7|@=2;7p`>20394?7|@=2;7p`>20094?7|@=2;7p`>20194?7|@=2;7p`>20694?7|@=2;7p`>20794?7|@=2;7p`>20494?7|@=2;7p`>20594?7|@=2;7p`>20:94?7|@=2;7p`>20;94?7|@=2;7p`>20c94?7|@=2;7p`>20`94?7|@=2;7p`>20a94?7|@=2;7p`>20f94?7|@=2;7p`>20g94?7|@=2;7p`>20d94?7|@=2;7p`>23294?7|@=2;7p`>23394?7|@=2;7p`>23094?7|@=2;7p`>23194?7|@=2;7p`>23694?7|@=2;7p`>23794?7|@=2;7p`>23494?7|@=2;7p`>23594?7|@=2;7p`>23:94?7|@=2;7p`>23;94?7|@=2;7p`>23c94?7|@=2;7p`>23`94?7|@=2;7p`>23a94?7|@=2;7p`>23f94?7|@=2;7p`>23g94?7|@=2;7p`>23d94?7|@=2;7p`>22294?7|@=2;7p`>22394?7|@=2;7p`>22094?7|@=2;7p`>22194?7|@=2;7p`>22694?7|@=2;7p`>22794?7|@=2;7p`>22494?7|@=2;7p`>22594?7|@=2;7p`>22:94?7|@=2;7p`>22;94?7|@=2;7p`>22c94?7|@=2;7p`>22`94?7|@=2;7p`>22a94?7|@=2;7p`>22f94?7|@=2;7p`>22g94?7|@=2;7p`>22d94?7|@=2;7p`>25294?7|@=2;7p`>25394?7|@=2;7p`>25094?7|@=2;7p`>25194?7|@=2;7p`>25694?7|@=2;7p`>25794?7|@=2;7p`>25494?7|@=2;7p`>25594?7|@=2;7p`>25:94?7|@=2;7p`>25;94?7|@=2;7p`>25c94?7|@=2;7p`>25`94?7|@=2;7p`>25a94?7|@=2;7p`>25f94?7|@=2;7p`>25g94?7|@=2;7p`>25d94?7|@=2;7p`>24294?7|@=2;7p`>24394?7|@=2;7p`>24094?7|@=2;7p`>24194?7|@=2;7p`>24694?7|@=2;7p`>24794?7|@=2;7p`>24494?7|@=2;7p`>24594?7|@=2;7p`>24:94?7|@=2;7p`>24;94?7|@=2;7p`>24c94?7|@=2;7p`>24`94?7|@=2;7p`>24a94?7|@=2;7p`>24f94?7|@=2;7p`>24g94?7|@=2;7p`>24d94?7|@=2;7p`>27294?7|@=2;7p`>27394?7|@=2;7p`>27094?7|@=2;7p`>27194?7|@=2;7p`>27694?7|@=2;7p`>27794?7|@=2;7p`>27494?7|@=2;7p`>27594?7|@=2;7p`>27:94?7|@=2;7p`>27;94?7|@=2;7p`>27c94?7|@=2;7p`>27`94?7|@=2;7p`>27a94?7|@=2;7p`>27f94?7|@=2;7p`>27g94?7|@=2;7p`>27d94?7|@=2;7p`>26294?7|@=2;7p`>26394?7|@=2;7p`>26094?7|@=2;7p`>26194?7|@=2;7p`>26694?7|@=2;7p`>26794?7|@=2;7p`>26494?7|@=2;7p`>26594?7|@=2;7p`>26:94?7|@=2;7p`>26;94?7|@=2;7p`>26c94?7|@=2;7p`>26`94?7|@=2;7p`>26a94?7|@=2;7p`>26f94?7|@=2;7p`>26g94?7|@=2;7p`>26d94?7|@=2;7p`>29294?7|@=2;7p`>29394?7|@=2;7p`>29094?7|@=2;7p`>29194?7|@=2;7p`>29694?7|@=2;7p`>29794?7|@=2;7p`>29494?7|@=2;7p`>29594?7|@=2;7p`>29:94?7|@=2;7p`>29;94?7|@=2;7p`>29c94?7|@=2;7p`>29`94?7|@=2;7p`>29a94?7|@=2;7p`>29f94?7|@=2;7p`>29g94?7|@=2;7p`>29d94?7|@=2;7p`>28294?7|@=2;7p`>28394?7|@=2;7p`>28094?7|@=2;7p`>28194?7|@=2;7p`>28694?7|@=2;7p`>28794?7|@=2;7p`>28494?7|@=2;7p`>28594?7|@=2;7p`>28:94?7|@=2;7p`>28;94?7|@=2;7p`>28c94?7|@=2;7p`>28`94?7|@=2;7p`>28a94?7|@=2;7p`>28f94?7|@=2;7p`>28g94?7|@=2;7p`>28d94?7|@=2;7p`>2`294?7|@=2;7p`>2`394?7|@=2;7p`>2`094?7|@=2;7p`>2`194?7|@=2;7p`>2`694?7|@=2;7p`>2`794?7|@=2;7p`>2`494?7|@=2;7p`>2`594?7|@=2;7p`>2`:94?7|@=2;7p`>2`;94?7|@=2;7p`>2`c94?7|@=2;7p`>2``94?7|@=2;7p`>2`a94?7|@=2;7p`>2`f94?7|@=2;7p`>2`g94?7|@=2;7p`>2`d94?7|@=2;7p`>2c294?7|@=2;7p`>2c394?7|@=2;7p`>2c094?7|@=2;7p`>2c194?7|@=2;7p`>2c694?7|@=2;7p`>2c794?7|@=2;7p`>2c494?7|@=2;7p`>2c594?7|@=2;7p`>2c:94?7|@=2;7p`>2c;94?7|@=2;7p`>2cc94?7|@=2;7p`>2c`94?7|@=2;7p`>2ca94?7|@=2;7p`>2cf94?7|@=2;7p`>2cg94?7|@=2;7p`>2cd94?7|@=2;7p`>2b294?7|@=2;7p`>2b394?7|@=2;7p`>2b094?7|@=2;7p`>2b194?7|@=2;7p`>2b694?7|@=2;7p`>2b794?7|@=2;7p`>2b494?7|@=2;7p`>2b594?7|@=2;7p`>2b:94?7|@=2;7p`>2b;94?7|@=2;7p`>2bc94?7|@=2;7p`>2b`94?7|@=2;7p`>2ba94?7|@=2;7p`>2bf94?7|@=2;7p`>2bg94?7|@=2;7p`>2bd94?7|@=2;7p`>2e294?7|@=2;7p`>2e394?7|@=2;7p`>2e094?7|@=2;7p`>2e194?7|@=2;7p`>2e694?7|@=2;7p`>2e794?7|@=2;7p`>2e494?7|@=2;7p`>2e594?7|@=2;7p`>2e:94?7|@=2;7p`>2e;94?7|@=2;7p`>2ec94?7|@=2;7p`>2e`94?7|@=2;7p`>2ea94?7|@=2;7p`>2ef94?7|@=2;7p`>2eg94?7|@=2;7p`>2ed94?7|@=2;7p`>2d294?7|@=2;7p`>2d394?7|@=2;7p`>2d094?7|@=2;7p`>2d194?7|@=2;7p`>2d694?7|@=2;7p`>2d794?7|@=2;7p`>2d494?7|@=2;7p`>2d594?7|@=2;7p`>2d:94?7|@=2;7p`>2d;94?7|@=2;7p`>2dc94?7|@=2;7p`>2d`94?7|@=2;7p`>2da94?7|@=2;7p`>2df94?7|@=2;7p`>2dg94?7|@=2;7p`>2dd94?7|@=2;7p`>2g294?7|@=2;7p`>2g394?7|@=2;7p`>2g094?7|@=2;7p`>2g194?7|@=2;7p`>2g694?7|@=2;7p`>2g794?7|@=2;7p`>2g494?7|@=2;7p`>2g594?7|@=2;7p`>2g:94?7|@=2;7p`>2g;94?7|@=2;7p`>2gc94?7|@=2;7p`>2g`94?7|@=2;7p`>2ga94?7|@=2;7p`>2gf94?7|@=2;7p`>2gg94?7|@=2;7p`>2gd94?7|@=2;7p`>31294?7|@=2;7p`>31394?7|@=2;7p`>31094?7|@=2;7p`>31194?7|@=2;7p`>31694?7|@=2;7p`>31794?7|@=2;7p`>31494?7|@=2;7p`>31594?7|@=2;7p`>31:94?7|@=2;7p`>31;94?7|@=2;7p`>31c94?7|@=2;7p`>31`94?7|@=2;7p`>31a94?7|@=2;7p`>31f94?7|@=2;7p`>31g94?7|@=2;7p`>31d94?7|@=2;7p`>30294?7|@=2;7p`>30394?7|@=2;7p`>30094?7|@=2;7p`>30194?7|@=2;7p`>30694?7|@=2;7p`>30794?7|@=2;7p`>30494?7|@=2;7p`>30594?7|@=2;7p`>30:94?7|@=2;7p`>30;94?7|@=2;7p`>30c94?7|@=2;7p`>30`94?7|@=2;7p`>30a94?7|@=2;7p`>30f94?7|@=2;7p`>30g94?7|@=2;7p`>30d94?7|@=2;7p`>33294?7|@=2;7p`>33394?7|@=2;7p`>33094?7|@=2;7p`>33194?7|@=2;7p`>33694?7|@=2;7p`>33794?7|@=2;7p`>33494?7|@=2;7p`>33594?7|@=2;7p`>33:94?7|@=2;7p`>33;94?7|@=2;7p`>33c94?7|@=2;7p`>33`94?7|@=2;7p`>33a94?7|@=2;7p`>33f94?7|@=2;7p`>33g94?7|@=2;7p`>33d94?7|@=2;7p`>32294?7|@=2;7p`>32394?7|@=2;7p`>32094?7|@=2;7p`>32194?7|@=2;7p`>32694?7|@=2;7p`>32794?7|@=2;7p`>32494?7|@=2;7p`>32594?7|@=2;7p`>32:94?7|@=2;7p`>32;94?7|@=2;7p`>32c94?7|@=2;7p`>32`94?7|@=2;7p`>32a94?7|@=2;7p`>32f94?7|@=2;7p`>32g94?7|@=2;7p`>32d94?7|@=2;7p`>35294?7|@=2;7p`>35394?7|@=2;7p`>35094?7|@=2;7p`>35194?7|@=2;7p`>35694?7|@=2;7p`>35794?7|@=2;7p`>35494?7|@=2;7p`>35594?7|@=2;7p`>35:94?7|@=2;7p`>35;94?7|@=2;7p`>35c94?7|@=2;7p`>35`94?7|@=2;7p`>35a94?7|@=2;7p`>35f94?7|@=2;7p`>35g94?7|@=2;7p`>35d94?7|@=2;7p`>34294?7|@=2;7p`>34394?7|@=2;7p`>34094?7|@=2;7p`>34194?7|@=2;7p`>34694?7|@=2;7p`>34794?7|@=2;7p`>34494?7|@=2;7p`>34594?7|@=2;7p`>34:94?7|@=2;7p`>34;94?7|@=2;7p`>34c94?7|@=2;7p`>34`94?7|@=2;7p`>34a94?7|@=2;7p`>34f94?7|@=2;7p`>34g94?7|@=2;7p`>34d94?7|@=2;7p`>37294?7|@=2;7p`>37394?7|@=2;7p`>37094?7|@=2;7p`>37194?7|@=2;7p`>37694?7|@=2;7p`>37794?7|@=2;7p`>37494?7|@=2;7p`>37594?7|@=2;7p`>37:94?7|@=2;7p`>37;94?7|@=2;7p`>37c94?7|@=2;7p`>37`94?7|@=2;7p`>37a94?7|@=2;7p`>37f94?7|@=2;7p`>37g94?7|@=2;7p`>37d94?7|@=2;7p`>36294?7|@=2;7p`>36394?7|@=2;7p`>36094?7|@=2;7p`>36194?7|@=2;7p`>36694?7|@=2;7p`>36794?7|@=2;7p`>36494?7|@=2;7p`>36594?7|@=2;7p`>36:94?7|@=2;7p`>36;94?7|@=2;7p`>36c94?7|@=2;7p`>36`94?7|@=2;7p`>36a94?7|@=2;7p`>36f94?7|@=2;7p`>36g94?7|@=2;7p`>36d94?7|@=2;7p`>39294?7|@=2;7p`>39394?7|@=2;7p`>39094?7|@=2;7p`>39194?7|@=2;7p`>39694?7|@=2;7p`>39794?7|@=2;7p`>39494?7|@=2;7p`>39594?7|@=2;7p`>39:94?7|@=2;7p`>39;94?7|@=2;7p`>39c94?7|@=2;7p`>39`94?7|@=2;7p`>39a94?7|@=2;7p`>39f94?7|@=2;7p`>39g94?7|@=2;7p`>39d94?7|@=2;7p`>38294?7|@=2;7p`>38394?7|@=2;7p`>38094?7|@=2;7p`>38194?7|@=2;7p`>38694?7|@=2;7p`>38794?7|@=2;7p`>38494?7|@=2;7p`>38594?7|@=2;7p`>38:94?7|@=2;7p`>38;94?7|@=2;7p`>38c94?7|@=2;7p`>38`94?7|@=2;7p`>38a94?7|@=2;7p`>38f94?7|@=2;7p`>38g94?7|@=2;7p`>38d94?7|@=2;7p`>3`294?7|@=2;7p`>3`394?7|@=2;7p`>3`094?7|@=2;7p`>3`194?7|@=2;7p`>3`694?7|@=2;7p`>3`794?7|@=2;7p`>3`494?7|@=2;7p`>3`594?7|@=2;7p`>3`:94?7|@=2;7p`>3`;94?7|@=2;7p`>3`c94?7|@=2;7p`>3``94?7|@=2;7p`>3`a94?7|@=2;7p`>3`f94?7|@=2;7p`>3`g94?7|@=2;7p`>3`d94?7|@=2;7p`>3c294?7|@=2;7p`>3c394?7|@=2;7p`>3c094?7|@=2;7p`>3c194?7|@=2;7p`>3c694?7|@=2;7p`>3c794?7|@=2;7p`>3c494?7|@=2;7p`>3c594?7|@=2;7p`>3c:94?7|@=2;7p`>3c;94?7|@=2;7p`>3cc94?7|@=2;7p`>3c`94?7|@=2;7p`>3ca94?7|@=2;7p`>3cf94?7|@=2;7p`>3cg94?7|@=2;7p`>3cd94?7|@=2;7p`>3b294?7|@=2;7p`>3b394?7|@=2;7p`>3b094?7|@=2;7p`>3b194?7|@=2;7p`>3b694?7|@=2;7p`>3b794?7|@=2;7p`>3b494?7|@=2;7p`>3b594?7|@=2;7p`>3b:94?7|@=2;7p`>3b;94?7|@=2;7p`>3bc94?7|@=2;7p`>3b`94?7|@=2;7p`>3ba94?7|@=2;7p`>3bf94?7|@=2;7p`>3bg94?7|@=2;7p`>3bd94?7|@=2;7p`>3e294?7|@=2;7psr}AB@40?l3;?hkh977CDG}7uIJ[wpNO
\ No newline at end of file diff --git a/coregen/fifo_xlnx_64x36_2clk.v b/coregen/fifo_xlnx_64x36_2clk.v new file mode 100644 index 000000000..e84237689 --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk.v @@ -0,0 +1,169 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file fifo_xlnx_64x36_2clk.v when simulating +// the core, fifo_xlnx_64x36_2clk. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module fifo_xlnx_64x36_2clk( + din, + rd_clk, + rd_en, + rst, + wr_clk, + wr_en, + dout, + empty, + full, + rd_data_count, + wr_data_count); + + +input [35 : 0] din; +input rd_clk; +input rd_en; +input rst; +input wr_clk; +input wr_en; +output [35 : 0] dout; +output empty; +output full; +output [6 : 0] rd_data_count; +output [6 : 0] wr_data_count; + +// synthesis translate_off + + FIFO_GENERATOR_V4_3 #( + .C_COMMON_CLOCK(0), + .C_COUNT_TYPE(0), + .C_DATA_COUNT_WIDTH(7), + .C_DEFAULT_VALUE("BlankString"), + .C_DIN_WIDTH(36), + .C_DOUT_RST_VAL("0"), + .C_DOUT_WIDTH(36), + .C_ENABLE_RLOCS(0), + .C_FAMILY("spartan3"), + .C_FULL_FLAGS_RST_VAL(1), + .C_HAS_ALMOST_EMPTY(0), + .C_HAS_ALMOST_FULL(0), + .C_HAS_BACKUP(0), + .C_HAS_DATA_COUNT(0), + .C_HAS_INT_CLK(0), + .C_HAS_MEMINIT_FILE(0), + .C_HAS_OVERFLOW(0), + .C_HAS_RD_DATA_COUNT(1), + .C_HAS_RD_RST(0), + .C_HAS_RST(1), + .C_HAS_SRST(0), + .C_HAS_UNDERFLOW(0), + .C_HAS_VALID(0), + .C_HAS_WR_ACK(0), + .C_HAS_WR_DATA_COUNT(1), + .C_HAS_WR_RST(0), + .C_IMPLEMENTATION_TYPE(2), + .C_INIT_WR_PNTR_VAL(0), + .C_MEMORY_TYPE(2), + .C_MIF_FILE_NAME("BlankString"), + .C_MSGON_VAL(1), + .C_OPTIMIZATION_MODE(0), + .C_OVERFLOW_LOW(0), + .C_PRELOAD_LATENCY(0), + .C_PRELOAD_REGS(1), + .C_PRIM_FIFO_TYPE("512x36"), + .C_PROG_EMPTY_THRESH_ASSERT_VAL(4), + .C_PROG_EMPTY_THRESH_NEGATE_VAL(5), + .C_PROG_EMPTY_TYPE(0), + .C_PROG_FULL_THRESH_ASSERT_VAL(63), + .C_PROG_FULL_THRESH_NEGATE_VAL(62), + .C_PROG_FULL_TYPE(0), + .C_RD_DATA_COUNT_WIDTH(7), + .C_RD_DEPTH(64), + .C_RD_FREQ(1), + .C_RD_PNTR_WIDTH(6), + .C_UNDERFLOW_LOW(0), + .C_USE_DOUT_RST(1), + .C_USE_ECC(0), + .C_USE_EMBEDDED_REG(0), + .C_USE_FIFO16_FLAGS(0), + .C_USE_FWFT_DATA_COUNT(1), + .C_VALID_LOW(0), + .C_WR_ACK_LOW(0), + .C_WR_DATA_COUNT_WIDTH(7), + .C_WR_DEPTH(64), + .C_WR_FREQ(1), + .C_WR_PNTR_WIDTH(6), + .C_WR_RESPONSE_LATENCY(1)) + inst ( + .DIN(din), + .RD_CLK(rd_clk), + .RD_EN(rd_en), + .RST(rst), + .WR_CLK(wr_clk), + .WR_EN(wr_en), + .DOUT(dout), + .EMPTY(empty), + .FULL(full), + .RD_DATA_COUNT(rd_data_count), + .WR_DATA_COUNT(wr_data_count), + .CLK(), + .INT_CLK(), + .BACKUP(), + .BACKUP_MARKER(), + .PROG_EMPTY_THRESH(), + .PROG_EMPTY_THRESH_ASSERT(), + .PROG_EMPTY_THRESH_NEGATE(), + .PROG_FULL_THRESH(), + .PROG_FULL_THRESH_ASSERT(), + .PROG_FULL_THRESH_NEGATE(), + .RD_RST(), + .SRST(), + .WR_RST(), + .ALMOST_EMPTY(), + .ALMOST_FULL(), + .DATA_COUNT(), + .OVERFLOW(), + .PROG_EMPTY(), + .PROG_FULL(), + .VALID(), + .UNDERFLOW(), + .WR_ACK(), + .SBITERR(), + .DBITERR()); + + +// synthesis translate_on + +endmodule + diff --git a/coregen/fifo_xlnx_64x36_2clk.veo b/coregen/fifo_xlnx_64x36_2clk.veo new file mode 100644 index 000000000..9c761370c --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk.veo @@ -0,0 +1,53 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_64x36_2clk YourInstanceName ( + .din(din), // Bus [35 : 0] + .rd_clk(rd_clk), + .rd_en(rd_en), + .rst(rst), + .wr_clk(wr_clk), + .wr_en(wr_en), + .dout(dout), // Bus [35 : 0] + .empty(empty), + .full(full), + .rd_data_count(rd_data_count), // Bus [6 : 0] + .wr_data_count(wr_data_count)); // Bus [6 : 0] + +// INST_TAG_END ------ End INSTANTIATION Template --------- + +// You must compile the wrapper file fifo_xlnx_64x36_2clk.v when simulating +// the core, fifo_xlnx_64x36_2clk. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + diff --git a/coregen/fifo_xlnx_64x36_2clk.xco b/coregen/fifo_xlnx_64x36_2clk.xco new file mode 100644 index 000000000..c6e9aae27 --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk.xco @@ -0,0 +1,82 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Thu Sep 3 17:22:56 2009 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = False +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = True +SET vhdlsim = False +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 4.3 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=false +CSET component_name=fifo_xlnx_64x36_2clk +CSET data_count=false +CSET data_count_width=7 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET fifo_implementation=Independent_Clocks_Distributed_RAM +CSET full_flags_reset_value=1 +CSET full_threshold_assert_value=63 +CSET full_threshold_negate_value=62 +CSET input_data_width=36 +CSET input_depth=64 +CSET output_data_width=36 +CSET output_depth=64 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=No_Programmable_Full_Threshold +CSET read_clock_frequency=1 +CSET read_data_count=true +CSET read_data_count_width=7 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=true +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=true +CSET write_data_count_width=7 +# END Parameters +GENERATE +# CRC: 2bb925ae + diff --git a/coregen/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.lso b/coregen/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.lso new file mode 100644 index 000000000..f1a6f7899 --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.lso @@ -0,0 +1,3 @@ +blkmemdp_v6_2 +blk_mem_gen_v2_6 +fifo_generator_v4_3 diff --git a/coregen/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/coregen/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt new file mode 100644 index 000000000..a23402f56 --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<document OS="lin64" product="ISE" version="10.1.03"> + + <!--The data in this file is primarily intended for consumption by Xilinx tools. + The structure and the elements are likely to change over the next few releases. + This means code written to parse this file will need to be revisited each subsequent release.--> + + <application stringID="Xst" timeStamp="Thu Sep 3 10:22:37 2009"> + <section stringID="XST_HDL_SYNTHESIS_REPORT"> + <item dataType="int" stringID="XST_RAMS" value="1"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"></item> + <item dataType="int" stringID="XST_COUNTERS" value="2"></item> + <item dataType="int" stringID="XST_REGISTERS" value="32"> + <item dataType="int" stringID="XST_1BIT_REGISTER" value="15"/> + <item dataType="int" stringID="XST_2BIT_REGISTER" value="1"/> + <item dataType="int" stringID="XST_3BIT_REGISTER" value="1"/> + <item dataType="int" stringID="XST_36BIT_REGISTER" value="2"/> + <item dataType="int" stringID="XST_6BIT_REGISTER" value="11"/> + </item> + <item dataType="int" stringID="XST_XORS" value="44"> + <item dataType="int" stringID="XST_1BIT_XOR2" value="44"/> + </item> + </section> + <section stringID="XST_ADVANCED_HDL_SYNTHESIS_REPORT"> + <item dataType="int" stringID="XST_FSMS" value="1"/> + <item dataType="int" stringID="XST_RAMS" value="1"></item> + <item dataType="int" stringID="XST_ADDERSSUBTRACTORS" value="4"></item> + <item dataType="int" stringID="XST_COUNTERS" value="2"></item> + <item dataType="int" stringID="XST_REGISTERS" value="165"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="165"/> + </item> + <item dataType="int" stringID="XST_XORS" value="44"> + <item dataType="int" stringID="XST_1BIT_XOR2" value="44"/> + </item> + </section> + <section stringID="XST_FINAL_REGISTER_REPORT"> + <item dataType="int" stringID="XST_REGISTERS" value="192"> + <item dataType="int" stringID="XST_FLIPFLOPS" value="192"/> + </item> + </section> + <section stringID="XST_PARTITION_REPORT"> + <section stringID="XST_PARTITION_IMPLEMENTATION_STATUS"> + <section stringID="XST_NO_PARTITIONS_WERE_FOUND_IN_THIS_DESIGN"/> + </section> + </section> + <section stringID="XST_FINAL_REPORT"> + <section stringID="XST_FINAL_RESULTS"> + <item stringID="XST_TOP_LEVEL_OUTPUT_FILE_NAME" value="/home/matt/coregen/tmp/_cg/fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc"/> + <item stringID="XST_OUTPUT_FORMAT" value="NGC"/> + <item stringID="XST_OPTIMIZATION_GOAL" value="SPEED"/> + <item stringID="XST_KEEP_HIERARCHY" value="no"/> + </section> + <section stringID="XST_DESIGN_STATISTICS"> + <item stringID="XST_IOS" value="153"/> + </section> + <section stringID="XST_CELL_USAGE"> + <item dataType="int" stringID="XST_BELS" value="227"> + <item dataType="int" stringID="XST_GND" value="1"/> + <item dataType="int" stringID="XST_INV" value="3"/> + <item dataType="int" stringID="XST_LUT2" value="37"/> + <item dataType="int" stringID="XST_LUT2L" value="1"/> + <item dataType="int" stringID="XST_LUT3" value="86"/> + <item dataType="int" stringID="XST_LUT3D" value="1"/> + <item dataType="int" stringID="XST_LUT3L" value="3"/> + <item dataType="int" stringID="XST_LUT4" value="34"/> + <item dataType="int" stringID="XST_LUT4D" value="2"/> + <item dataType="int" stringID="XST_MUXCY" value="10"/> + <item dataType="int" stringID="XST_MUXF5" value="36"/> + <item dataType="int" stringID="XST_VCC" value="1"/> + <item dataType="int" stringID="XST_XORCY" value="12"/> + </item> + <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="192"> + <item dataType="int" stringID="XST_FD" value="4"/> + <item dataType="int" stringID="XST_FDC" value="58"/> + <item dataType="int" stringID="XST_FDCE" value="108"/> + <item dataType="int" stringID="XST_FDP" value="10"/> + <item dataType="int" stringID="XST_FDPE" value="5"/> + </item> + <item dataType="int" stringID="XST_RAMS" value="144"> + <item dataType="int" stringID="XST_RAM16X1D" value="144"/> + </item> + </section> + </section> + <section stringID="XST_DEVICE_UTILIZATION_SUMMARY"> + <item stringID="XST_SELECTED_DEVICE" value="3s2000fg456-5"/> + <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="188"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="192"/> + <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="455"/> + <item dataType="int" stringID="XST_NUMBER_USED_AS_LOGIC" value="167"/> + <item dataType="int" stringID="XST_NUMBER_USED_AS_RAMS" value="288"/> + <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="153"/> + <item AVAILABLE="333" dataType="int" stringID="XST_NUMBER_OF_BONDED_IOBS" value="0"/> + </section> + <section stringID="XST_PARTITION_RESOURCE_SUMMARY"> + <section stringID="XST_NO_PARTITIONS_WERE_FOUND_IN_THIS_DESIGN"/> + </section> + <section stringID="XST_ERRORS_STATISTICS"> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_ERRORS" value="0"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="73"/> + <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="10"/> + </section> + </application> + +</document> diff --git a/coregen/fifo_xlnx_64x36_2clk_flist.txt b/coregen/fifo_xlnx_64x36_2clk_flist.txt new file mode 100644 index 000000000..44e31eb6c --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk_flist.txt @@ -0,0 +1,8 @@ +# Output products list for <fifo_xlnx_64x36_2clk> +fifo_xlnx_64x36_2clk.ngc +fifo_xlnx_64x36_2clk.v +fifo_xlnx_64x36_2clk.veo +fifo_xlnx_64x36_2clk.xco +fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_64x36_2clk_flist.txt +fifo_xlnx_64x36_2clk_xmdf.tcl diff --git a/coregen/fifo_xlnx_64x36_2clk_readme.txt b/coregen/fifo_xlnx_64x36_2clk_readme.txt new file mode 100644 index 000000000..7734c0087 --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk_readme.txt @@ -0,0 +1,39 @@ +The following files were generated for 'fifo_xlnx_64x36_2clk' in directory +/home/matt/gnuradio.git/usrp2/fpga/coregen/: + +fifo_xlnx_64x36_2clk.ngc: + Binary Xilinx implementation netlist file containing the information + required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_64x36_2clk.v: + Verilog wrapper file provided to support functional simulation. + This file contains simulation model customization data that is + passed to a parameterized simulation model for the core. + +fifo_xlnx_64x36_2clk.veo: + VEO template file containing code that can be used as a model for + instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_64x36_2clk.xco: + CORE Generator input file containing the parameters used to + regenerate a core. + +fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: + Please see the core data sheet. + +fifo_xlnx_64x36_2clk_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + +fifo_xlnx_64x36_2clk_readme.txt: + Text file indicating the files generated and how they are used. + +fifo_xlnx_64x36_2clk_xmdf.tcl: + ISE Project Navigator interface file. ISE uses this file to determine + how the files output by CORE Generator for the core can be integrated + into your ISE project. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/coregen/fifo_xlnx_64x36_2clk_xmdf.tcl b/coregen/fifo_xlnx_64x36_2clk_xmdf.tcl new file mode 100644 index 000000000..ff5dfd3c2 --- /dev/null +++ b/coregen/fifo_xlnx_64x36_2clk_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is <core_name>_xmdf +package provide fifo_xlnx_64x36_2clk_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is <core_name>_xmdf +namespace eval ::fifo_xlnx_64x36_2clk_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_64x36_2clk_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: <module_name> +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_64x36_2clk +} +# ::fifo_xlnx_64x36_2clk_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_64x36_2clk_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_64x36_2clk.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_64x36_2clk.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_64x36_2clk.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_64x36_2clk.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_64x36_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_64x36_2clk_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_64x36_2clk +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/eth/bench/verilog/.gitignore b/eth/bench/verilog/.gitignore deleted file mode 100644 index 86fc44f92..000000000 --- a/eth/bench/verilog/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/a.out -/*.vcd -/*.sav -/*.lxt diff --git a/eth/bench/verilog/100m.scr b/eth/bench/verilog/100m.scr deleted file mode 100644 index 0dd59b894..000000000 --- a/eth/bench/verilog/100m.scr +++ /dev/null @@ -1,38 +0,0 @@ -// This tests just runs a few packets at 10/100 Mbps and 1 Gbps instead of only the usual 1 Gbps
-
-// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps for a starter
-01 00 22 00 04
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Transmit a 1000-byte frame 1 time - and expect it to be received again!
-20 03 E8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Set speed to 100 Mbps - this is 10x slower!
-01 00 22 00 02
-
-// Transmit a 1000-byte frame 1 time - and expect it to be received again!
-20 03 E8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Set speed to 10 Mbps - this is yet another 10x slower!
-01 00 22 00 01
-
-// Transmit a 1000-byte frame 1 time - and expect it to be received again!
-20 03 E8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Halt
-FF
diff --git a/eth/bench/verilog/Phy_sim.v b/eth/bench/verilog/Phy_sim.v deleted file mode 100644 index f51ddbd82..000000000 --- a/eth/bench/verilog/Phy_sim.v +++ /dev/null @@ -1,113 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// Phy_sim.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: Phy_sim.v,v $
-// Revision 1.3 2006/11/17 17:53:07 maverickist
-// no message
-//
-// Revision 1.2 2006/01/19 14:07:50 maverickist
-// verification is complete.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-`timescale 1ns/100ps
-
-module Phy_sim(
- input Gtx_clk, // Used only in GMII mode
- output Rx_clk,
- output Tx_clk, // Used only in MII mode
- input Tx_er,
- input Tx_en,
- input [7:0] Txd,
- output Rx_er,
- output Rx_dv,
- output [7:0] Rxd,
- output Crs,
- output Col,
- input [2:0] Speed,
- input Done
-);
-
-//////////////////////////////////////////////////////////////////////
-// this file used to simulate Phy.
-// generate clk and loop the Tx data to Rx data
-// full duplex mode can be verified on loop mode.
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-// internal signals
-//////////////////////////////////////////////////////////////////////
-reg Clk_25m; // Used for 100 Mbps mode
-reg Clk_2_5m; // Used for 10 Mbps mode
-
-//wire Rx_clk;
-//wire Tx_clk; // Used only in MII mode
-
- initial
- begin
- #10;
- while ( !Done )
- begin
- #20 Clk_25m = 0;
- #20 Clk_25m = 1;
- end
- end
-
- initial
- begin
- #10;
- while ( !Done )
- begin
- #200 Clk_2_5m = 0;
- #200 Clk_2_5m = 1;
- end
- end
-
- assign Rx_clk = Speed[2] ? Gtx_clk : Speed[1] ? Clk_25m : Speed[0] ? Clk_2_5m : 0;
- assign Tx_clk = Speed[2] ? Gtx_clk : Speed[1] ? Clk_25m : Speed[0] ? Clk_2_5m : 0;
-
- assign Rx_dv = Tx_en;
- assign Rxd = Txd;
- assign Rx_er = Tx_er;
- assign Crs = Tx_en;
- assign Col = 0;
-
-endmodule
diff --git a/eth/bench/verilog/User_int_sim.v b/eth/bench/verilog/User_int_sim.v deleted file mode 100644 index 3f4aa249b..000000000 --- a/eth/bench/verilog/User_int_sim.v +++ /dev/null @@ -1,230 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// User_input_sim.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: User_int_sim.v,v $
-// Revision 1.3 2006/11/17 17:53:07 maverickist
-// no message
-//
-// Revision 1.2 2006/01/19 14:07:50 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/13 12:15:35 Administrator
-// no message
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-module User_int_sim (
- Reset,
- Clk_user,
- CPU_init_end,
-
- Rx_mac_ra,
- Rx_mac_rd,
- Rx_mac_data,
- Rx_mac_BE,
- Rx_mac_pa,
- Rx_mac_sop,
- Rx_mac_eop,
-
- Tx_mac_wa,
- Tx_mac_wr,
- Tx_mac_data,
- Tx_mac_BE,
- Tx_mac_sop,
- Tx_mac_eop
-);
-
- input Reset;
- input Clk_user;
- input CPU_init_end;
-
- input Rx_mac_ra;
- output Rx_mac_rd;
- input [31:0] Rx_mac_data;
- input [1:0] Rx_mac_BE;
- input Rx_mac_pa;
- input Rx_mac_sop;
- input Rx_mac_eop;
-
- input Tx_mac_wa;
- output reg Tx_mac_wr;
- output reg [31:0] Tx_mac_data;
- output reg [1:0] Tx_mac_BE; // Big endian
- output reg Tx_mac_sop;
- output reg Tx_mac_eop;
-
-//////////////////////////////////////////////////////////////////////
-// Internal signals
-//////////////////////////////////////////////////////////////////////
-
- reg [4:0] operation;
- reg [31:0] data;
- reg Rx_mac_rd;
- reg Start_tran;
-
-//////////////////////////////////////////////////////////////////////
-//generate Tx user data
-//////////////////////////////////////////////////////////////////////
-
- initial
- begin
- operation = 0;
- data = 0;
- end
-
- task SendPacket;
- input [15:0] Length;
- input [7:0] StartByte;
-
- reg [15:0] Counter;
- reg [7:0] TxData;
-
- begin
- Counter=Length;
- TxData = StartByte;
- Tx_mac_sop = 1; // First time
- while ( Counter>0 )
- begin
- while ( !Tx_mac_wa )
- begin
- Tx_mac_wr = 0;
- @( posedge Clk_user );
- end
-
- Tx_mac_data[31:24] = TxData;
- Tx_mac_data[23:16] = TxData+1;
- Tx_mac_data[15:8] = TxData+2;
- Tx_mac_data[ 7:0] = TxData+3;
- TxData = TxData+4;
- if ( Counter<=4 )
- begin
- // Indicate how many bytes are valid
- if ( Counter==4 )
- Tx_mac_BE = 2'b00;
- else
- Tx_mac_BE = Counter;
- Tx_mac_eop = 1;
- end
- Tx_mac_wr = 1;
-
- if ( Counter >= 4 )
- Counter = Counter - 4;
- else
- Counter = 0;
- @( posedge Clk_user );
- Tx_mac_sop = 0;
- end
-
- Tx_mac_eop = 0;
- Tx_mac_wr = 0;
- Tx_mac_data = 32'h0;
- Tx_mac_BE = 2'b00;
- end
- endtask
-
- always @( posedge Clk_user or posedge Reset )
- if (Reset)
- Start_tran <= 0;
- else if (Tx_mac_eop && !Tx_mac_wa)
- Start_tran <= 0;
- else if (Tx_mac_wa)
- Start_tran <= 1;
-
- always @(posedge Clk_user)
- if (Tx_mac_wa && CPU_init_end)
- /* $ip_32W_gen("../data/config.ini",operation,data); */
- ;
- else
- begin
- operation <= 0;
- data <= 0;
- end
-
- initial
- begin
- Tx_mac_sop = 0;
- Tx_mac_eop = 0;
- Tx_mac_wr = 0;
- Tx_mac_data = 32'h0;
- Tx_mac_BE = 2'b00;
-
- #100;
- while ( Reset )
- @( posedge Clk_user );
-
- @( posedge Clk_user );
-
- while ( !CPU_init_end )
- @( posedge Clk_user );
-
- SendPacket( 64, 8'h11 );
- repeat( 20 )
- @( posedge Clk_user );
- SendPacket( 1500, 8'h12 );
-
- end
-
-// assign Tx_mac_data = data;
-// assign Tx_mac_wr = operation[4];
-// assign Tx_mac_sop = operation[3];
-// assign Tx_mac_eop = operation[2];
-// assign Tx_mac_BE = operation[1:0];
-
-//////////////////////////////////////////////////////////////////////
-//verify Rx user data
-//////////////////////////////////////////////////////////////////////
-
- always @ (posedge Clk_user or posedge Reset)
- if (Reset)
- Rx_mac_rd <= 0;
- else if (Rx_mac_ra)
- Rx_mac_rd <= 1;
- else
- Rx_mac_rd <= 0;
-
- always @ (posedge Clk_user )
- if (Rx_mac_pa)
- /* $ip_32W_check( Rx_mac_data,
- {Rx_mac_sop,Rx_mac_eop,Rx_mac_eop?Rx_mac_BE:2'b0});
- */
- ;
-
-endmodule
diff --git a/eth/bench/verilog/error.scr b/eth/bench/verilog/error.scr deleted file mode 100644 index af42634a8..000000000 --- a/eth/bench/verilog/error.scr +++ /dev/null @@ -1,146 +0,0 @@ -// This tests sends 5 packets, injecting a bit error in two of them
-// to verify the Rx CRC check works. The corresponding RMON statistics
-// counter is finally checked to verify that the error was registered
-
-// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-//--- Packets #0 & 1 --------------------------------------------------------
-
-// Transmit a 200-byte frame 1 time - and expect it to be received again!
-20 00 C8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Transmit a 200-byte frame 1 time - but expect to receive it with error!
-25 00 C8 00 01
-
-// Inject a single bit error in the packet (data bit 0) - this will cause a CRC error
-23 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-//--- Packets #2 & 3 --------------------------------------------------------
-
-// Transmit a 200-byte frame 1 time - and expect it to be received again!
-20 00 C8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Transmit a 200-byte frame 1 time - but expect to receive it with error!
-25 00 C8 00 01
-
-// Inject a single bit error in the packet (data bit 7) - this will cause a CRC error
-23 00 80
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-//--- Packets #4 & 5 --------------------------------------------------------
-
-// Transmit a 200-byte frame 1 time - and expect it to be received again!
-20 00 C8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Transmit a 200-byte frame 1 time - but don't expect it to be received again!
-21 00 C8 00 01
-
-// Inject a single bit error in the packet (RxEn) - this will cause a packet discard!
-// (because it happens early in the packet)
-23 01 00
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-//--- Packets #6 & 7 --------------------------------------------------------
-
-// Transmit a 200-byte frame 1 time - and expect it to be received again!
-20 00 C8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Transmit a 200-byte frame 1 time - but don't expect it to be received again!
-21 00 C8 00 01
-
-// Inject a single bit error in the packet (RxEr)
-23 02 00
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-//--- Packet #8 -------------------------------------------------------------
-
-// Transmit a 200-byte frame 1 time - and expect it to be received again!
-20 00 C8 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-//---------------------------------------------------------------------------
-
-// Set CPU_rd_addr to address RxCRCErrCounter
-01 00 1C 00 05
-
-// Assert CPU_rd_apply
-01 00 1D 00 01
-
-// Kill a little time while waiting for CPU_rd_grant to assert...
-02 00 1E
-02 00 1E
-02 00 1E
-02 00 1E
-
-// Confirm that CPU_rd_grant is asserted
-03 00 1E 00 01 ff ff
-
-// Read & check low part of RxCRCErrCounter (0x0002)
-03 00 1F 00 02 ff ff
-
-// Read & check high part of RxCRCErrCounter (0x0000)
-03 00 20 00 00 ff ff
-
-// Negate CPU_rd_apply
-01 00 1D 00 00
-
-//---------------------------------------------------------------------------
-
-// Set CPU_rd_addr to address RxTooShortTooLongCounter
-01 00 1C 00 07
-
-// Assert CPU_rd_apply
-01 00 1D 00 01
-
-// Kill a little time while waiting for CPU_rd_grant to assert...
-02 00 1E
-02 00 1E
-02 00 1E
-02 00 1E
-
-// Confirm that CPU_rd_grant is asserted
-03 00 1E 00 01 ff ff
-
-// Read & check low part of RxTooShortTooLongCounter (0x0002)
-03 00 1F 00 02 ff ff
-
-// Read & check high part of RxTooShortTooLongCounter (0x0000)
-03 00 20 00 00 ff ff
-
-// Negate CPU_rd_apply
-01 00 1D 00 00
-
-
-// Halt
-FF
diff --git a/eth/bench/verilog/files.lst b/eth/bench/verilog/files.lst deleted file mode 100644 index 6175a4d43..000000000 --- a/eth/bench/verilog/files.lst +++ /dev/null @@ -1,42 +0,0 @@ -../../rtl/verilog/MAC_rx/Broadcast_filter.v
-../../rtl/verilog/MAC_rx/CRC_chk.v
-../../rtl/verilog/MAC_rx/MAC_rx_add_chk.v
-../../rtl/verilog/MAC_rx/MAC_rx_ctrl.v
-../../rtl/verilog/MAC_rx/MAC_rx_FF.v
-
-../../rtl/verilog/MAC_tx/CRC_gen.v
-../../rtl/verilog/MAC_tx/flow_ctrl.v
-../../rtl/verilog/MAC_tx/MAC_tx_addr_add.v
-../../rtl/verilog/MAC_tx/MAC_tx_ctrl.v
-../../rtl/verilog/MAC_tx/MAC_tx_FF.v
-../../rtl/verilog/MAC_tx/Ramdon_gen.v
-
-../../rtl/verilog/miim/eth_clockgen.v
-../../rtl/verilog/miim/eth_outputcontrol.v
-../../rtl/verilog/miim/eth_shiftreg.v
-
-../../rtl/verilog/RMON/RMON_addr_gen.v
-../../rtl/verilog/RMON/RMON_ctrl.v
-../../rtl/verilog/RMON/RMON_dpram.v
-
-../../rtl/verilog/TECH/duram.v
-../../rtl/verilog/TECH/eth_clk_div2.v
-../../rtl/verilog/TECH/eth_clk_switch.v
-
-../../rtl/verilog/TECH/xilinx/BUFGMUX.v
-../../rtl/verilog/TECH/xilinx/RAMB16_S36_S36.v
-
-../../rtl/verilog/Clk_ctrl.v
-../../rtl/verilog/eth_miim.v
-../../rtl/verilog/MAC_rx.v
-../../rtl/verilog/MAC_top.v
-../../rtl/verilog/MAC_tx.v
-../../rtl/verilog/Phy_int.v
-../../rtl/verilog/Reg_int.v
-../../rtl/verilog/RMON.v
-
-../../bench/verilog/Phy_sim.v
-../../bench/verilog/User_int_sim.v
-../../bench/verilog/host_sim.v
-../../bench/verilog/xlnx_glbl.v
-../../bench/verilog/tb_top.v
diff --git a/eth/bench/verilog/host_sim.v b/eth/bench/verilog/host_sim.v deleted file mode 100644 index 55abb8508..000000000 --- a/eth/bench/verilog/host_sim.v +++ /dev/null @@ -1,82 +0,0 @@ -module host_sim(
- input Reset,
- input Clk_reg,
- output reg CSB,
- output reg WRB,
- output reg CPU_init_end,
- output reg [15:0] CD_in,
- input [15:0] CD_out,
- output reg [7:0] CA
-);
-
-////////////////////////////////////////
-
-task CPU_init;
- begin
- CA = 0;
- CD_in = 0;
- WRB = 1;
- CSB = 1;
- end
-endtask
-
-////////////////////////////////////////
-
-task CPU_wr;
- input [6:0] Addr;
- input [15:0] Data;
- begin
- CA = {Addr,1'b0};
- CD_in = Data;
- WRB = 0;
- CSB = 0;
- #20;
- CA = 0;
- CD_in = 0;
- WRB = 1;
- CSB = 1;
- #20;
- end
-endtask
-
-/////////////////////////////////////////
-
-task CPU_rd;
- input [6:0] Addr;
- begin
- CA = {Addr,1'b0};
- WRB = 1;
- CSB = 0;
- #20;
- CA = 0;
- WRB = 1;
- CSB = 1;
- #20;
- end
-endtask
-
-/////////////////////////////////////////
-
-integer i;
-
-reg [31:0] CPU_data [255:0];
-reg [7:0] write_times;
-reg [7:0] write_add;
-reg [15:0] write_data;
-
-initial
- begin
- CPU_init;
- CPU_init_end=0;
- //$readmemh("../data/CPU.vec",CPU_data);
- //{write_times,write_add,write_data}=CPU_data[0];
- {write_times,write_add,write_data}='b0;
- #90;
- for (i=0;i<write_times;i=i+1)
- begin
- {write_times,write_add,write_data}=CPU_data[i];
- CPU_wr(write_add[6:0],write_data);
- end
- CPU_init_end=1;
- end
-endmodule
diff --git a/eth/bench/verilog/icomp.bat b/eth/bench/verilog/icomp.bat deleted file mode 100644 index 11e221e08..000000000 --- a/eth/bench/verilog/icomp.bat +++ /dev/null @@ -1 +0,0 @@ -iverilog -I ..\..\rtl\verilog -c files.lst
diff --git a/eth/bench/verilog/isim.bat b/eth/bench/verilog/isim.bat deleted file mode 100644 index e77969659..000000000 --- a/eth/bench/verilog/isim.bat +++ /dev/null @@ -1 +0,0 @@ -vvp a.out %*
diff --git a/eth/bench/verilog/jumbo_err.scr b/eth/bench/verilog/jumbo_err.scr deleted file mode 100644 index b0177f474..000000000 --- a/eth/bench/verilog/jumbo_err.scr +++ /dev/null @@ -1,40 +0,0 @@ -// This test performs transmission & reception of several Jumbo-frame of ~2Kbytes
-// In one of the frames an error is injected to allow analysis of how the
-// MAC Rx interface reacts to errors in long packets
-
-// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Transmit a 2049-byte frame 2 times - and expect them to be received again!
-20 08 02 00 02
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Transmit a 2049-byte frame 1 time - but expect to receive it with error!
-25 08 02 00 01
-
-// Delay 256 NOPs to time the error injection to be late in the packet
-0F 01 00
-
-// Inject a single bit error in the packet (data bit 0)
-23 01 00
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Transmit a 2049-byte frame 2 times - and expect them to be received again!
-20 08 01 00 02
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Halt
-FF
diff --git a/eth/bench/verilog/jumbos.scr b/eth/bench/verilog/jumbos.scr deleted file mode 100644 index f48870bd5..000000000 --- a/eth/bench/verilog/jumbos.scr +++ /dev/null @@ -1,27 +0,0 @@ -// This test performs transmission & reception of several Jumbo-frames of ~2Kbytes each
-// At the same time it demonstrates the wire-speed capabilities of the core
-
-// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Transmit a 2047-byte frame 3 times - and expect them to be received again!
-20 07 ff 00 03
-// Transmit a 2048-byte frame 3 times - and expect them to be received again!
-20 08 00 00 03
-// Transmit a 2049-byte frame 3 times - and expect them to be received again!
-20 08 01 00 03
-// Transmit a 2050-byte frame 3 times - and expect them to be received again!
-20 08 02 00 03
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Halt
-FF
diff --git a/eth/bench/verilog/mdio.scr b/eth/bench/verilog/mdio.scr deleted file mode 100644 index 8ad9969b9..000000000 --- a/eth/bench/verilog/mdio.scr +++ /dev/null @@ -1,52 +0,0 @@ -// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Set MDIO clock (MDC) divider to 4 to speed up test
-01 00 23 00 04
-03 00 23 00 04 ff ff
-
-// Check default (reset) values in new (added) MDIO registers
-//03 00 23 00 64 ff ff
-03 00 24 00 00 ff ff
-03 00 25 00 00 ff ff
-03 00 26 00 00 ff ff
-03 00 27 00 00 ff ff
-03 00 28 00 00 ff ff
-
-// Set RGAD=0x00 (all zeroes), FIAD=0x1f (all ones), check it
-// - these values allows easy recognition in the waveform
-01 00 25 00 1f
-03 00 25 00 1f ff ff
-
-// Now start the read operation by writing a 1 to the MIICOMMAND[1] - RSTAT
-01 00 24 00 02
-03 00 24 00 02 ff ff
-
-// Delay for 768 NOP
-0F 03 00
-
-// Check that the read operation has completed
-03 00 28 00 00 ff ff
-
-// Set RGAD=0x1f (all ones), FIAD=0x00 (all zeroes), check it
-// - these values allows easy recognition in the waveform
-01 00 25 1f 00
-03 00 25 1f 00 ff ff
-// Set MIITX_DATA = 0xAAAA, check it
-01 00 26 AA AA
-03 00 26 AA AA ff ff
-// Check MIISTATUS - must still be zero
-03 00 28 00 00 ff ff
-
-// Now start the write operation by writing a 1 to the MIICOMMAND[2] - WCTRLDATA
-01 00 24 00 04
-03 00 24 00 04 ff ff
-
-// Delay for 768 NOP
-0F 03 00
-
-// Check that the write operation has completed
-03 00 28 00 00 ff ff
diff --git a/eth/bench/verilog/miim_model.v b/eth/bench/verilog/miim_model.v deleted file mode 100644 index 936d99a80..000000000 --- a/eth/bench/verilog/miim_model.v +++ /dev/null @@ -1,14 +0,0 @@ - -// Skeleton PHY interface simulator - -module miim_model(input mdc_i, - inout mdio, - input phy_resetn_i, - input phy_clk_i, - output phy_intn_o, - output [2:0] speed_o); - - assign phy_intn_o = 1; // No interrupts - assign speed_o = 3'b100; // 1G mode - -endmodule // miim_model diff --git a/eth/bench/verilog/misc.scr b/eth/bench/verilog/misc.scr deleted file mode 100644 index 092362964..000000000 --- a/eth/bench/verilog/misc.scr +++ /dev/null @@ -1,92 +0,0 @@ -// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Write MAC address 12 35 56 78 9A BC to Rx Address buffer
-01 00 10 00 00
-01 00 0f 00 12
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 01
-01 00 0f 00 34
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 02
-01 00 0f 00 56
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 03
-01 00 0f 00 78
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 04
-01 00 0f 00 9A
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 05
-01 00 0f 00 BC
-01 00 11 00 01
-01 00 11 00 00
-
-// Write 1 to register 14, MAC_rx_add_chk_en
-// This turns on the Rx Destination MAC address filter
-01 00 0e 00 01
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-// (i.e. Destination MAC address is 123456789ABC matching the above)
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Transmit a 60-byte frame 1 time - and expect it to be received again!
-20 00 3C 00 01
-// Transmit a 61-byte frame 1 time - and expect it to be received again!
-20 00 3D 00 01
-// Transmit a 62-byte frame 1 time - and expect it to be received again!
-20 00 3E 00 01
-// Transmit a 63-byte frame 1 time - and expect it to be received again!
-20 00 3F 00 01
-// Transmit a 64-byte frame 1 time - and expect it to be received again!
-20 00 40 00 01
-
-// Transmit a 500-byte frame 1 time - and expect it to be received again!
-20 01 4C 00 01
-
-// Transmit a 1500-byte frame 1 time - and expect it to be received again!
-20 05 DC 00 01
-
-// Transmit a 1514-byte frame 1 time - and expect it to be received again!
-20 05 EA 00 01
-
-// Transmit a 60-byte frame 3 times - and expect them to be received again!
-20 00 3C 00 03
-// Transmit a 61-byte frame 3 times - and expect them to be received again!
-20 00 3D 00 03
-// Transmit a 62-byte frame 3 times - and expect them to be received again!
-20 00 3E 00 03
-// Transmit a 63-byte frame 3 times - and expect them to be received again!
-20 00 3F 00 03
-// Transmit a 64-byte frame 3 times - and expect them to be received again!
-20 00 40 00 03
-
-// Transmit a 1510-byte frame 1 time - and expect it to be received again!
-20 05 E6 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Change Tx MAC to something different - we won't receive frames with this ID
-10 00 00 00 06 11 22 33 44 55 66
-
-// Transmit a 60 byte frame 3 times - but don't expect them to be received!
-21 00 3C 00 03
-
-//// Change Tx MAC back to 12 34 56 78 9A BC
-10 00 00 00 06 12 34 56 78 9A BC
-
-// Transmit a 60 byte frame 3 times - and expect them to be received again!
-20 00 3C 00 03
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
diff --git a/eth/bench/verilog/pause.scr b/eth/bench/verilog/pause.scr deleted file mode 100644 index be74027e3..000000000 --- a/eth/bench/verilog/pause.scr +++ /dev/null @@ -1,45 +0,0 @@ -// This test demonstrates the ability to transmit a PAUSE frame, and the effect of
-// a PAUSE frame on the receiver
-
-// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Set PAUSE quanta to 256 - corresponding to a pause of 256x512 = 128Kb = 16KB
-01 00 03 01 00
-
-// Enable the transmitter to send a PAUSE frame
-01 00 02 00 01
-
-// Enable the transmitter to react to received PAUSE frames
-01 00 0b 00 01
-
-// Expect to receive a PAUSE frame with quanta 256
-24 01 00
-
-// Transmit a 512-byte frame 1 time - and expect it to be received again!
-20 02 00 00 01
-
-// Request the transmission of a PAUSE frame - it will loopback to ourselves and delay
-// further transmission for a period of 16 KB, causing a significant (visible) delay
-// between first and second 512-byte frame!
-01 00 0c 00 01
-
-// - now this second time, we will experience a delay
-// Transmit a 512-byte frame 1 time - and expect it to be received again!
-20 02 00 00 01
-// - and a final 3rd time
-// Transmit a 512-byte frame 1 time - and expect it to be received again!
-20 02 00 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Halt
-FF
diff --git a/eth/bench/verilog/tb_top.v b/eth/bench/verilog/tb_top.v deleted file mode 100644 index e54bc201b..000000000 --- a/eth/bench/verilog/tb_top.v +++ /dev/null @@ -1,1057 +0,0 @@ -`timescale 1 ns / 1 ps
-
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// tb_top.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: tb_top.v,v $
-// Revision 1.3 2006/01/19 14:07:51 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:13 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-module tb_top;
-
- //-------------------- Instantiate Xilinx glbl module ----------------------
- // - this is needed to get ModelSim to work because e.g. I/O buffer models
- // refer directly to glbl.GTS and similar signals
-
- wire GSR;
- wire GTS;
- xlnx_glbl glbl( .GSR( GSR ), .GTS( GTS ) );
-
- reg VLOG_ExitSignal = 0;
- reg Done = 0;
- reg Error = 0;
-
- //-------------------------------------------------------------------------
-
- // System signals
- wire Reset;
- reg Clk_125M;
- reg Clk_user;
-
- reg RST_I;
- reg CLK_I;
- reg STB_I;
- reg CYC_I;
- reg [6:0] ADR_I;
- reg WE_I;
- reg [15:0] DAT_I;
- wire [15:0] DAT_O;
- wire ACK_O;
-
- // User interface (Rx)
- wire Rx_mac_ra;
- reg Rx_mac_rd = 0;
- wire [31:0] Rx_mac_data;
- wire [1:0] Rx_mac_BE;
- wire Rx_mac_pa;
- wire Rx_mac_sop;
- wire Rx_mac_err;
- wire Rx_mac_eop;
-
- // User interface (Tx)
- wire Tx_mac_wa;
- reg Tx_mac_wr = 0;
- reg [31:0] Tx_mac_data = 32'bx;
- reg [1:0] Tx_mac_BE = 2'bx;
- reg Tx_mac_sop = 1'bx;
- reg Tx_mac_eop = 1'bx;
-
- // PHY interface (GMII/MII)
- wire Gtx_clk;
- wire Rx_clk;
- wire Tx_clk;
- wire Tx_er;
- wire Tx_en;
- wire [7:0] Txd;
- wire Rx_er;
- wire Rx_dv;
- wire [7:0] Rxd;
- wire Crs;
- wire Col;
-
- // PHY int host interface
-
- wire Line_loop_en;
- wire [2:0] Speed;
-
- // MDIO interface
- wire Mdio; // MII Management Data In
- wire Mdc; // MII Management Data Clock
-
- //-------------------------------------------------------------------------
-
- // Generate generic reset signal from Wishbone specific one
- assign Reset = RST_I;
-
- MAC_top U_MAC_top(
- // System signals
- .Clk_125M ( Clk_125M ),
- .Clk_user ( Clk_user ),
- .Speed ( Speed ),
-
- // Wishbone compliant core host interface
- .RST_I ( RST_I ),
- .CLK_I ( CLK_I ),
- .STB_I ( STB_I ),
- .CYC_I ( CYC_I ),
- .ADR_I ( ADR_I ),
- .WE_I ( WE_I ),
- .DAT_I ( DAT_I ),
- .DAT_O ( DAT_O ),
- .ACK_O ( ACK_O ),
-
- // User (packet) interface
- .Rx_mac_ra ( Rx_mac_ra ),
- .Rx_mac_rd ( Rx_mac_rd ),
- .Rx_mac_data( Rx_mac_data ),
- .Rx_mac_BE ( Rx_mac_BE ),
- .Rx_mac_pa ( Rx_mac_pa ),
- .Rx_mac_sop ( Rx_mac_sop ),
- .Rx_mac_err ( Rx_mac_err ),
- .Rx_mac_eop ( Rx_mac_eop ),
-
- .Tx_mac_wa ( Tx_mac_wa ),
- .Tx_mac_wr ( Tx_mac_wr ),
- .Tx_mac_data( Tx_mac_data ),
- .Tx_mac_BE ( Tx_mac_BE ),
- .Tx_mac_sop ( Tx_mac_sop ),
- .Tx_mac_eop ( Tx_mac_eop ),
-
- // PHY interface (GMII/MII)
- .Gtx_clk ( Gtx_clk ),
- .Rx_clk ( Rx_clk ),
- .Tx_clk ( Tx_clk ),
- .Tx_er ( Tx_er ),
- .Tx_en ( Tx_en ),
- .Txd ( Txd ),
- .Rx_er ( Rx_er ),
- .Rx_dv ( Rx_dv ),
- .Rxd ( Rxd ),
- .Crs ( Crs ),
- .Col ( Col ),
-
- // MDIO interface (to PHY)
- .Mdio ( Mdio ),
- .Mdc ( Mdc )
- );
-
- reg [15:0] InjectError;
- reg InjectErrorDone;
- reg [15:0] TxError;
- wire Tx_er_Modified;
- wire Tx_en_Modified;
- wire [7:0] Txd_Modified;
-
- Phy_sim U_Phy_sim(
- .Gtx_clk( Gtx_clk ),
- .Rx_clk ( Rx_clk ),
- .Tx_clk ( Tx_clk ),
- .Tx_er ( Tx_er_Modified ),
- .Tx_en ( Tx_en_Modified ),
- .Txd ( Txd_Modified ),
- .Rx_er ( Rx_er ),
- .Rx_dv ( Rx_dv ),
- .Rxd ( Rxd ),
- .Crs ( Crs ),
- .Col ( Col ),
- .Speed ( Speed ),
- .Done ( Done )
- );
-
- integer TxTrackPreAmble;
-
- always @( posedge Reset or posedge Tx_clk )
- if ( Reset )
- TxTrackPreAmble <= 0;
- else
- if ( ~Tx_en )
- TxTrackPreAmble <= 0;
- else
- TxTrackPreAmble <= TxTrackPreAmble + 1;
-
- // Asserted after the Destination MAC address in the packet
- wire TxInPayload = Tx_en & (TxTrackPreAmble > (7+6));
- assign Tx_er_Modified = Tx_er ^ ( TxError[9] & TxInPayload );
- assign Tx_en_Modified = Tx_en ^ ( TxError[8] & TxInPayload );
- assign Txd_Modified = Txd ^ ( TxError[7:0] & {8{TxInPayload}} );
-
- always @( posedge Reset or posedge Tx_clk )
- if ( Reset )
- begin
- InjectError <= 0;
- InjectErrorDone <= 0;
- TxError <= 'b0;
- end
- else
- if ( InjectError )
- begin
- TxError <= InjectError;
- InjectError <= 0;
- InjectErrorDone <= TxInPayload;
- end
- else if ( TxInPayload || InjectErrorDone )
- begin
- TxError <= 8'h00;
- InjectErrorDone <= 0;
- end
-
- //-------------------------------------------------------------------------
- // Track pause on Tx interface
-
- reg TxEnSeenOnce;
- integer TxTrackPause;
-
- always @( posedge Reset or posedge Tx_clk )
- if ( Reset )
- begin
- TxEnSeenOnce <= 0;
- TxTrackPause <= 0;
- end
- else
- if ( Tx_en )
- begin
- if ( TxEnSeenOnce && (TxTrackPause >= 64) ) // 512 bits
- $display( "IDLE period on Tx interface ended after %0d Tx clocks (%0d bits, tick ~ %0d)",
- TxTrackPause,
- (Speed == 4) ? TxTrackPause*8 : TxTrackPause*4,
- (Speed == 4) ? TxTrackPause*8/512 : TxTrackPause*4/512 );
- TxEnSeenOnce <= 1;
- TxTrackPause <= 0;
- end
- else
- TxTrackPause <= TxTrackPause + 1;
-
- //-------------------------------------------------------------------------
- // Host access routines (register read & write)
- //-------------------------------------------------------------------------
-
- task HostInit;
- begin
- RST_I <= 1;
-
- STB_I <= 0;
- CYC_I <= 0;
- ADR_I <= 'b0;
- WE_I <= 0;
- DAT_I <= 'b0;
-
- #100 RST_I <= 0;
-
- // Wait a couple of clock edges before continuing to allow
- // internal logic to get out of reset
- repeat( 2 )
- @( posedge CLK_I );
- end
- endtask
-
- task HostWriteReg;
- input [6:0] Addr;
- input [15:0] Data;
- begin
- @( posedge CLK_I );
- ADR_I <= Addr;
- DAT_I <= Data;
- WE_I <= 1;
- STB_I <= 1;
- CYC_I <= 1;
-
- @( posedge CLK_I );
-
- while ( ~ACK_O )
- @( posedge CLK_I );
-
- STB_I <= 0;
- CYC_I <= 0;
- end
- endtask
-
- task HostReadReg;
- input [6:0] Addr;
- output [15:0] Data;
- begin
- @( posedge CLK_I );
- ADR_I <= Addr;
- WE_I <= 0;
- STB_I <= 1;
- CYC_I <= 1;
-
- @( posedge CLK_I );
-
- while ( ~ACK_O )
- @( posedge CLK_I );
-
- Data = DAT_O;
- STB_I <= 0;
- CYC_I <= 0;
- end
- endtask
-
- //-------------------------------------------------------------------------
- // User interface access routines (packet Tx and Rx)
- //-------------------------------------------------------------------------
-
- `define FIFOSIZE 10000
-
- integer FIFO_WrPtr = 0;
- integer FIFO_RdPtr = 0;
- integer FIFO_ElementCount = 0;
- reg [35:0] FIFO_Data[0:`FIFOSIZE];
-
- function FIFO_Empty;
- input Dummy;
- begin
- if ( FIFO_ElementCount > 0 )
- FIFO_Empty = 0;
- else
- FIFO_Empty = 1;
- end
- endfunction
-
- function FIFO_Full;
- input Dummy;
- begin
- if ( FIFO_ElementCount < `FIFOSIZE )
- FIFO_Full = 0;
- else
- FIFO_Full = 1;
- end
- endfunction
-
- task FIFO_Wr;
- input [35:0] Data;
-
- begin
- if ( !FIFO_Full(0) )
- begin
- FIFO_Data[ FIFO_WrPtr ] = Data;
- FIFO_WrPtr = (FIFO_WrPtr + 1) % `FIFOSIZE;
- FIFO_ElementCount = FIFO_ElementCount + 1;
- end
- else
- begin
- $display( "ERROR: FIFO_Wr() - FIFO overflow!" );
- Error = 1;
- $finish;
- end
- end
- endtask
-
- task FIFO_Rd;
- output [35:0] Data;
-
- begin
- if ( !FIFO_Empty(0) )
- begin
- Data = FIFO_Data[ FIFO_RdPtr ];
- FIFO_RdPtr = (FIFO_RdPtr + 1) % `FIFOSIZE;
- FIFO_ElementCount = FIFO_ElementCount - 1;
- end
- else
- begin
- $display( "ERROR: FIFO_Rd() - Reading from empty FIFO!" );
- Error = 1;
- $finish;
- end
- end
- endtask
-
- //-------------------------------------------------------------------------
-
- `define TXDATALEN 8000
- reg [7:0] TxData[0:`TXDATALEN-1];
- reg [7:0] TxAltData[0:`TXDATALEN-1];
-
- // By default change payload after Ethernet Header
- reg [15:0] TxHeaderLength = 14;
-
- real TxStartTime;
- integer TxPacketCount = 0;
- integer TxByteCount;
-
- task SendPacket;
- input [15:0] Length;
- // 0: Don't write to FIFO, 1: Write to FIFO, 2: Write Alternate to FIFO, 3: Write IGNORE to FIFO
- input [1:0] Wr2FIFO;
-
- reg [15:0] Counter;
- integer TxIndex;
- integer i;
-
- reg [31:0] Tx_fifo_data;
-
- begin
- @( posedge Clk_user ); #1;
-
- TxPacketCount = TxPacketCount + 1;
- TxByteCount = TxByteCount + Length;
-
- Counter=Length;
- TxIndex = 0;
- Tx_mac_sop = 1; // First time
-
- if ( TxStartTime == 0 )
- TxStartTime = $realtime;
-
- while ( Counter>0 )
- begin
- while ( !Tx_mac_wa )
- begin
- Tx_mac_wr = 0;
- @( posedge Clk_user ); #1;
- end
-
- Tx_mac_data[31:24] = TxData[ TxIndex ];
- Tx_mac_data[23:16] = TxData[ TxIndex+1 ];
- Tx_mac_data[15:8] = TxData[ TxIndex+2 ];
- Tx_mac_data[ 7:0] = TxData[ TxIndex+3 ];
-
- // Default take data from regular tx buffer
- Tx_fifo_data = Tx_mac_data;
- if ( Wr2FIFO==2 )
- begin
- // Put content of Alternate Tx buffer on Rx expectancy queue
- if ( (TxIndex+0)<TxHeaderLength )
- Tx_fifo_data[31:24] = TxAltData[ TxIndex ];
- if ( (TxIndex+1)<TxHeaderLength )
- Tx_fifo_data[23:16] = TxAltData[ TxIndex+1 ];
- if ( (TxIndex+2)<TxHeaderLength )
- Tx_fifo_data[15:8] = TxAltData[ TxIndex+2 ];
- if ( (TxIndex+3)<TxHeaderLength )
- Tx_fifo_data[ 7:0] = TxAltData[ TxIndex+3 ];
- end
-
- for ( i=0; i<4; i=i+1 )
- begin
- if ( TxIndex >= TxHeaderLength )
- TxData[ TxIndex ] = TxData[ TxIndex ] + 1;
- TxIndex = TxIndex+1;
- end
-
- if ( Counter<=4 )
- begin
- // Indicate how many bytes are valid
- if ( Counter==4 )
- Tx_mac_BE = 2'b00;
- else
- Tx_mac_BE = Counter;
- Tx_mac_eop = 1;
- end
- else
- begin
- Tx_mac_BE = 2'b00;
- Tx_mac_eop = 0;
- end
-
- casez ( Wr2FIFO )
- 1,
- 2: FIFO_Wr( { Tx_mac_sop, Tx_mac_eop, Tx_mac_BE, Tx_fifo_data } );
- 3: // Ignore
- begin
- FIFO_Wr( { 2'b11, 2'b00, 32'h00000000 } );
- Wr2FIFO = 0;
- end
- endcase
-
- Tx_mac_wr = 1;
-
- if ( Counter >= 4 )
- Counter = Counter - 4;
- else
- Counter = 0;
- @( posedge Clk_user ); #1;
- Tx_mac_sop = 0;
- end
-
- Tx_mac_sop = 1'bx;
- Tx_mac_eop = 1'bx;
- Tx_mac_wr = 0;
- Tx_mac_data = 32'bx;
- Tx_mac_BE = 2'bx;
- end
- endtask
-
- //-------------------------------------------------------------------------
-
- reg Negate_Rx_mac_rd;
-
- always @( posedge Clk_user or posedge Reset )
- if ( Reset )
- Rx_mac_rd <= 0;
- else if ( Rx_mac_ra & ~Negate_Rx_mac_rd )
- Rx_mac_rd <= 1;
- else
- Rx_mac_rd <= 0;
-
- real RxStartTime;
- integer RxPacketCount;
- integer RxByteCount;
-
- reg InPacket;
- integer RxPacketLength;
- reg IgnoreUntilNextERR;
-
- always @( posedge Clk_user or posedge Reset )
- if ( Reset )
- begin
- InPacket = 0;
- RxPacketCount = 0;
- Negate_Rx_mac_rd <= 0;
- IgnoreUntilNextERR = 0;
- end
- else
- begin
- Negate_Rx_mac_rd <= 0;
-
- if ( Rx_mac_pa )
- begin : RxWord
- reg [35:0] RxData;
- reg [35:0] Expected;
- reg [35:0] Mask;
-
- RxData = { Rx_mac_sop, Rx_mac_eop, Rx_mac_BE, Rx_mac_data };
- casez ( Rx_mac_BE )
- 2'b01: Mask = 36'hfff000000;
- 2'b10: Mask = 36'hfffff0000;
- 2'b11: Mask = 36'hfffffff00;
- default: Mask = 36'hfffffffff;
- endcase
-
- // Retrieve expected packet data
-
- if ( !IgnoreUntilNextERR )
- begin
- FIFO_Rd( Expected );
- if ( Expected[35] & Expected[34] )
- begin
- // Both SOP & EOP are asserted in expectancy data
- // - this means that we should ignore all data received until next EOP
- $display( "The payload of this packet will be IGNORED - and an ERROR must be signalled!" );
- IgnoreUntilNextERR = 1;
- end
- end
- if ( IgnoreUntilNextERR )
- Mask = 36'h000000000;
-
- //$display( "DEBUG: RxData=0x%0x, Expected=0x%0x", RxData, Expected );
-
- if ( (RxData & Mask) !== (Expected & Mask) )
- begin
- $display( "ERROR: Receiving unexpected packet data: Got 0x%0x, expected 0x%0x (Mask=0x%0x)",
- RxData, Expected, Mask );
- Error = 1;
- end
-
- if ( InPacket )
- begin
- if ( Rx_mac_eop )
- begin
- // Ensure Rx_mac_rd is negated for one clock
- Negate_Rx_mac_rd <= 1;
- if ( Rx_mac_BE==2'b00 )
- RxPacketLength = RxPacketLength + 4;
- else
- RxPacketLength = RxPacketLength + Rx_mac_BE;
- $display( "Rx packet #%0d of length %0d ends",
- RxPacketCount,
- RxPacketLength );
- RxPacketCount = RxPacketCount + 1;
- RxByteCount = RxByteCount + RxPacketLength;
- InPacket = 0;
- end
- else
- RxPacketLength = RxPacketLength + 4;
- end
- else
- begin
- if ( Rx_mac_sop )
- begin
- RxPacketLength = 4;
- $display( "Rx packet #%0d begins: 0x%08x", RxPacketCount, Rx_mac_data );
- InPacket = 1;
- if ( RxStartTime == 0 )
- RxStartTime = $realtime;
- end
- else
- begin
- $display( "ERROR: Unexpectedly reading from Rx FIFO while not receiving a packet!" );
- Error = 1;
- end
- end
-
- if ( Rx_mac_err )
- begin
- if ( !Rx_mac_eop )
- begin
- $display( "ERROR: Rx_mac_err was asserted without Rx_mac_eop also being asserted!" );
- Error = 1;
- end
- if ( IgnoreUntilNextERR )
- $display( "Info: Rx_mac_err was asserted as expected!" );
- else
- begin
- $display( "ERROR: Rx_mac_err was unexpectedly asserted!" );
- Error = 1;
- end
- IgnoreUntilNextERR = 0;
- end
- end
- end
-
- //-------------------------------------------------------------------------
- // Script handling
- //-------------------------------------------------------------------------
-
- integer PC;
-
- task ScriptWriteReg;
- input [15:0] Addr;
- input [15:0] Data;
-
- begin
- $display( "WriteReg( 0x%04x, 0x%04x )", Addr, Data );
- HostWriteReg( Addr, Data );
- end
- endtask
-
- task ScriptReadReg;
- input [15:0] Addr;
-
- reg [15:0] Data;
-
- begin
- $write( "ReadReg( 0x%04x ): ", Addr );
- HostReadReg( Addr, Data );
- $display( "0x%04x", Data );
- end
- endtask
-
- task ScriptReadRegAndMatch;
- input [15:0] Addr;
- input [15:0] Data;
- input [15:0] Mask;
-
- reg [15:0] Read;
-
- begin
- $write( "ReadRegAndMatch( 0x%04x, 0x%04x, 0x%04x ): ", Addr, Data, Mask );
-
- HostReadReg( Addr, Read );
- $display( "0x%04x, masked=0x%04x", Read, Read & Mask );
-
- if ( Data !== (Read & Mask) )
- begin
- $display( "Error: Unexpected data read" );
- Error = 1;
- end
- end
- endtask
-
- integer RxExpectPacketCount = 0;
-
- task ScriptSendPacket;
- input [15:0] Length;
- // 0: Don't receive, 1: Receive & match, 2: Receive & match alternate, 3: Receive & ignore
- input [1:0] ExpectToRx;
-
- begin
- $display( "ScriptSendPacket( 0x%04x, %0d )", Length, ExpectToRx );
- SendPacket( Length, ExpectToRx );
- if ( ExpectToRx != 0 )
- RxExpectPacketCount = RxExpectPacketCount + 1;
- end
- endtask
-
- `define SCRIPTLEN 10000
- integer i;
- reg [7:0] Script[0:`SCRIPTLEN-1];
-
- function [15:0] Get16bit;
- input Dummy;
-
- reg [15:0] Data;
-
- begin
- Data[15:8] = Script[PC];
- Data[7:0] = Script[PC+1];
- PC = PC+2;
-
- Get16bit = Data;
- end
- endfunction
-
- task ExecuteScript;
-
- reg [7:0] OpCode;
- reg [15:0] Addr;
- reg [15:0] Data;
- reg [15:0] Length;
- reg [15:0] Count;
- reg [15:0] Mask;
-
- reg ScriptDone;
-
- begin
- ScriptDone = 0;
- Error = 0;
- PC = 0;
-
- while ( !ScriptDone )
- begin
- OpCode = Script[PC];
- //$write( "PC=%0d, OpCode=%02x: ", PC, OpCode );
- PC = PC+1;
-
- casez ( OpCode )
- 8'h00: // NOP
- begin
-// $display( "NOP" );
- #10;
- end
- 8'h01: // Write
- begin
- Addr = Get16bit(i);
- Data = Get16bit(i);
- ScriptWriteReg( Addr, Data );
- end
- 8'h02: // Read
- begin
- Addr = Get16bit(i);
- ScriptReadReg( Addr );
- end
- 8'h03: // Read & match
- begin
- Addr = Get16bit(i);
- Data = Get16bit(i);
- Mask = Get16bit(i);
- ScriptReadRegAndMatch( Addr, Data, Mask );
- end
-
- 8'h0f: // Delay
- begin
- Count = Get16bit(i);
- $display( "Delay %0d", Count );
- while ( Count > 0 )
- begin
- #10;
- Count = Count - 1;
- end
- end
-
- 8'h10: // Setup Tx Data
- begin
- Addr = Get16bit(i);
- Length = Get16bit(i);
- $write( "TxData( 0x%04x ), length=%0d: ", Addr, Length );
- while ( Length != 0 )
- begin
- TxData[Addr] = Script[PC];
- $write( " 0x%02x", Script[PC] );
- PC = PC + 1;
- Addr = Addr + 1;
- Length = Length - 1;
- end
- $display( "" );
- end
-
- 8'h11: // Setup Alternative Tx Data
- begin
- Addr = Get16bit(i);
- Length = Get16bit(i);
- $write( "TxAltData( 0x%04x ), length=%0d: ", Addr, Length );
- while ( Length != 0 )
- begin
- TxAltData[Addr] = Script[PC];
- $write( " 0x%02x", Script[PC] );
- PC = PC + 1;
- Addr = Addr + 1;
- Length = Length - 1;
- end
- $display( "" );
- end
-
- 8'h20: // Transmit packet - and put it on Rx expectancy queue
- begin
- Length = Get16bit(i); // Length in bytes
- Count = Get16bit(i); // Number of times
- while ( Count != 0 )
- begin
- ScriptSendPacket( Length, 1 );
- Count = Count - 1;
- end
- end
-
- 8'h21: // Transmit packet - but DON'T put it on Rx expectancy queue
- begin
- Length = Get16bit(i); // Length in bytes
- Count = Get16bit(i); // Number of times
- while ( Count != 0 )
- begin
- ScriptSendPacket( Length, 0 );
- Count = Count - 1;
- end
- end
-
- 8'h22: // Wait
- begin : OpCode22
- reg NoTimeOut;
- Count = Get16bit(i); // Timeout in ns
- if ( Count==0 )
- NoTimeOut = 1;
- else
- NoTimeOut = 0;
-
- $display( "Waiting for # of Rx packets = # of Tx packets..." );
- $display( "Timeout = %0d ns - Current # Rx =%0d, Expected=%0d",
- Count, RxPacketCount, RxExpectPacketCount );
-
- while( (NoTimeOut || (Count != 0)) && ( RxExpectPacketCount != RxPacketCount ) && !Error )
- begin
- #1;
- if ( !NoTimeOut )
- Count = Count - 1;
- //$display( "NoTimeOut=%0d, Count=%0d", NoTimeOut, Count );
- end
-
- if ( !Error )
- if ( RxExpectPacketCount != RxPacketCount )
- begin
- $display( "ERROR: Timeout waiting for Rx packet(s)!" );
- ScriptDone = 1;
- Error = 1;
- end
- else
- $display( "...Done waiting (time remaining = %0d ns)!", Count );
- end
-
- 8'h23: // Inject bit error in Tx packet
- begin
- InjectError = Get16bit(i); // Get bit error pattern
- $display( "Injecting a single bit-error in Tx packet: TxEr=%0d, TxEn=%0d, TxD=0x%02h (0x%03h)",
- InjectError[9], InjectError[8], InjectError[7:0], InjectError );
- end
-
- 8'h24: // Store internally generated PAUSE frame in Rx expect queue
- begin
- Count = Get16bit(i); // Timeout in ns
- $display( "Generating PAUSE frame (tick=%0d) on Rx expect queue", Count );
- RxExpectPacketCount = RxExpectPacketCount + 1;
- FIFO_Wr( { 1'b1, 1'b0, 2'b00, 32'h0180c200 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 16'h0001, 16'h0000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h88080001 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, Count, 16'h0000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b0, 2'b00, 32'h00000000 } );
- FIFO_Wr( { 1'b0, 1'b1, 2'b00, 32'h00000000 } );
- end
-
- 8'h25: // Transmit packet - and indicate that it must be IGNORED upon reception
- begin
- Length = Get16bit(i); // Length in bytes
- Count = Get16bit(i); // Number of times
- while ( Count != 0 )
- begin
- ScriptSendPacket( Length, 3 );
- Count = Count - 1;
- end
- end
-
- 8'h26: // Transmit packet - and put it on expectancy queue with Alternate header!
- begin
- Length = Get16bit(i); // Length in bytes
- Count = Get16bit(i); // Number of times
- while ( Count != 0 )
- begin
- ScriptSendPacket( Length, 2 );
- Count = Count - 1;
- end
- end
-
- 8'hff: // Halt
- begin
- $display( "HALT" );
- ScriptDone = 1;
- Done = 1;
- end
-
- default: // Unknown opcode
- begin
- $display( "Unknown instruction encountered @ PC=%0d: OpCode=0x%02x", PC-1, OpCode );
- Error = 1;
- end
-
- endcase
-
- if ( Error )
- begin
- ScriptDone = 1;
- Done = 1;
- end
- end
-
- if ( Error )
- $display( "ERROR: Test failed!");
- else
- begin : ScriptSuccess
- real TxTimeElapsed;
- real RxTimeElapsed;
- real ReferenceTime;
-
- ReferenceTime = $realtime;
- #1;
- ReferenceTime = $realtime - ReferenceTime;
-
- TxTimeElapsed = $realtime - TxStartTime;
- RxTimeElapsed = $realtime - RxStartTime;
-
- $display( "TxStartTime=%0e, Now=%0e", TxStartTime, $realtime );
- $display( "RxStartTime=%0e, Now=%0e", RxStartTime, $realtime );
-
- $display( "Tx stats: %0d packet(s) send, total of %0d bytes in %0e ns ~ %1.2f Mbps",
- TxPacketCount, TxByteCount, TxTimeElapsed, TxByteCount*8*1e3/TxTimeElapsed );
- $display( "Rx stats: %0d packet(s) received, total of %0d bytes in %0e ns ~ %1.2f Mbps",
- RxPacketCount, RxByteCount, RxTimeElapsed, RxByteCount*8*1e3/RxTimeElapsed );
- $display( "Test succeeded!");
- end
-
- end
- endtask
-
- //-------------------------------------------------------------------------
- // Generate all clocks
- //-------------------------------------------------------------------------
-
- // GMII master clock (125 MHz)
- initial
- begin
- #10;
- while ( !Done )
- begin
- #4 Clk_125M = 0;
- #4 Clk_125M = 1;
- end
- end
-
- // User (packet) interface clock (100 MHz)
- initial
- begin
- #10;
- while ( !Done )
- begin
- #5 Clk_user = 0;
- #5 Clk_user = 1;
- end
- end
-
- // Wishbone host interface clock (50 MHz)
- initial
- begin
- #10;
- while ( !Done )
- begin
- #10 CLK_I = 0;
- #10 CLK_I = 1;
- end
- end
-
- //-------------------------------------------------------------------------
-
- initial
- begin
- if ( $test$plusargs( "vcd" ) )
- begin
- $display( "Turning VCD data dump on" );
- $dumpfile();
- $dumpvars( 0 ); // Dump all signals in entire design
- end
- end
-
- //-------------------------------------------------------------------------
-
- reg [1023:0] ScriptFile;
-
- initial
- begin
- HostInit;
-
- TxStartTime = 0;
- RxStartTime = 0;
- TxByteCount = 0;
- RxByteCount = 0;
-
- for ( i=0; i<`TXDATALEN; i=i+1 )
- TxData[i] = (i & 8'hff);
-
- // Fill script memory with HALTs
- for ( i=0; i<`SCRIPTLEN; i=i+1 )
- Script[i] = 8'hff;
-
- if ( !$value$plusargs( "script=%s", ScriptFile ) )
- begin
- $display( "Using default script file" );
- ScriptFile = "test.scr";
- end
-
- $readmemh( ScriptFile, Script );
-
-// for ( i=0; i<40; i=i+1 )
-// $display( "Script[%0d]=0x%02x", i, Script[i] );
-
- #10;
-
- ExecuteScript;
- end
-
-endmodule
diff --git a/eth/bench/verilog/test.scr b/eth/bench/verilog/test.scr deleted file mode 100644 index 2ad127d31..000000000 --- a/eth/bench/verilog/test.scr +++ /dev/null @@ -1,23 +0,0 @@ -// This tests just runs trough a couple of different packet lengths
-
-// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Transmit a 320-byte frame 1 time - and expect it to be received again!
-20 01 40 00 01
-
-// Transmit a 80-byte frame 1 time - and expect it to be received again!
-20 00 50 00 01
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Halt
-FF
diff --git a/eth/bench/verilog/txmac.scr b/eth/bench/verilog/txmac.scr deleted file mode 100644 index caa7db594..000000000 --- a/eth/bench/verilog/txmac.scr +++ /dev/null @@ -1,93 +0,0 @@ -// Read from register 24 to confirm that Rx CRC check is enabled
-03 00 18 00 01 ff ff
-
-// Set speed to 1000 Mbps
-01 00 22 00 04
-
-// Write MAC address 12 35 56 78 9A BC to Rx Address buffer
-01 00 10 00 00
-01 00 0f 00 12
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 01
-01 00 0f 00 34
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 02
-01 00 0f 00 56
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 03
-01 00 0f 00 78
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 04
-01 00 0f 00 9A
-01 00 11 00 01
-01 00 11 00 00
-01 00 10 00 05
-01 00 0f 00 BC
-01 00 11 00 01
-01 00 11 00 00
-
-// Write 1 to register 14, MAC_rx_add_chk_en
-// This turns on the Rx Destination MAC address filter
-01 00 0e 00 01
-
-// Setup Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC CBA987654321 0800
-// (i.e. Destination MAC address is 123456789ABC matching the above)
-10 00 00 00 0E 12 34 56 78 9A BC CB A9 87 65 43 21 08 00
-
-// Setup Alternate Tx and Rx MAC addresses and type field to "IP"
-// Set Tx Data at offset 0, length 14 to 123456789ABC 112233445566 0800
-// (i.e. Destination MAC address is 123456789ABC matching the above)
-11 00 00 00 0E 12 34 56 78 9A BC 11 22 33 44 55 66 08 00
-
-// Transmit a 60-byte frame 3 times - and expect them to be received again!
-20 00 3C 00 03
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Write MAC address 11 22 33 44 55 66 to Tx MAC Source Address buffer
-01 00 09 00 00
-01 00 08 00 11
-01 00 0a 00 01
-01 00 0a 00 00
-01 00 09 00 01
-01 00 08 00 22
-01 00 0a 00 01
-01 00 0a 00 00
-01 00 09 00 02
-01 00 08 00 33
-01 00 0a 00 01
-01 00 0a 00 00
-01 00 09 00 03
-01 00 08 00 44
-01 00 0a 00 01
-01 00 0a 00 00
-01 00 09 00 04
-01 00 08 00 55
-01 00 0a 00 01
-01 00 0a 00 00
-01 00 09 00 05
-01 00 08 00 66
-01 00 0a 00 01
-01 00 0a 00 00
-
-// Transmit a 60 byte frame 3 times - and expect them to be received again!
-20 00 3C 00 03
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
-
-// Write 1 to register 7, MAC_tx_add_en
-// This turns on the Tx Source MAC address replacement mechanism
-01 00 07 00 01
-
-// Transmit a 60 byte frame 3 times - and expect them to be received again with Alternate header!
-26 00 3C 00 03
-
-// Wait (indefinitely) for missing Rx packets
-22 00 00
diff --git a/eth/bench/verilog/xlnx_glbl.v b/eth/bench/verilog/xlnx_glbl.v deleted file mode 100644 index 662a60e35..000000000 --- a/eth/bench/verilog/xlnx_glbl.v +++ /dev/null @@ -1,29 +0,0 @@ -module xlnx_glbl
-(
- GSR,
- GTS
-);
-
- //--------------------------------------------------------------------------
- // Parameters
- //--------------------------------------------------------------------------
-
- //--------------------------------------------------------------------------
- // IO declarations
- //--------------------------------------------------------------------------
-
- output GSR;
- output GTS;
-
- //--------------------------------------------------------------------------
- // Local declarations
- //--------------------------------------------------------------------------
-
- //--------------------------------------------------------------------------
- // Internal declarations
- //--------------------------------------------------------------------------
-
- assign GSR = 0;
- assign GTS = 0;
-
-endmodule
diff --git a/eth/demo/verilog/RAMB16_S1_S2.v b/eth/demo/verilog/RAMB16_S1_S2.v deleted file mode 100644 index 758760b95..000000000 --- a/eth/demo/verilog/RAMB16_S1_S2.v +++ /dev/null @@ -1,1535 +0,0 @@ -// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/unisims/RAMB16_S1_S2.v,v 1.10 2005/03/14 22:54:41 wloo Exp $ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 1995/2005 Xilinx, Inc. -// All Right Reserved. -/////////////////////////////////////////////////////////////////////////////// -// ____ ____ -// / /\/ / -// /___/ \ / Vendor : Xilinx -// \ \ \/ Version : 8.1i (I.13) -// \ \ Description : Xilinx Functional Simulation Library Component -// / / 16K-Bit Data and 2K-Bit Parity Dual Port Block RAM -// /___/ /\ Filename : RAMB16_S1_S2.v -// \ \ / \ Timestamp : Thu Mar 10 16:43:35 PST 2005 -// \___\/\___\ -// -// Revision: -// 03/23/04 - Initial version. -// End Revision - -`ifdef legacy_model - -`timescale 1 ps / 1 ps - -module RAMB16_S1_S2 (DOA, DOB, ADDRA, ADDRB, CLKA, CLKB, DIA, DIB, ENA, ENB, SSRA, SSRB, WEA, WEB); - - parameter INIT_A = 1'h0; - parameter INIT_B = 2'h0; - parameter SRVAL_A = 1'h0; - parameter SRVAL_B = 2'h0; - parameter WRITE_MODE_A = "WRITE_FIRST"; - parameter WRITE_MODE_B = "WRITE_FIRST"; - parameter SIM_COLLISION_CHECK = "ALL"; - localparam SETUP_ALL = 1000; - localparam SETUP_READ_FIRST = 3000; - - parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - - output [0:0] DOA; - reg [0:0] doa_out; - wire doa_out0; - - input [13:0] ADDRA; - input [0:0] DIA; - input ENA, CLKA, WEA, SSRA; - - output [1:0] DOB; - reg [1:0] dob_out; - wire dob_out0, dob_out1; - - input [12:0] ADDRB; - input [1:0] DIB; - input ENB, CLKB, WEB, SSRB; - - reg [18431:0] mem; - reg [8:0] count; - reg [1:0] wr_mode_a, wr_mode_b; - - reg [5:0] dmi, dbi; - reg [5:0] pmi, pbi; - - wire [13:0] addra_int; - reg [13:0] addra_reg; - wire [0:0] dia_int; - wire ena_int, clka_int, wea_int, ssra_int; - reg ena_reg, wea_reg, ssra_reg; - wire [12:0] addrb_int; - reg [12:0] addrb_reg; - wire [1:0] dib_int; - wire enb_int, clkb_int, web_int, ssrb_int; - reg display_flag; - reg enb_reg, web_reg, ssrb_reg; - - time time_clka, time_clkb; - time time_clka_clkb; - time time_clkb_clka; - - reg setup_all_a_b; - reg setup_all_b_a; - reg setup_zero; - reg setup_rf_a_b; - reg setup_rf_b_a; - reg [1:0] data_collision, data_collision_a_b, data_collision_b_a; - reg memory_collision, memory_collision_a_b, memory_collision_b_a; - reg address_collision, address_collision_a_b, address_collision_b_a; - reg change_clka; - reg change_clkb; - - wire [14:0] data_addra_int; - wire [14:0] data_addra_reg; - wire [14:0] data_addrb_int; - wire [14:0] data_addrb_reg; - wire [15:0] parity_addra_int; - wire [15:0] parity_addra_reg; - wire [15:0] parity_addrb_int; - wire [15:0] parity_addrb_reg; - - tri0 GSR = glbl.GSR; - - always @(GSR) - if (GSR) begin - assign doa_out = INIT_A[0:0]; - assign dob_out = INIT_B[1:0]; - end - else begin - deassign doa_out; - deassign dob_out; - end - - buf b_doa_out0 (doa_out0, doa_out[0]); - buf b_dob_out0 (dob_out0, dob_out[0]); - buf b_dob_out1 (dob_out1, dob_out[1]); - - buf b_doa0 (DOA[0], doa_out0); - buf b_dob0 (DOB[0], dob_out0); - buf b_dob1 (DOB[1], dob_out1); - - buf b_addra_0 (addra_int[0], ADDRA[0]); - buf b_addra_1 (addra_int[1], ADDRA[1]); - buf b_addra_2 (addra_int[2], ADDRA[2]); - buf b_addra_3 (addra_int[3], ADDRA[3]); - buf b_addra_4 (addra_int[4], ADDRA[4]); - buf b_addra_5 (addra_int[5], ADDRA[5]); - buf b_addra_6 (addra_int[6], ADDRA[6]); - buf b_addra_7 (addra_int[7], ADDRA[7]); - buf b_addra_8 (addra_int[8], ADDRA[8]); - buf b_addra_9 (addra_int[9], ADDRA[9]); - buf b_addra_10 (addra_int[10], ADDRA[10]); - buf b_addra_11 (addra_int[11], ADDRA[11]); - buf b_addra_12 (addra_int[12], ADDRA[12]); - buf b_addra_13 (addra_int[13], ADDRA[13]); - buf b_dia_0 (dia_int[0], DIA[0]); - buf b_ena (ena_int, ENA); - buf b_clka (clka_int, CLKA); - buf b_ssra (ssra_int, SSRA); - buf b_wea (wea_int, WEA); - buf b_addrb_0 (addrb_int[0], ADDRB[0]); - buf b_addrb_1 (addrb_int[1], ADDRB[1]); - buf b_addrb_2 (addrb_int[2], ADDRB[2]); - buf b_addrb_3 (addrb_int[3], ADDRB[3]); - buf b_addrb_4 (addrb_int[4], ADDRB[4]); - buf b_addrb_5 (addrb_int[5], ADDRB[5]); - buf b_addrb_6 (addrb_int[6], ADDRB[6]); - buf b_addrb_7 (addrb_int[7], ADDRB[7]); - buf b_addrb_8 (addrb_int[8], ADDRB[8]); - buf b_addrb_9 (addrb_int[9], ADDRB[9]); - buf b_addrb_10 (addrb_int[10], ADDRB[10]); - buf b_addrb_11 (addrb_int[11], ADDRB[11]); - buf b_addrb_12 (addrb_int[12], ADDRB[12]); - buf b_dib_0 (dib_int[0], DIB[0]); - buf b_dib_1 (dib_int[1], DIB[1]); - buf b_enb (enb_int, ENB); - buf b_clkb (clkb_int, CLKB); - buf b_ssrb (ssrb_int, SSRB); - buf b_web (web_int, WEB); - - initial begin - for (count = 0; count < 256; count = count + 1) begin - mem[count] <= INIT_00[count]; - mem[256 * 1 + count] <= INIT_01[count]; - mem[256 * 2 + count] <= INIT_02[count]; - mem[256 * 3 + count] <= INIT_03[count]; - mem[256 * 4 + count] <= INIT_04[count]; - mem[256 * 5 + count] <= INIT_05[count]; - mem[256 * 6 + count] <= INIT_06[count]; - mem[256 * 7 + count] <= INIT_07[count]; - mem[256 * 8 + count] <= INIT_08[count]; - mem[256 * 9 + count] <= INIT_09[count]; - mem[256 * 10 + count] <= INIT_0A[count]; - mem[256 * 11 + count] <= INIT_0B[count]; - mem[256 * 12 + count] <= INIT_0C[count]; - mem[256 * 13 + count] <= INIT_0D[count]; - mem[256 * 14 + count] <= INIT_0E[count]; - mem[256 * 15 + count] <= INIT_0F[count]; - mem[256 * 16 + count] <= INIT_10[count]; - mem[256 * 17 + count] <= INIT_11[count]; - mem[256 * 18 + count] <= INIT_12[count]; - mem[256 * 19 + count] <= INIT_13[count]; - mem[256 * 20 + count] <= INIT_14[count]; - mem[256 * 21 + count] <= INIT_15[count]; - mem[256 * 22 + count] <= INIT_16[count]; - mem[256 * 23 + count] <= INIT_17[count]; - mem[256 * 24 + count] <= INIT_18[count]; - mem[256 * 25 + count] <= INIT_19[count]; - mem[256 * 26 + count] <= INIT_1A[count]; - mem[256 * 27 + count] <= INIT_1B[count]; - mem[256 * 28 + count] <= INIT_1C[count]; - mem[256 * 29 + count] <= INIT_1D[count]; - mem[256 * 30 + count] <= INIT_1E[count]; - mem[256 * 31 + count] <= INIT_1F[count]; - mem[256 * 32 + count] <= INIT_20[count]; - mem[256 * 33 + count] <= INIT_21[count]; - mem[256 * 34 + count] <= INIT_22[count]; - mem[256 * 35 + count] <= INIT_23[count]; - mem[256 * 36 + count] <= INIT_24[count]; - mem[256 * 37 + count] <= INIT_25[count]; - mem[256 * 38 + count] <= INIT_26[count]; - mem[256 * 39 + count] <= INIT_27[count]; - mem[256 * 40 + count] <= INIT_28[count]; - mem[256 * 41 + count] <= INIT_29[count]; - mem[256 * 42 + count] <= INIT_2A[count]; - mem[256 * 43 + count] <= INIT_2B[count]; - mem[256 * 44 + count] <= INIT_2C[count]; - mem[256 * 45 + count] <= INIT_2D[count]; - mem[256 * 46 + count] <= INIT_2E[count]; - mem[256 * 47 + count] <= INIT_2F[count]; - mem[256 * 48 + count] <= INIT_30[count]; - mem[256 * 49 + count] <= INIT_31[count]; - mem[256 * 50 + count] <= INIT_32[count]; - mem[256 * 51 + count] <= INIT_33[count]; - mem[256 * 52 + count] <= INIT_34[count]; - mem[256 * 53 + count] <= INIT_35[count]; - mem[256 * 54 + count] <= INIT_36[count]; - mem[256 * 55 + count] <= INIT_37[count]; - mem[256 * 56 + count] <= INIT_38[count]; - mem[256 * 57 + count] <= INIT_39[count]; - mem[256 * 58 + count] <= INIT_3A[count]; - mem[256 * 59 + count] <= INIT_3B[count]; - mem[256 * 60 + count] <= INIT_3C[count]; - mem[256 * 61 + count] <= INIT_3D[count]; - mem[256 * 62 + count] <= INIT_3E[count]; - mem[256 * 63 + count] <= INIT_3F[count]; - end - address_collision <= 0; - address_collision_a_b <= 0; - address_collision_b_a <= 0; - change_clka <= 0; - change_clkb <= 0; - data_collision <= 0; - data_collision_a_b <= 0; - data_collision_b_a <= 0; - memory_collision <= 0; - memory_collision_a_b <= 0; - memory_collision_b_a <= 0; - setup_all_a_b <= 0; - setup_all_b_a <= 0; - setup_zero <= 0; - setup_rf_a_b <= 0; - setup_rf_b_a <= 0; - end - - assign data_addra_int = addra_int * 1; - assign data_addra_reg = addra_reg * 1; - assign data_addrb_int = addrb_int * 2; - assign data_addrb_reg = addrb_reg * 2; - - - initial begin - - display_flag = 1; - - case (SIM_COLLISION_CHECK) - - "NONE" : begin - assign setup_all_a_b = 1'b0; - assign setup_all_b_a = 1'b0; - assign setup_zero = 1'b0; - assign setup_rf_a_b = 1'b0; - assign setup_rf_b_a = 1'b0; - assign display_flag = 0; - end - "WARNING_ONLY" : begin - assign data_collision = 2'b00; - assign data_collision_a_b = 2'b00; - assign data_collision_b_a = 2'b00; - assign memory_collision = 1'b0; - assign memory_collision_a_b = 1'b0; - assign memory_collision_b_a = 1'b0; - end - "GENERATE_X_ONLY" : begin - assign display_flag = 0; - end - "ALL" : ; - default : begin - $display("Attribute Syntax Error : The Attribute SIM_COLLISION_CHECK on RAMB16_S1_S2 instance %m is set to %s. Legal values for this attribute are ALL, NONE, WARNING_ONLY or GENERATE_X_ONLY.", SIM_COLLISION_CHECK); - $finish; - end - - endcase // case(SIM_COLLISION_CHECK) - - end // initial begin - - - always @(posedge clka_int) begin - time_clka = $time; - #0 time_clkb_clka = time_clka - time_clkb; - change_clka = ~change_clka; - end - - always @(posedge clkb_int) begin - time_clkb = $time; - #0 time_clka_clkb = time_clkb - time_clka; - change_clkb = ~change_clkb; - end - - always @(change_clkb) begin - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_ALL)) - setup_all_a_b = 1; - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_READ_FIRST)) - setup_rf_a_b = 1; - end - - always @(change_clka) begin - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_ALL)) - setup_all_b_a = 1; - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_READ_FIRST)) - setup_rf_b_a = 1; - end - - always @(change_clkb or change_clka) begin - if ((time_clkb_clka == 0) && (time_clka_clkb == 0)) - setup_zero = 1; - end - - always @(posedge setup_zero) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_int[14:1] == data_addrb_int[14:1])) - memory_collision <= 1; - end - - always @(posedge setup_all_a_b or posedge setup_rf_a_b) begin - if ((ena_reg == 1) && (wea_reg == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_reg[14:1] == data_addrb_int[14:1])) - memory_collision_a_b <= 1; - end - - always @(posedge setup_all_b_a or posedge setup_rf_b_a) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_reg == 1) && (web_reg == 1) && - (data_addra_int[14:1] == data_addrb_reg[14:1])) - memory_collision_b_a <= 1; - end - - always @(posedge setup_all_a_b) begin - if (data_addra_reg[14:1] == data_addrb_int[14:1]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) - 6'b000011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b010011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b010111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b011011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b100011 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_a_b <= 0; - end - - - always @(posedge setup_all_b_a) begin - if (data_addra_int[14:1] == data_addrb_reg[14:1]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) - 6'b000011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b000111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b001011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b010111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b011011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b001001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b011001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b101001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_b_a <= 0; - end - - - always @(posedge setup_zero) begin - if (data_addra_int[14:1] == data_addrb_int[14:1]) begin - if ((ena_int == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_int}) - 6'b000011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision <= 2'b01; display_wa_rb; end - endcase - end - end - setup_zero <= 0; - end - - task display_ra_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S1_S2:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port A while a write was requested to the same address on Port B. The write will be successful however the read value on Port A is unknown until the next CLKA cycle.", $time/1000.0, addra_int); - end - endtask - - task display_wa_rb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S1_S2:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port B while a write was requested to the same address on Port A. The write will be successful however the read value on Port B is unknown until the next CLKB cycle.", $time/1000.0, addrb_int); - end - endtask - - task display_wa_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S1_S2:%m at simulation time %.3f ns\nA write was requested to the same address simultaneously at both Port A and Port B of the RAM. The contents written to the RAM at address location %h (hex) of Port A and address location %h (hex) of Port B are unknown.", $time/1000.0, addra_int, addrb_int); - end - endtask - - - always @(posedge setup_rf_a_b) begin - if (data_addra_reg[14:1] == data_addrb_int[14:1]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) -// 6'b000011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b001011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b010011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b100011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b100111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b101011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b001001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b011001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b101001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b010010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b010110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b011010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b100010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_a_b <= 0; - end - - - always @(posedge setup_rf_b_a) begin - if (data_addra_int[14:1] == data_addrb_reg[14:1]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) -// 6'b000011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b000111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b001011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b010011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b010111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b011011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b100011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end -// 6'b101011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b001001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b011001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b101001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_b_a <= 0; - end - - - always @(posedge clka_int) begin - addra_reg <= addra_int; - ena_reg <= ena_int; - ssra_reg <= ssra_int; - wea_reg <= wea_int; - end - - always @(posedge clkb_int) begin - addrb_reg <= addrb_int; - enb_reg <= enb_int; - ssrb_reg <= ssrb_int; - web_reg <= web_int; - end - - // Data - always @(posedge memory_collision) begin - for (dmi = 0; dmi < 1; dmi = dmi + 1) begin - mem[data_addra_int + dmi] <= 1'bX; - end - memory_collision <= 0; - end - - always @(posedge memory_collision_a_b) begin - for (dmi = 0; dmi < 1; dmi = dmi + 1) begin - mem[data_addra_reg + dmi] <= 1'bX; - end - memory_collision_a_b <= 0; - end - - always @(posedge memory_collision_b_a) begin - for (dmi = 0; dmi < 1; dmi = dmi + 1) begin - mem[data_addra_int + dmi] <= 1'bX; - end - memory_collision_b_a <= 0; - end - - always @(posedge data_collision[1]) begin - if (ssra_int == 0) begin - doa_out <= 1'bX; - end - data_collision[1] <= 0; - end - - always @(posedge data_collision[0]) begin - if (ssrb_int == 0) begin - for (dbi = 0; dbi < 1; dbi = dbi + 1) begin - dob_out[data_addra_int[0 : 0] + dbi] <= 1'bX; - end - end - data_collision[0] <= 0; - end - - always @(posedge data_collision_a_b[1]) begin - if (ssra_reg == 0) begin - doa_out <= 1'bX; - end - data_collision_a_b[1] <= 0; - end - - always @(posedge data_collision_a_b[0]) begin - if (ssrb_int == 0) begin - for (dbi = 0; dbi < 1; dbi = dbi + 1) begin - dob_out[data_addra_reg[0 : 0] + dbi] <= 1'bX; - end - end - data_collision_a_b[0] <= 0; - end - - always @(posedge data_collision_b_a[1]) begin - if (ssra_int == 0) begin - doa_out <= 1'bX; - end - data_collision_b_a[1] <= 0; - end - - always @(posedge data_collision_b_a[0]) begin - if (ssrb_reg == 0) begin - for (dbi = 0; dbi < 1; dbi = dbi + 1) begin - dob_out[data_addra_int[0 : 0] + dbi] <= 1'bX; - end - end - data_collision_b_a[0] <= 0; - end - - - initial begin - case (WRITE_MODE_A) - "WRITE_FIRST" : wr_mode_a <= 2'b00; - "READ_FIRST" : wr_mode_a <= 2'b01; - "NO_CHANGE" : wr_mode_a <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_A on RAMB16_S1_S2 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_A); - $finish; - end - endcase - end - - initial begin - case (WRITE_MODE_B) - "WRITE_FIRST" : wr_mode_b <= 2'b00; - "READ_FIRST" : wr_mode_b <= 2'b01; - "NO_CHANGE" : wr_mode_b <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_B on RAMB16_S1_S2 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_B); - $finish; - end - endcase - end - - // Port A - always @(posedge clka_int) begin - if (ena_int == 1'b1) begin - if (ssra_int == 1'b1) begin - doa_out[0] <= SRVAL_A[0]; - end - else begin - if (wea_int == 1'b1) begin - if (wr_mode_a == 2'b00) begin - doa_out <= dia_int; - end - else if (wr_mode_a == 2'b01) begin - doa_out[0] <= mem[data_addra_int + 0]; - end - end - else begin - doa_out[0] <= mem[data_addra_int + 0]; - end - end - end - end - - always @(posedge clka_int) begin - if (ena_int == 1'b1 && wea_int == 1'b1) begin - mem[data_addra_int + 0] <= dia_int[0]; - end - end - - // Port B - always @(posedge clkb_int) begin - if (enb_int == 1'b1) begin - if (ssrb_int == 1'b1) begin - dob_out[0] <= SRVAL_B[0]; - dob_out[1] <= SRVAL_B[1]; - end - else begin - if (web_int == 1'b1) begin - if (wr_mode_b == 2'b00) begin - dob_out <= dib_int; - end - else if (wr_mode_b == 2'b01) begin - dob_out[0] <= mem[data_addrb_int + 0]; - dob_out[1] <= mem[data_addrb_int + 1]; - end - end - else begin - dob_out[0] <= mem[data_addrb_int + 0]; - dob_out[1] <= mem[data_addrb_int + 1]; - end - end - end - end - - always @(posedge clkb_int) begin - if (enb_int == 1'b1 && web_int == 1'b1) begin - mem[data_addrb_int + 0] <= dib_int[0]; - mem[data_addrb_int + 1] <= dib_int[1]; - end - end - - specify - (CLKA *> DOA) = (100, 100); - (CLKB *> DOB) = (100, 100); - endspecify - -endmodule - -`else - -// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/unisims/RAMB16_S1_S2.v,v 1.10 2005/03/14 22:54:41 wloo Exp $ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 1995/2005 Xilinx, Inc. -// All Right Reserved. -/////////////////////////////////////////////////////////////////////////////// -// ____ ____ -// / /\/ / -// /___/ \ / Vendor : Xilinx -// \ \ \/ Version : 8.1i (I.13) -// \ \ Description : Xilinx Timing Simulation Library Component -// / / 16K-Bit Data and 2K-Bit Parity Dual Port Block RAM -// /___/ /\ Filename : RAMB16_S1_S2.v -// \ \ / \ Timestamp : Thu Mar 10 16:44:01 PST 2005 -// \___\/\___\ -// -// Revision: -// 03/23/04 - Initial version. -// 03/10/05 - Initialized outputs. -// End Revision - -`timescale 1 ps/1 ps - -module RAMB16_S1_S2 (DOA, DOB, ADDRA, ADDRB, CLKA, CLKB, DIA, DIB, ENA, ENB, SSRA, SSRB, WEA, WEB); - - parameter INIT_A = 1'h0; - parameter INIT_B = 2'h0; - parameter SRVAL_A = 1'h0; - parameter SRVAL_B = 2'h0; - parameter WRITE_MODE_A = "WRITE_FIRST"; - parameter WRITE_MODE_B = "WRITE_FIRST"; - parameter SIM_COLLISION_CHECK = "ALL"; - localparam SETUP_ALL = 1000; - localparam SETUP_READ_FIRST = 3000; - - parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - - output [0:0] DOA; - output [1:0] DOB; - - input [13:0] ADDRA; - input [0:0] DIA; - input ENA, CLKA, WEA, SSRA; - input [12:0] ADDRB; - input [1:0] DIB; - input ENB, CLKB, WEB, SSRB; - - reg [0:0] doa_out = INIT_A[0:0]; - reg [1:0] dob_out = INIT_B[1:0]; - - reg [1:0] mem [8191:0]; - - reg [8:0] count, countp; - reg [1:0] wr_mode_a, wr_mode_b; - - reg [5:0] dmi, dbi; - reg [5:0] pmi, pbi; - - wire [13:0] addra_int; - reg [13:0] addra_reg; - wire [0:0] dia_int; - wire ena_int, clka_int, wea_int, ssra_int; - reg ena_reg, wea_reg, ssra_reg; - wire [12:0] addrb_int; - reg [12:0] addrb_reg; - wire [1:0] dib_int; - wire enb_int, clkb_int, web_int, ssrb_int; - reg display_flag, output_flag; - reg enb_reg, web_reg, ssrb_reg; - - time time_clka, time_clkb; - time time_clka_clkb; - time time_clkb_clka; - - reg setup_all_a_b; - reg setup_all_b_a; - reg setup_zero; - reg setup_rf_a_b; - reg setup_rf_b_a; - reg [1:0] data_collision, data_collision_a_b, data_collision_b_a; - reg memory_collision, memory_collision_a_b, memory_collision_b_a; - reg change_clka; - reg change_clkb; - - wire [14:0] data_addra_int; - wire [14:0] data_addra_reg; - wire [14:0] data_addrb_int; - wire [14:0] data_addrb_reg; - - wire dia_enable = ena_int && wea_int; - wire dib_enable = enb_int && web_int; - - tri0 GSR = glbl.GSR; - wire gsr_int; - - buf b_gsr (gsr_int, GSR); - - buf b_doa [0:0] (DOA, doa_out); - buf b_addra [13:0] (addra_int, ADDRA); - buf b_dia [0:0] (dia_int, DIA); - buf b_ena (ena_int, ENA); - buf b_clka (clka_int, CLKA); - buf b_ssra (ssra_int, SSRA); - buf b_wea (wea_int, WEA); - - buf b_dob [1:0] (DOB, dob_out); - buf b_addrb [12:0] (addrb_int, ADDRB); - buf b_dib [1:0] (dib_int, DIB); - buf b_enb (enb_int, ENB); - buf b_clkb (clkb_int, CLKB); - buf b_ssrb (ssrb_int, SSRB); - buf b_web (web_int, WEB); - - - always @(gsr_int) - if (gsr_int) begin - assign {doa_out} = INIT_A; - assign {dob_out} = INIT_B; - end - else begin - deassign doa_out; - deassign dob_out; - end - - - initial begin - - for (count = 0; count < 128; count = count + 1) begin - mem[count] = INIT_00[(count * 2) +: 2]; - mem[128 * 1 + count] = INIT_01[(count * 2) +: 2]; - mem[128 * 2 + count] = INIT_02[(count * 2) +: 2]; - mem[128 * 3 + count] = INIT_03[(count * 2) +: 2]; - mem[128 * 4 + count] = INIT_04[(count * 2) +: 2]; - mem[128 * 5 + count] = INIT_05[(count * 2) +: 2]; - mem[128 * 6 + count] = INIT_06[(count * 2) +: 2]; - mem[128 * 7 + count] = INIT_07[(count * 2) +: 2]; - mem[128 * 8 + count] = INIT_08[(count * 2) +: 2]; - mem[128 * 9 + count] = INIT_09[(count * 2) +: 2]; - mem[128 * 10 + count] = INIT_0A[(count * 2) +: 2]; - mem[128 * 11 + count] = INIT_0B[(count * 2) +: 2]; - mem[128 * 12 + count] = INIT_0C[(count * 2) +: 2]; - mem[128 * 13 + count] = INIT_0D[(count * 2) +: 2]; - mem[128 * 14 + count] = INIT_0E[(count * 2) +: 2]; - mem[128 * 15 + count] = INIT_0F[(count * 2) +: 2]; - mem[128 * 16 + count] = INIT_10[(count * 2) +: 2]; - mem[128 * 17 + count] = INIT_11[(count * 2) +: 2]; - mem[128 * 18 + count] = INIT_12[(count * 2) +: 2]; - mem[128 * 19 + count] = INIT_13[(count * 2) +: 2]; - mem[128 * 20 + count] = INIT_14[(count * 2) +: 2]; - mem[128 * 21 + count] = INIT_15[(count * 2) +: 2]; - mem[128 * 22 + count] = INIT_16[(count * 2) +: 2]; - mem[128 * 23 + count] = INIT_17[(count * 2) +: 2]; - mem[128 * 24 + count] = INIT_18[(count * 2) +: 2]; - mem[128 * 25 + count] = INIT_19[(count * 2) +: 2]; - mem[128 * 26 + count] = INIT_1A[(count * 2) +: 2]; - mem[128 * 27 + count] = INIT_1B[(count * 2) +: 2]; - mem[128 * 28 + count] = INIT_1C[(count * 2) +: 2]; - mem[128 * 29 + count] = INIT_1D[(count * 2) +: 2]; - mem[128 * 30 + count] = INIT_1E[(count * 2) +: 2]; - mem[128 * 31 + count] = INIT_1F[(count * 2) +: 2]; - mem[128 * 32 + count] = INIT_20[(count * 2) +: 2]; - mem[128 * 33 + count] = INIT_21[(count * 2) +: 2]; - mem[128 * 34 + count] = INIT_22[(count * 2) +: 2]; - mem[128 * 35 + count] = INIT_23[(count * 2) +: 2]; - mem[128 * 36 + count] = INIT_24[(count * 2) +: 2]; - mem[128 * 37 + count] = INIT_25[(count * 2) +: 2]; - mem[128 * 38 + count] = INIT_26[(count * 2) +: 2]; - mem[128 * 39 + count] = INIT_27[(count * 2) +: 2]; - mem[128 * 40 + count] = INIT_28[(count * 2) +: 2]; - mem[128 * 41 + count] = INIT_29[(count * 2) +: 2]; - mem[128 * 42 + count] = INIT_2A[(count * 2) +: 2]; - mem[128 * 43 + count] = INIT_2B[(count * 2) +: 2]; - mem[128 * 44 + count] = INIT_2C[(count * 2) +: 2]; - mem[128 * 45 + count] = INIT_2D[(count * 2) +: 2]; - mem[128 * 46 + count] = INIT_2E[(count * 2) +: 2]; - mem[128 * 47 + count] = INIT_2F[(count * 2) +: 2]; - mem[128 * 48 + count] = INIT_30[(count * 2) +: 2]; - mem[128 * 49 + count] = INIT_31[(count * 2) +: 2]; - mem[128 * 50 + count] = INIT_32[(count * 2) +: 2]; - mem[128 * 51 + count] = INIT_33[(count * 2) +: 2]; - mem[128 * 52 + count] = INIT_34[(count * 2) +: 2]; - mem[128 * 53 + count] = INIT_35[(count * 2) +: 2]; - mem[128 * 54 + count] = INIT_36[(count * 2) +: 2]; - mem[128 * 55 + count] = INIT_37[(count * 2) +: 2]; - mem[128 * 56 + count] = INIT_38[(count * 2) +: 2]; - mem[128 * 57 + count] = INIT_39[(count * 2) +: 2]; - mem[128 * 58 + count] = INIT_3A[(count * 2) +: 2]; - mem[128 * 59 + count] = INIT_3B[(count * 2) +: 2]; - mem[128 * 60 + count] = INIT_3C[(count * 2) +: 2]; - mem[128 * 61 + count] = INIT_3D[(count * 2) +: 2]; - mem[128 * 62 + count] = INIT_3E[(count * 2) +: 2]; - mem[128 * 63 + count] = INIT_3F[(count * 2) +: 2]; - end - - - change_clka <= 0; - change_clkb <= 0; - data_collision <= 0; - data_collision_a_b <= 0; - data_collision_b_a <= 0; - memory_collision <= 0; - memory_collision_a_b <= 0; - memory_collision_b_a <= 0; - setup_all_a_b <= 0; - setup_all_b_a <= 0; - setup_zero <= 0; - setup_rf_a_b <= 0; - setup_rf_b_a <= 0; - end - - assign data_addra_int = addra_int * 1; - assign data_addra_reg = addra_reg * 1; - assign data_addrb_int = addrb_int * 2; - assign data_addrb_reg = addrb_reg * 2; - - - initial begin - - display_flag = 1; - output_flag = 1; - - case (SIM_COLLISION_CHECK) - - "NONE" : begin - output_flag = 0; - display_flag = 0; - end - "WARNING_ONLY" : output_flag = 0; - "GENERATE_ONLY" : display_flag = 0; - "ALL" : ; - - default : begin - $display("Attribute Syntax Error : The Attribute SIM_COLLISION_CHECK on RAMB16_S1_S2 instance %m is set to %s. Legal values for this attribute are ALL, NONE, WARNING_ONLY or GENERATE_ONLY.", SIM_COLLISION_CHECK); - $finish; - end - - endcase // case(SIM_COLLISION_CHECK) - - end // initial begin - - - always @(posedge clka_int) begin - if ((output_flag || display_flag)) begin - time_clka = $time; - #0 time_clkb_clka = time_clka - time_clkb; - change_clka = ~change_clka; - end - end - - always @(posedge clkb_int) begin - if ((output_flag || display_flag)) begin - time_clkb = $time; - #0 time_clka_clkb = time_clkb - time_clka; - change_clkb = ~change_clkb; - end - end - - always @(change_clkb) begin - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_ALL)) - setup_all_a_b = 1; - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_READ_FIRST)) - setup_rf_a_b = 1; - end - - always @(change_clka) begin - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_ALL)) - setup_all_b_a = 1; - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_READ_FIRST)) - setup_rf_b_a = 1; - end - - always @(change_clkb or change_clka) begin - if ((time_clkb_clka == 0) && (time_clka_clkb == 0)) - setup_zero = 1; - end - - always @(posedge setup_zero) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_int[14:1] == data_addrb_int[14:1])) - memory_collision <= 1; - end - - always @(posedge setup_all_a_b or posedge setup_rf_a_b) begin - if ((ena_reg == 1) && (wea_reg == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_reg[14:1] == data_addrb_int[14:1])) - memory_collision_a_b <= 1; - end - - always @(posedge setup_all_b_a or posedge setup_rf_b_a) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_reg == 1) && (web_reg == 1) && - (data_addra_int[14:1] == data_addrb_reg[14:1])) - memory_collision_b_a <= 1; - end - - always @(posedge setup_all_a_b) begin - if (data_addra_reg[14:1] == data_addrb_int[14:1]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) - 6'b000011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b010011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b010111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b011011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b100011 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_a_b <= 0; - end - - - always @(posedge setup_all_b_a) begin - if (data_addra_int[14:1] == data_addrb_reg[14:1]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) - 6'b000011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b000111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b001011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b010111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b011011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b001001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b011001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b101001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_b_a <= 0; - end - - - always @(posedge setup_zero) begin - if (data_addra_int[14:1] == data_addrb_int[14:1]) begin - if ((ena_int == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_int}) - 6'b000011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision <= 2'b01; display_wa_rb; end - endcase - end - end - setup_zero <= 0; - end - - task display_ra_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S1_S2:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port A while a write was requested to the same address on Port B. The write will be successful however the read value on Port A is unknown until the next CLKA cycle.", $time/1000.0, addra_int); - end - endtask - - task display_wa_rb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S1_S2:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port B while a write was requested to the same address on Port A. The write will be successful however the read value on Port B is unknown until the next CLKB cycle.", $time/1000.0, addrb_int); - end - endtask - - task display_wa_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S1_S2:%m at simulation time %.3f ns\nA write was requested to the same address simultaneously at both Port A and Port B of the RAM. The contents written to the RAM at address location %h (hex) of Port A and address location %h (hex) of Port B are unknown.", $time/1000.0, addra_int, addrb_int); - end - endtask - - - always @(posedge setup_rf_a_b) begin - if (data_addra_reg[14:1] == data_addrb_int[14:1]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) -// 6'b000011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b001011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b010011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b100011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b100111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b101011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b001001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b011001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b101001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b010010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b010110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b011010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b100010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_a_b <= 0; - end - - - always @(posedge setup_rf_b_a) begin - if (data_addra_int[14:1] == data_addrb_reg[14:1]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) -// 6'b000011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b000111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b001011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b010011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b010111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b011011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b100011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end -// 6'b101011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b001001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b011001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b101001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_b_a <= 0; - end - - - always @(posedge clka_int) begin - if ((output_flag || display_flag)) begin - addra_reg <= addra_int; - ena_reg <= ena_int; - ssra_reg <= ssra_int; - wea_reg <= wea_int; - end - end - - always @(posedge clkb_int) begin - if ((output_flag || display_flag)) begin - addrb_reg <= addrb_int; - enb_reg <= enb_int; - ssrb_reg <= ssrb_int; - web_reg <= web_int; - end - end - - - // Data - always @(posedge memory_collision) begin - if ((output_flag || display_flag)) begin - mem[addra_int[13:1]][addra_int[0:0] * 1 +: 1] <= 1'bx; - memory_collision <= 0; - end - - end - - always @(posedge memory_collision_a_b) begin - if ((output_flag || display_flag)) begin - mem[addra_reg[13:1]][addra_reg[0:0] * 1 +: 1] <= 1'bx; - memory_collision_a_b <= 0; - end - end - - always @(posedge memory_collision_b_a) begin - if ((output_flag || display_flag)) begin - mem[addra_int[13:1]][addra_int[0:0] * 1 +: 1] <= 1'bx; - memory_collision_b_a <= 0; - end - end - - always @(posedge data_collision[1]) begin - if (ssra_int == 0 && output_flag) begin - doa_out <= #100 1'bX; - end - data_collision[1] <= 0; - end - - always @(posedge data_collision[0]) begin - if (ssrb_int == 0 && output_flag) begin - dob_out[addra_int[0:0] * 1 +: 1] <= #100 1'bX; - end - data_collision[0] <= 0; - end - - always @(posedge data_collision_a_b[1]) begin - if (ssra_reg == 0 && output_flag) begin - doa_out <= #100 1'bX; - end - data_collision_a_b[1] <= 0; - end - - always @(posedge data_collision_a_b[0]) begin - if (ssrb_int == 0 && output_flag) begin - dob_out[addra_reg[0:0] * 1 +: 1] <= #100 1'bX; - end - data_collision_a_b[0] <= 0; - end - - always @(posedge data_collision_b_a[1]) begin - if (ssra_int == 0 && output_flag) begin - doa_out <= #100 1'bX; - end - data_collision_b_a[1] <= 0; - end - - always @(posedge data_collision_b_a[0]) begin - if (ssrb_reg == 0 && output_flag) begin - dob_out[addra_int[0:0] * 1 +: 1] <= #100 1'bX; - end - data_collision_b_a[0] <= 0; - end - - - initial begin - case (WRITE_MODE_A) - "WRITE_FIRST" : wr_mode_a <= 2'b00; - "READ_FIRST" : wr_mode_a <= 2'b01; - "NO_CHANGE" : wr_mode_a <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_A on RAMB16_S1_S2 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_A); - $finish; - end - endcase - end - - initial begin - case (WRITE_MODE_B) - "WRITE_FIRST" : wr_mode_b <= 2'b00; - "READ_FIRST" : wr_mode_b <= 2'b01; - "NO_CHANGE" : wr_mode_b <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_B on RAMB16_S1_S2 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_B); - $finish; - end - endcase - end - - - // Port A - always @(posedge clka_int) begin - - if (ena_int == 1'b1) begin - - if (ssra_int == 1'b1) begin - {doa_out} <= #100 SRVAL_A; - end - else begin - if (wea_int == 1'b1) begin - if (wr_mode_a == 2'b00) begin - doa_out <= #100 dia_int; - end - else if (wr_mode_a == 2'b01) begin - - doa_out <= #100 mem[addra_int[13:1]][addra_int[0:0] * 1 +: 1]; - - end - end - else begin - - doa_out <= #100 mem[addra_int[13:1]][addra_int[0:0] * 1 +: 1]; - - end - end - - // memory - if (wea_int == 1'b1) begin - mem[addra_int[13:1]][addra_int[0:0] * 1 +: 1] <= dia_int; - end - - end - end - - - // Port B - always @(posedge clkb_int) begin - - if (enb_int == 1'b1) begin - - if (ssrb_int == 1'b1) begin - {dob_out} <= #100 SRVAL_B; - end - else begin - if (web_int == 1'b1) begin - if (wr_mode_b == 2'b00) begin - dob_out <= #100 dib_int; - end - else if (wr_mode_b == 2'b01) begin - dob_out <= #100 mem[addrb_int]; - end - end - else begin - dob_out <= #100 mem[addrb_int]; - end - end - - // memory - if (web_int == 1'b1) begin - mem[addrb_int] <= dib_int; - end - - end - end - - -endmodule - -`endif diff --git a/eth/demo/verilog/demo.ucf b/eth/demo/verilog/demo.ucf deleted file mode 100644 index f3562b46b..000000000 --- a/eth/demo/verilog/demo.ucf +++ /dev/null @@ -1,52 +0,0 @@ -NET "Reset_n" LOC = "C15"; // PushButton #4
-NET "Clk_100M" LOC = "B15";
-NET "Clk_125M" LOC = "A16"; // GMII only
-
-NET "RS232_TXD" LOC = "A9";
-NET "RS232_RXD" LOC = "F1";
-
-NET "USB_TXD" LOC = "D1";
-NET "USB_RXD" LOC = "A8";
-
-NET "PHY_RESET_n" LOC = "E25";
-
-NET "PHY_RXC" LOC = "B13";
-NET "PHY_RXD<0>" LOC = "D16";
-NET "PHY_RXD<1>" LOC = "C16";
-NET "PHY_RXD<2>" LOC = "D15";
-NET "PHY_RXD<3>" LOC = "D14";
-NET "PHY_RXD<4>" LOC = "E14";
-NET "PHY_RXD<5>" LOC = "F14";
-NET "PHY_RXD<6>" LOC = "F11";
-NET "PHY_RXD<7>" LOC = "F12";
-NET "PHY_RXDV" LOC = "F13";
-NET "PHY_RXER" LOC = "E13";
-
-NET "PHY_GTX_CLK" LOC = "C26"; // GMII only
-NET "PHY_TXC" LOC = "A10";
-NET "PHY_TXD<0>" LOC = "H26";
-NET "PHY_TXD<1>" LOC = "H24";
-NET "PHY_TXD<2>" LOC = "G26";
-NET "PHY_TXD<3>" LOC = "G24";
-NET "PHY_TXD<4>" LOC = "F26";
-NET "PHY_TXD<5>" LOC = "F24";
-NET "PHY_TXD<6>" LOC = "E26";
-NET "PHY_TXD<7>" LOC = "E24";
-NET "PHY_TXEN" LOC = "D26";
-NET "PHY_TXER" LOC = "D24";
-
-NET "PHY_COL" LOC = "B24";
-NET "PHY_CRS" LOC = "D25";
-
-NET "PHY_MDC" LOC = "G25";
-NET "PHY_MDIO" LOC = "H25";
-
-NET "LED<1>" LOC = "D13"; // LED #1-4
-NET "LED<2>" LOC = "D12";
-NET "LED<3>" LOC = "C11";
-NET "LED<4>" LOC = "D11";
-
-NET "Clk_100M" PERIOD = 10.000 ; # 100 MHz
-NET "Clk_125M" PERIOD = 8.000 ; # 125 MHz
-NET "PHY_RXC" PERIOD = 8.000 ; # 125 MHz
-NET "PHY_TXC" PERIOD = 8.000 ; # 125 MHz
diff --git a/eth/demo/verilog/demo.v b/eth/demo/verilog/demo.v deleted file mode 100644 index 649903c9a..000000000 --- a/eth/demo/verilog/demo.v +++ /dev/null @@ -1,378 +0,0 @@ -module demo(
- Reset_n,
- Clk_100M,
- Clk_125M, // GMII only
-
- RS232_TXD,
- RS232_RXD,
-
- USB_TXD,
- USB_RXD,
-
- //--- 10/100/1000BASE-T Ethernet PHY (MII/GMII)
- PHY_RESET_n,
-
- PHY_RXC,
- PHY_RXD,
- PHY_RXDV,
- PHY_RXER,
-
- PHY_GTX_CLK, // GMII only
- PHY_TXC,
- PHY_TXD,
- PHY_TXEN,
- PHY_TXER,
-
- PHY_COL,
- PHY_CRS,
-
- PHY_MDC,
- PHY_MDIO,
-
- // Misc. I/Os
- LED,
- Button
-);
-
- input Reset_n;
- input Clk_100M;
- input Clk_125M; // GMII
-
- output RS232_TXD;
- input RS232_RXD;
-
- output USB_TXD;
- input USB_RXD;
-
- //--- 10/100/1000BASE-T Ethernet PHY (MII/GMII)
- output PHY_RESET_n;
-
- input PHY_RXC;
- input [7:0] PHY_RXD;
- input PHY_RXDV;
- input PHY_RXER;
-
- output PHY_GTX_CLK; // GMII only
- input PHY_TXC;
- output [7:0] PHY_TXD;
- output PHY_TXEN;
- output PHY_TXER;
-
- input PHY_COL;
- input PHY_CRS;
-
- output PHY_MDC;
- inout PHY_MDIO;
-
- // Misc. I/Os
- output [1:4] LED;
-
- input [1:4] Button;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- // Rename to "standard" core clock name
- wire Clk = Clk_100M;
-
- reg [27:0] Counter;
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- Counter <= 0;
- else
- Counter <= Counter + 1;
-
- assign LED[1:4] = Counter[27:24];
-
- //-------------------------------------------------------------------------
- // Instantiation of sub-modules
- //-------------------------------------------------------------------------
-
- //--- UART ----------------------------------------------------------------
-
- wire UART_RXD;
- wire UART_TXD;
- wire UART_RxValid;
- wire [7:0] UART_RxData;
- wire UART_TxReady;
- wire UART_TxValid;
- wire [7:0] UART_TxData;
-
- demo_uart demo_uart(
- .Reset_n( Reset_n ),
- .Clk ( Clk ),
-
- // Interface to UART PHY
- .RXD_i( UART_RXD ),
- .TXD_o( UART_TXD ),
-
- // Clk is divided by (Prescaler+1) to generate 16x the bitrate
-`ifdef EHDL_SIMULATION
- .Prescaler_i( 16'd3 ), // Corresponds to VERY FAST - for simulation only!
-`else
- .Prescaler_i( 16'd650 ), // Corresponds to 9600 baud (assuming 100 MHz clock)
-`endif
-
- // Pulsed when RxData is valid
- .RxValid_o( UART_RxValid ),
- .RxData_o ( UART_RxData ),
-
- // Asserted when ready for a new Tx byte
- .TxReady_o( UART_TxReady ),
-
- // Pulsed when TxData is valid
- .TxValid_i( UART_TxValid ),
- .TxData_i ( UART_TxData )
- );
-
- // Transmit & receive in parallel on either RS232 or USB/RS232 interface
-// assign UART_RXD = RS232_RXD & USB_RXD; // RS232 signals are high when inactive
- assign UART_RXD = RS232_RXD;
-
- assign RS232_TXD = UART_TXD;
- assign USB_TXD = UART_TXD;
-
- //--- UART-to-Wishbone Master ---------------------------------------------
-
- wire WB_STB_ETH;
- wire WB_STB_PDM;
- wire WB_STB_PG;
- wire WB_CYC;
- wire [14:0] WB_ADR;
- wire WB_WE;
- wire [15:0] WB_DAT_Wr;
- wire [15:0] WB_DAT_Rd;
- wire WB_ACK;
-
- demo_wishbone_master demo_wishbone_master(
- .Reset_n( Reset_n ),
- .Clk ( Clk ),
-
- //--- UART interface
-
- // Pulsed when RxData_i is valid
- .RxValid_i( UART_RxValid ),
- .RxData_i ( UART_RxData ),
-
- // Asserted when ready for a new Tx byte
- .TxReady_i( UART_TxReady ),
-
- // Pulsed when TxData_o is valid
- .TxValid_o( UART_TxValid ),
- .TxData_o ( UART_TxData ),
-
- //--- Wishbone interface
- .STB_ETH_O( WB_STB_ETH ),
- .STB_PDM_O( WB_STB_PDM ),
- .STB_PG_O ( WB_STB_PG ),
- .CYC_O ( WB_CYC ),
- .ADR_O ( WB_ADR ),
- .WE_O ( WB_WE ),
- .DAT_O ( WB_DAT_Wr ),
- .DAT_I ( WB_DAT_Rd ),
- .ACK_I ( WB_ACK )
- );
-
- //--- Wishbone clients ----------------------------------------------------
-
- //--- Packet Descriptor Memory --------------------------------------------
-
- wire [15:0] WB_DAT_Rd_PDM;
- wire WB_ACK_PDM;
-
- wire PDM_Rd;
- wire [13:0] PDM_Addr;
- wire [31:0] PDM_RdData;
-
- demo_packet_descriptor_memory demo_packet_descriptor_memory(
- .Reset_n( Reset_n ),
- .Clk ( Clk ),
-
- //--- Wishbone interface
- .STB_I( WB_STB_PDM ),
- .CYC_I( WB_CYC ),
- .ADR_I( WB_ADR ),
- .WE_I ( WB_WE ),
- .DAT_I( WB_DAT_Wr ),
- .DAT_O( WB_DAT_Rd_PDM ),
- .ACK_O( WB_ACK_PDM ),
-
- //--- Packet Generator interface
- // RdData_o is always valid exactly one clock after Addr_i changes
- // and Rd_i is asserted
- .Rd_i ( PDM_Rd ),
- .Addr_i ( PDM_Addr ),
- .RdData_o( PDM_RdData )
- );
-
- //--- Packet Generator ----------------------------------------------------
-
- wire [15:0] WB_DAT_Rd_PG;
- wire WB_ACK_PG;
-
- wire Rx_mac_ra;
- wire Rx_mac_rd;
- wire [31:0] Rx_mac_data;
- wire [1:0] Rx_mac_BE;
- wire Rx_mac_pa;
- wire Rx_mac_sop;
- wire Rx_mac_err;
- wire Rx_mac_eop;
-
- wire Tx_mac_wa;
- wire Tx_mac_wr;
- wire [31:0] Tx_mac_data;
- wire [1:0] Tx_mac_BE;
- wire Tx_mac_sop;
- wire Tx_mac_eop;
-
- demo_packet_generator demo_packet_generator(
- .Reset_n( Reset_n ),
- .Clk ( Clk ),
-
- //--- Wishbone interface
- .STB_I( WB_STB_PG ),
- .CYC_I( WB_CYC ),
- .ADR_I( WB_ADR[1:0] ),
- .WE_I ( WB_WE ),
- .DAT_I( WB_DAT_Wr ),
- .DAT_O( WB_DAT_Rd_PG ),
- .ACK_O( WB_ACK_PG ),
-
- //--- Packet Descriptor Memory interface
- // RdData_i is always valid exactly one clock after Addr_o changes
- // and Rd_o is asserted
- .Rd_o ( PDM_Rd ),
- .Addr_o ( PDM_Addr ),
- .RdData_i( PDM_RdData ),
-
- //--- User (packet) interface
- .Rx_mac_ra ( Rx_mac_ra ),
- .Rx_mac_rd ( Rx_mac_rd ),
- .Rx_mac_data( Rx_mac_data ),
- .Rx_mac_BE ( Rx_mac_BE ),
- .Rx_mac_pa ( Rx_mac_pa ),
- .Rx_mac_sop ( Rx_mac_sop ),
- .Rx_mac_err ( Rx_mac_err ),
- .Rx_mac_eop ( Rx_mac_eop ),
-
- .Tx_mac_wa ( Tx_mac_wa ),
- .Tx_mac_wr ( Tx_mac_wr ),
- .Tx_mac_data( Tx_mac_data ),
- .Tx_mac_BE ( Tx_mac_BE ),
- .Tx_mac_sop ( Tx_mac_sop ),
- .Tx_mac_eop ( Tx_mac_eop )
- );
-
- //--- Simple Wishbone client ----------------------------------------------
-
- reg [15:0] Reg1;
- reg [15:0] Reg2;
-
- reg WB_ACK_Reg;
- reg [15:0] WB_DAT_Reg;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- WB_ACK_Reg <= 0;
- WB_DAT_Reg <= 'b0;
-
- Reg1 <= 16'h1234;
- Reg2 <= 16'hABCD;
- end
- else
- begin
- WB_ACK_Reg <= 0;
- if ( WB_CYC & ~( WB_STB_ETH | WB_STB_PG | WB_STB_PDM ) )
- begin
- WB_ACK_Reg <= 1;
- if ( WB_WE )
- begin
- if ( WB_ADR[0] )
- Reg2 <= WB_DAT_Wr;
- else
- Reg1 <= WB_DAT_Wr;
- end
- else
- begin
- if ( WB_ADR[0] )
- WB_DAT_Reg <= Reg2;
- else
- WB_DAT_Reg <= Reg1;
- end
- end
- end
-
- //--- DUT - Ethernet Core -------------------------------------------------
-
- wire [15:0] WB_DAT_Rd_ETH;
- wire WB_ACK_ETH;
-
- wire [2:0] Speed;
-
- MAC_top dut(
- // System signals
- .Clk_125M( Clk_125M ),
- .Clk_user( Clk ),
- .Speed ( Speed ),
-
- // Wishbone compliant core host interface
- .RST_I( ~Reset_n ),
- .CLK_I( Clk ),
- .STB_I( WB_STB_ETH ),
- .CYC_I( WB_CYC ),
- .ADR_I( WB_ADR[6:0] ),
- .WE_I ( WB_WE ),
- .DAT_I( WB_DAT_Wr ),
- .DAT_O( WB_DAT_Rd_ETH ),
- .ACK_O( WB_ACK_ETH ),
-
- // User (packet) interface
- .Rx_mac_ra ( Rx_mac_ra ),
- .Rx_mac_rd ( Rx_mac_rd ),
- .Rx_mac_data( Rx_mac_data ),
- .Rx_mac_BE ( Rx_mac_BE ),
- .Rx_mac_pa ( Rx_mac_pa ),
- .Rx_mac_sop ( Rx_mac_sop ),
- .Rx_mac_err ( Rx_mac_err ),
- .Rx_mac_eop ( Rx_mac_eop ),
-
- .Tx_mac_wa ( Tx_mac_wa ),
- .Tx_mac_wr ( Tx_mac_wr ),
- .Tx_mac_data( Tx_mac_data ),
- .Tx_mac_BE ( Tx_mac_BE ),
- .Tx_mac_sop ( Tx_mac_sop ),
- .Tx_mac_eop ( Tx_mac_eop ),
-
- // PHY interface (GMII/MII)
- .Gtx_clk( PHY_GTX_CLK ), // Used only in GMII mode
- .Rx_clk ( PHY_RXC ),
- .Tx_clk ( PHY_TXC ), // Used only in MII mode
- .Tx_er ( PHY_TXER ),
- .Tx_en ( PHY_TXEN ),
- .Txd ( PHY_TXD ),
- .Rx_er ( PHY_RXER ),
- .Rx_dv ( PHY_RXDV ),
- .Rxd ( PHY_RXD ),
- .Crs ( PHY_CRS ),
- .Col ( PHY_COL ),
-
- // MDIO interface (to PHY)
- .Mdio( PHY_MDIO ),
- .Mdc ( PHY_MDC )
- );
-
- //--- Combination of Wishbone read data and acknowledge -------------------
-
- assign WB_DAT_Rd = ({16{WB_ACK_Reg}} & WB_DAT_Reg ) |
- ({16{WB_ACK_PDM}} & WB_DAT_Rd_PDM) |
- ({16{WB_ACK_PG }} & WB_DAT_Rd_PG ) |
- ({16{WB_ACK_ETH}} & WB_DAT_Rd_ETH);
-
- assign WB_ACK = WB_ACK_Reg | WB_ACK_PDM | WB_ACK_PG | WB_ACK_ETH;
-
- assign PHY_RESET_n = Reset_n;
-
-endmodule
diff --git a/eth/demo/verilog/demo_packet_descriptor_memory.v b/eth/demo/verilog/demo_packet_descriptor_memory.v deleted file mode 100644 index a5588a7d1..000000000 --- a/eth/demo/verilog/demo_packet_descriptor_memory.v +++ /dev/null @@ -1,384 +0,0 @@ -module demo_packet_descriptor_memory(
- Reset_n,
- Clk,
-
- //--- Wishbone interface
- STB_I,
- CYC_I,
- ADR_I,
- WE_I,
- DAT_I,
- DAT_O,
- ACK_O,
-
- //--- Packet Generator interface
- // RdData_o is always valid exactly one clock after Addr_i changes
- // and Rd_i is asserted
- Rd_i,
- Addr_i,
- RdData_o
-);
-
- input Reset_n;
- input Clk;
-
- //--- Wishbone interface
- input STB_I;
- input CYC_I;
- input [14:0] ADR_I;
- input WE_I;
- input [15:0] DAT_I;
- output [15:0] DAT_O;
- output ACK_O;
-
- //--- Packet Generator interface
- // RdData_o is always valid exactly one clock after Addr_i changes
- // and Rd_i is asserted
- input Rd_i;
- input [13:0] Addr_i;
- output [31:0] RdData_o;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- reg ACK_O;
-
- //-------------------------------------------------------------------------
-
- wire [15:0] WrDataA = DAT_I;
- wire [15:0] RdDataA;
- wire [31:0] RdDataB;
-
- assign DAT_O = RdDataA;
- assign RdData_o = RdDataB;
-
- wire WB_Access = STB_I & CYC_I;
- wire WB_AccessClock1;
- reg WB_AccessClock2;
-
- assign WB_AccessClock1 = WB_Access & ~WB_AccessClock2;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- WB_AccessClock2 <= 0;
- ACK_O <= 0;
- end
- else
- begin
- WB_AccessClock2 <= WB_Access;
- ACK_O <= WB_AccessClock1;
- end
-
- //-------------------------------------------------------------------------
- // Instantiation of sub-modules
- //-------------------------------------------------------------------------
-
- //--- Instantiation of Xilinx 16 Kbit Dual Port Memory --------------------
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit0 (
- .DOA( RdDataA[0] ),
- .DOB( { RdDataB[0], RdDataB[16+0] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[0] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit1 (
- .DOA( RdDataA[1] ),
- .DOB( { RdDataB[1], RdDataB[16+1] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[1] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit2 (
- .DOA( RdDataA[2] ),
- .DOB( { RdDataB[2], RdDataB[16+2] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[2] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit3 (
- .DOA( RdDataA[3] ),
- .DOB( { RdDataB[3], RdDataB[16+3] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[3] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit4 (
- .DOA( RdDataA[4] ),
- .DOB( { RdDataB[4], RdDataB[16+4] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[4] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit5 (
- .DOA( RdDataA[5] ),
- .DOB( { RdDataB[5], RdDataB[16+5] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[5] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit6 (
- .DOA( RdDataA[6] ),
- .DOB( { RdDataB[6], RdDataB[16+6] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[6] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit7 (
- .DOA( RdDataA[7] ),
- .DOB( { RdDataB[7], RdDataB[16+7] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[7] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit8 (
- .DOA( RdDataA[8] ),
- .DOB( { RdDataB[8], RdDataB[16+8] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[8] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit9 (
- .DOA( RdDataA[9] ),
- .DOB( { RdDataB[9], RdDataB[16+9] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[9] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit10 (
- .DOA( RdDataA[10] ),
- .DOB( { RdDataB[10], RdDataB[16+10] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[10] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit11 (
- .DOA( RdDataA[11] ),
- .DOB( { RdDataB[11], RdDataB[16+11] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[11] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit12 (
- .DOA( RdDataA[12] ),
- .DOB( { RdDataB[12], RdDataB[16+12] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[12] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit13 (
- .DOA( RdDataA[13] ),
- .DOB( { RdDataB[13], RdDataB[16+13] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[13] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit14 (
- .DOA( RdDataA[14] ),
- .DOB( { RdDataB[14], RdDataB[16+14] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[14] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
- RAMB16_S1_S2 RAMB16_S1_S2_bit15 (
- .DOA( RdDataA[15] ),
- .DOB( { RdDataB[15], RdDataB[16+15] } ),
-
- .ADDRA( ADR_I[13:0] ),
- .DIA ( WrDataA[15] ),
- .ENA ( WB_AccessClock1 ),
- .CLKA ( Clk ),
- .WEA ( WE_I ),
- .SSRA ( 1'b0 ),
-
- .ADDRB( Addr_i[12:0] ),
- .DIB ( 2'b00 ),
- .ENB ( Rd_i ),
- .CLKB ( Clk ),
- .WEB ( 1'b0 ),
- .SSRB ( 1'b0 )
- );
-
-endmodule
diff --git a/eth/demo/verilog/demo_packet_generator.v b/eth/demo/verilog/demo_packet_generator.v deleted file mode 100644 index 22ad52b4c..000000000 --- a/eth/demo/verilog/demo_packet_generator.v +++ /dev/null @@ -1,274 +0,0 @@ -module demo_packet_generator(
- Reset_n,
- Clk,
-
- //--- Wishbone interface
- STB_I,
- CYC_I,
- ADR_I,
- WE_I,
- DAT_I,
- DAT_O,
- ACK_O,
-
- //--- Packet Descriptor Memory interface
- // RdData_i is always valid exactly one clock after Addr_o changes
- // and Rd_o is asserted
- Rd_o,
- Addr_o,
- RdData_i,
-
- //--- User (packet) interface
- Rx_mac_ra,
- Rx_mac_rd,
- Rx_mac_data,
- Rx_mac_BE,
- Rx_mac_pa,
- Rx_mac_sop,
- Rx_mac_err,
- Rx_mac_eop,
-
- Tx_mac_wa,
- Tx_mac_wr,
- Tx_mac_data,
- Tx_mac_BE,
- Tx_mac_sop,
- Tx_mac_eop
-);
-
- input Reset_n;
- input Clk;
-
- //--- Wishbone interface
- input STB_I;
- input CYC_I;
- input [1:0] ADR_I;
- input WE_I;
- input [15:0] DAT_I;
- output [15:0] DAT_O;
- output ACK_O;
-
- //--- Packet Generator interface
- // RdData_o is always valid exactly one clock after Addr_o changes
- // and Rd_o is asserted
- output Rd_o;
- output [13:0] Addr_o;
- input [31:0] RdData_i;
-
- //--- User (packet) interface
- input Rx_mac_ra;
- output Rx_mac_rd;
- input [31:0] Rx_mac_data;
- input [1:0] Rx_mac_BE;
- input Rx_mac_pa;
- input Rx_mac_sop;
- input Rx_mac_err;
- input Rx_mac_eop;
-
- input Tx_mac_wa;
- output Tx_mac_wr;
- output [31:0] Tx_mac_data;
- output [1:0] Tx_mac_BE;
- output Tx_mac_sop;
- output Tx_mac_eop;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- reg ACK_O;
- reg [15:0] DAT_O;
-
- reg Rd_o;
- reg Tx_mac_wr;
- reg [1:0] Tx_mac_BE;
- reg Tx_mac_sop;
- reg Tx_mac_eop;
-
- //--- Wishbone interface --------------------------------------------------
-
- reg [1:0] PG_CFG;
- wire PG_Enable = PG_CFG[0];
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- ACK_O <= 0;
- DAT_O <= 'b0;
-
- PG_CFG <= 2'h0;
- end
- else
- begin
- ACK_O <= 0;
- if ( CYC_I & STB_I )
- begin
- ACK_O <= ~ACK_O; // Generate single cycle pulse!
- if ( WE_I )
- begin
- PG_CFG <= DAT_I;
- end
- else
- begin
- DAT_O[1:0] <= PG_CFG;
- end
- end
- end
-
- //--- Packet Generator FSM ------------------------------------------------
-
- parameter PG_FSM_STATE_IDLE = 3'h0;
- parameter PG_FSM_STATE_LD_DESC_1 = 3'h1;
- parameter PG_FSM_STATE_LD_DESC_2 = 3'h2;
- parameter PG_FSM_STATE_RD_HEADER = 3'h3;
- parameter PG_FSM_STATE_PAYLOAD_SEQ_NUMBER = 3'h4;
- parameter PG_FSM_STATE_PAYLOAD = 3'h5;
- parameter PG_FSM_STATE_DONE = 3'h6;
- reg [2:0] PG_FSM_State;
-
- reg [9:0] DescHigh; // Selects currente descriptor
- reg [3:0] DescLow; // Index into a single descriptor (16 entries)
-
- reg PDM_CFG1_LAST;
- reg [3:0] PDM_CFG1_REPEAT;
- reg [3:0] PDM_CFG1_HDRLEN;
- reg [15:0] PDM_CFG2_PAYLDLEN;
-
- reg [31:0] Tx_mac_data_reg;
- reg WriteHeader;
- reg [15:0] PayloadRemaining;
- reg [31:0] PacketSequenceNumber;
- reg [31:0] Payload;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- PG_FSM_State <= PG_FSM_STATE_IDLE;
-
- Rd_o <= 0;
-
- DescHigh <= 10'b0;
- DescLow <= 4'b0;
-
- Tx_mac_wr <= 0;
- Tx_mac_sop <= 0;
- Tx_mac_eop <= 0;
- Tx_mac_BE <= 2'b00;
-
- Tx_mac_data_reg <= 32'b0;
- WriteHeader <= 0;
- PayloadRemaining <= 16'd0;
-
- PacketSequenceNumber <= 32'd0;
- Payload <= 32'h0;
-
- { PDM_CFG1_HDRLEN, PDM_CFG1_REPEAT, PDM_CFG1_LAST, PDM_CFG2_PAYLDLEN } <= 'b0;
- end
- else
- begin
- casez ( PG_FSM_State )
- PG_FSM_STATE_IDLE:
- if ( PG_Enable )
- begin
- PG_FSM_State <= PG_FSM_STATE_LD_DESC_1;
- Rd_o <= 1;
- end
- else
- begin
- DescHigh <= 10'b0;
- DescLow <= 4'b0;
- end
-
- PG_FSM_STATE_LD_DESC_1:
- begin
- PG_FSM_State <= PG_FSM_STATE_LD_DESC_2;
-
- DescLow <= DescLow + 1;
- end
-
- PG_FSM_STATE_LD_DESC_2:
- begin
- PG_FSM_State <= PG_FSM_STATE_RD_HEADER;
-
- { PDM_CFG1_LAST, PDM_CFG1_REPEAT, PDM_CFG1_HDRLEN, PDM_CFG2_PAYLDLEN } <=
- { RdData_i[31], RdData_i[23:20], RdData_i[19:16], RdData_i[15:0] };
- end
-
- PG_FSM_STATE_RD_HEADER:
- begin
- Tx_mac_wr <= 0;
- if ( Tx_mac_wa )
- begin
- // Space in Tx FIFO - write next header word
- DescLow <= DescLow + 1;
- Tx_mac_wr <= 1;
- Tx_mac_sop <= ( DescLow == 1 ); // Assert SOP on first header word
- WriteHeader <= 1;
- if ( DescLow == PDM_CFG1_HDRLEN )
- begin
- // The requested number of header words has been read
- // - proceed to generate packet payload
- PG_FSM_State <= PG_FSM_STATE_PAYLOAD_SEQ_NUMBER;
- PayloadRemaining <= PDM_CFG2_PAYLDLEN;
- end
- end
- end
-
- PG_FSM_STATE_PAYLOAD_SEQ_NUMBER:
- begin
- WriteHeader <= 0;
- Tx_mac_data_reg <= PacketSequenceNumber;
- Tx_mac_wr <= 0;
- Tx_mac_sop <= 0;
- if ( Tx_mac_wa )
- begin
- Tx_mac_wr <= 1;
- PG_FSM_State <= PG_FSM_STATE_PAYLOAD;
- Payload <= 32'h01020304;
- PayloadRemaining <= PayloadRemaining - 4;
- end
- end
-
- PG_FSM_STATE_PAYLOAD:
- begin
- Tx_mac_data_reg <= Payload;
- Tx_mac_wr <= 0;
- if ( Tx_mac_wa )
- begin
- Tx_mac_wr <= 1;
- Tx_mac_data_reg <= Payload;
- Payload[31:24] <= Payload[31:24] + 8'h04;
- Payload[23:16] <= Payload[23:16] + 8'h04;
- Payload[15: 8] <= Payload[15: 8] + 8'h04;
- Payload[ 7: 0] <= Payload[ 7: 0] + 8'h04;
- PayloadRemaining <= PayloadRemaining - 4;
- if ( PayloadRemaining <= 4 )
- begin
- PG_FSM_State <= PG_FSM_STATE_DONE;
-
- Tx_mac_eop <= 1;
- // Indicate how many bytes are valid in this last transfer
- Tx_mac_BE <= PayloadRemaining[1:0];
- end
- end
- end
-
- PG_FSM_STATE_DONE:
- begin
- // TBD: Add support for REPEAT, NEXT & LAST!
- Tx_mac_wr <= 0;
- Tx_mac_eop <= 0;
- end
- endcase
- end
-
- //-------------------------------------------------------------------------
-
- assign Tx_mac_data = WriteHeader ?
- RdData_i : Tx_mac_data_reg;
-
- assign Addr_o = { DescHigh, DescLow };
-
- assign Rx_mac_rd = 0;
-
-endmodule
diff --git a/eth/demo/verilog/demo_uart.v b/eth/demo/verilog/demo_uart.v deleted file mode 100644 index ba4a3c35c..000000000 --- a/eth/demo/verilog/demo_uart.v +++ /dev/null @@ -1,235 +0,0 @@ -module demo_uart(
- Reset_n,
- Clk,
-
- // Interface to UART PHY (RS232 level converter)
- RXD_i,
- TXD_o,
-
- // Clk is divided by (Prescaler+1) to generate 16x the bitrate
- Prescaler_i,
-
- // Pulsed when RxData is valid
- RxValid_o,
- RxData_o,
-
- // Asserted when ready for a new Tx byte
- TxReady_o,
-
- // Pulsed when TxData is valid
- TxValid_i,
- TxData_i
-);
-
- input Reset_n;
- input Clk;
-
- // Interface to UART PHY (RS232 level converter)
- input RXD_i;
- output TXD_o;
-
- // Clk is divided by (Prescaler+1) to generate 16x the bitrate
- input [15:0] Prescaler_i;
-
- // Pulsed when RxData is valid
- output RxValid_o;
- output [7:0] RxData_o;
-
- // Asserted when ready for a new Tx byte
- output TxReady_o;
-
- // Pulsed when TxData is valid
- input TxValid_i;
- input [7:0] TxData_i;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- reg TXD_o;
- reg RxValid_o;
- reg [7:0] RxData_o;
- reg TxReady_o;
-
- //-------------------------------------------------------------------------
- // Instantiation of sub-modules
- //-------------------------------------------------------------------------
-
- //--- Prescaler generating 16x bitrate clock ------------------------------
-
- reg Clk_16x;
- reg [15:0] Prescaler;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- Prescaler <= 0;
- Clk_16x <= 0;
- end
- else
- begin
- if ( Prescaler == Prescaler_i )
- begin
- Prescaler <= 0;
- Clk_16x <= 1;
- end
- else
- begin
- Prescaler <= Prescaler + 1;
- Clk_16x <= 0;
- end
- end
-
- //--- Transmitter logic ---------------------------------------------------
-
- reg [3:0] TxCounter;
- reg TxSendBit;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- TxCounter <= 0;
- TxSendBit <= 0;
- end
- else
- begin
- TxSendBit <= 0;
- if ( Clk_16x )
- begin
- if ( TxCounter == 15 )
- begin
- TxCounter <= 0;
- TxSendBit <= 1;
- end
- else
- TxCounter <= TxCounter + 1;
- end
- end
-
- reg [7:0] TxData_reg;
- reg [3:0] TxBitCnt;
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- TXD_o <= 1;
- TxReady_o <= 1;
- TxData_reg <= 0;
- TxBitCnt <= 0;
- end
- else
- begin
- if ( TxReady_o )
- begin
- if ( TxValid_i )
- begin
- TxReady_o <= 0;
- TxData_reg <= TxData_i;
- TxBitCnt <= 0;
- end
- end
- else
- begin
- if ( TxSendBit )
- begin
- // Only do anything on bit boundaries
- casez ( TxBitCnt )
- 0: // Tx START bit
- TXD_o <= 0;
- 10: // Tx second STOP bit
- // Now we're done
- TxReady_o <= 1;
- default: // Tx data bit + first stop bit
- begin
- TXD_o <= TxData_reg[0];
- TxData_reg <= { 1'b1, TxData_reg[7:1] };
- end
- endcase
-
- TxBitCnt <= TxBitCnt+1;
- end
- end
- end
-
- //--- Receiver logic ------------------------------------------------------
-
- reg RxHunt;
- reg [3:0] RxCounter;
- reg RxSampleBit;
- reg RxDone;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- RxCounter <= 0;
- RxSampleBit <= 0;
-
- RxHunt <= 1;
- end
- else
- begin
- RxSampleBit <= 0;
-
- if ( RxDone )
- RxHunt <= 1;
-
- if ( Clk_16x )
- begin
- if ( RxHunt )
- begin
- if ( RXD_i == 0 )
- begin
- // Receiving start bit!
- RxHunt <= 0;
- // Reset 16x bit counter
- RxCounter <= 0;
- end
- end
- else
- begin
- RxCounter <= RxCounter + 1;
- if ( RxCounter == 7 )
- // In middle of Rx bit in next cycle
- RxSampleBit <= 1;
- end
- end
- end
-
- reg [3:0] RxBitCount;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- RxValid_o <= 0;
- RxData_o <= 'b0;
- RxBitCount <= 0;
- RxDone <= 0;
- end
- else
- begin
- RxValid_o <= 0;
- RxDone <= 0;
-
- if ( RxSampleBit )
- begin
- RxBitCount <= RxBitCount + 1;
-
- casez ( RxBitCount )
- 0: // START bit - just ignore it
- ;
- 9: // STOP bit - indicate we're ready again
- begin
- RxDone <= 1;
- RxBitCount <= 0;
- end
- default: // Rx Data bits
- begin
- RxData_o <= { RXD_i, RxData_o[7:1] };
- if ( RxBitCount == 8 )
- // Last data bit just received
- RxValid_o <= 1;
- end
- endcase
- end
- end
-
-endmodule
diff --git a/eth/demo/verilog/demo_wishbone_master.v b/eth/demo/verilog/demo_wishbone_master.v deleted file mode 100644 index b3c64fbcf..000000000 --- a/eth/demo/verilog/demo_wishbone_master.v +++ /dev/null @@ -1,376 +0,0 @@ -module demo_wishbone_master(
- Reset_n,
- Clk,
-
- //--- UART interface
-
- // Pulsed when RxData_i is valid
- RxValid_i,
- RxData_i,
-
- // Asserted when ready for a new Tx byte
- TxReady_i,
-
- // Pulsed when TxData_o is valid
- TxValid_o,
- TxData_o,
-
- //--- Wishbone interface
- STB_ETH_O,
- STB_PDM_O,
- STB_PG_O,
- CYC_O,
- ADR_O,
- WE_O,
- DAT_O,
- DAT_I,
- ACK_I
-);
-
- input Reset_n;
- input Clk;
-
- //--- UART interface
-
- // Pulsed when RxData_i is valid
- input RxValid_i;
- input [7:0] RxData_i;
-
- // Asserted when ready for a new Tx byte
- input TxReady_i;
-
- // Pulsed when TxData_o is valid
- output TxValid_o;
- output [7:0] TxData_o;
-
- output STB_ETH_O;
- output STB_PDM_O;
- output STB_PG_O;
- output CYC_O;
- output [14:0] ADR_O;
- output WE_O;
- output [15:0] DAT_O;
- input [15:0] DAT_I;
- input ACK_I;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- reg TxValid_o;
- reg [7:0] TxData_o;
- reg STB_ETH_O;
- reg STB_PDM_O;
- reg STB_PG_O;
- reg CYC_O;
- reg [14:0] ADR_O;
- reg WE_O;
- reg [15:0] DAT_O;
-
- //-------------------------------------------------------------------------
- // Instantiation of sub-modules
- //-------------------------------------------------------------------------
-
- //--- Transmit FSM --------------------------------------------------------
-
- parameter TX_STATE_IDLE = 0;
- parameter TX_STATE_INIT = 1;
- parameter TX_STATE_OK = 2;
- parameter TX_STATE_ERROR = 3;
- parameter TX_STATE_VALUE = 4;
- parameter TX_STATE_LF = 5;
-
- reg [2:0] TxState;
- reg [3:0] TxIndex;
- reg TxLast;
-
- wire [15:0] TxValue16;
- wire [3:0] TxHexDigit;
- wire [7:0] TxHexChar;
- reg TxOK;
- reg TxERROR;
- reg TxValue;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- TxState <= TX_STATE_INIT;
- TxIndex <= 0;
- TxLast <= 0;
-
- TxValid_o <= 0;
- TxData_o <= 'b0;
- end
- else
- begin
- TxValid_o <= 0;
-
- // Don't do anything in cycle following TxValid_o being pulsed
- if ( ~TxValid_o )
- begin
- casez ( TxState )
- TX_STATE_INIT:
- casez ( TxIndex )
- 0: TxData_o <= "R";
- 1: TxData_o <= "E";
- 2: TxData_o <= "A";
- 3: TxData_o <= "D";
- 4: TxData_o <= "Y";
- default: TxLast <= 1;
- endcase
-
- TX_STATE_OK:
- casez ( TxIndex )
- 0: TxData_o <= "O";
- 1: TxData_o <= "K";
- default: TxLast <= 1;
- endcase
-
- TX_STATE_ERROR:
- casez ( TxIndex )
- 0: TxData_o <= "E";
- 1: TxData_o <= "R";
- 2: TxData_o <= "R";
- 3: TxData_o <= "O";
- 4: TxData_o <= "R";
- default: TxLast <= 1;
- endcase
-
- TX_STATE_VALUE:
- casez ( TxIndex )
- 0,1,2,3: TxData_o <= TxHexChar;
- default: TxLast <= 1;
- endcase
-
- TX_STATE_LF:
- ;
-
- default:
- begin
- if ( TxOK )
- TxState <= TX_STATE_OK;
- else if ( TxERROR )
- TxState <= TX_STATE_ERROR;
- else if ( TxValue )
- begin
- TxState <= TX_STATE_VALUE;
- TxIndex <= 0;
- end
- end
- endcase
-
- if ( (TxState != TX_STATE_IDLE) & TxReady_i )
- begin
- TxValid_o <= 1;
-
- if ( TxLast )
- begin
- if ( TxState == TX_STATE_LF )
- begin
- TxData_o <= 10; // LF
- TxState <= TX_STATE_IDLE;
- TxIndex <= 0;
- TxLast <= 0;
- end
- else
- begin
- TxData_o <= 13; // CR
- TxState <= TX_STATE_LF;
- end
- end
- else
- TxIndex <= TxIndex + 1;
- end
- end
- end
-
- assign TxHexDigit = (TxIndex==0) ? TxValue16[15:12] :
- (TxIndex==1) ? TxValue16[11: 8] :
- (TxIndex==2) ? TxValue16[ 7: 4] :
- TxValue16[ 3: 0];
-
- assign TxHexChar = (TxHexDigit <= 9) ? (TxHexDigit + "0") :
- (TxHexDigit + "A"-'hA);
-
- //--- Receive FSM ---------------------------------------------------------
-
- parameter RX_STATE_IDLE = 0;
- parameter RX_STATE_VALUE16_FIRST = 1;
- parameter RX_STATE_VALUE16 = 2;
- parameter RX_STATE_COMMENT = 3;
- parameter RX_STATE_CMD = 4;
-
- reg [2:0] RxState;
-
- wire IsWhiteSpace = ( RxData_i==" " ) |
- ( RxData_i=="\t" ) |
- ( RxData_i=="," ) |
- ( RxData_i==10 ) |
- ( RxData_i==13 );
- wire IsHexDigit = (( RxData_i >= "0" ) & ( RxData_i <= "9" )) |
- (( RxData_i >= "a" ) & ( RxData_i <= "f" )) |
- (( RxData_i >= "A" ) & ( RxData_i <= "F" ));
- wire [3:0] RxHexValue =
- (( RxData_i >= "0" ) & ( RxData_i <= "9" )) ? RxData_i[3:0] :
- (( RxData_i >= "a" ) & ( RxData_i <= "f" )) ? (RxData_i-"a"+'hA) :
- (( RxData_i >= "A" ) & ( RxData_i <= "F" )) ? (RxData_i-"A"+'hA) : 0;
-
- reg [15:0] RxValue16;
- reg RxWrite;
- reg RxWrData;
-
- reg [15:0] RegAddr;
- reg [15:0] RegRdData;
-
- assign TxValue16 = RegRdData;
-
- always @( negedge Reset_n or posedge Clk )
- if ( ~Reset_n )
- begin
- RxState <= RX_STATE_IDLE;
-
- RxValue16 <= 16'h0;
- RxWrite <= 0;
- RxWrData <= 0;
-
- RegAddr <= 'b0;
- RegRdData <= 'b0;
-
- STB_ETH_O <= 0;
- STB_PDM_O <= 0;
- STB_PG_O <= 0;
- CYC_O <= 0;
- ADR_O <= 0;
- WE_O <= 0;
- DAT_O <= 0;
-
- TxOK <= 0;
- TxERROR <= 0;
- TxValue <= 0;
- end
- else
- begin
- TxOK <= 0;
- TxERROR <= 0;
- TxValue <= 0;
-
- if ( RxState == RX_STATE_CMD )
- begin
- STB_ETH_O <= ( RegAddr[15:12] == 4'h0 );
- STB_PG_O <= ( RegAddr[15:12] == 4'h1 );
- STB_PDM_O <= ( RegAddr[15] == 1'b1 );
-
- CYC_O <= 1;
- ADR_O <= RegAddr[14:0];
- WE_O <= RxWrite;
-
- if ( ACK_I )
- begin
- // Register transaction is completing!
- CYC_O <= 0;
- STB_ETH_O <= 0;
- STB_PDM_O <= 0;
- STB_PG_O <= 0;
-
- // Latch data read in case of a read
- RegRdData <= DAT_I;
-
- if ( RxWrite )
- // Transaction was a register write
- TxOK <= 1;
- else
- TxValue <= 1;
-
- RxState <= RX_STATE_IDLE;
- end
- end
- else if ( (TxState == TX_STATE_IDLE) & RxValid_i )
- begin
- // A byte has been received!
-
- casez ( RxState )
- RX_STATE_IDLE:
- if ( (RxData_i == "w") | (RxData_i == "W") )
- begin
- // Write Register Command: W rrrr dddd
- RxState <= RX_STATE_VALUE16_FIRST;
- RxWrite <= 1;
- RxWrData <= 0;
- end
- else if ( (RxData_i == "r") | (RxData_i == "R") )
- begin
- // Read Register Command: R rrrr
- RxState <= RX_STATE_VALUE16_FIRST;
- RxWrite <= 0;
- end
- else if ( RxData_i == "/" )
- begin
- // Comment!
- RxState <= RX_STATE_COMMENT;
- end
- else if ( ~IsWhiteSpace )
- // Unknown command!
- TxERROR <= 1;
-
- RX_STATE_COMMENT:
- if ( (RxData_i == 13) | (RxData_i == 10) )
- // CR or LF - end of comment
- RxState <= RX_STATE_IDLE;
-
- RX_STATE_VALUE16_FIRST:
- if ( IsHexDigit )
- begin
- RxValue16 <= { 12'b0, RxHexValue };
- RxState <= RX_STATE_VALUE16;
- end
- else if ( ~IsWhiteSpace )
- begin
- // Unexpected character!
- TxERROR <= 1;
- RxState <= RX_STATE_IDLE;
- end
-
- RX_STATE_VALUE16:
- if ( IsHexDigit )
- RxValue16 <= { RxValue16[11:0], RxHexValue };
- else if ( IsWhiteSpace )
- begin
- // Done collecting 16-bit value
- if ( RxWrite )
- begin
- // This is a register write
- if ( RxWrData )
- begin
- // Second time around - just received write data
- DAT_O <= RxValue16;
- RxState <= RX_STATE_CMD;
- end
- else
- begin
- // Just received register address - expecting second argument
- RegAddr <= RxValue16;
- RxState <= RX_STATE_VALUE16_FIRST;
- RxWrData <= 1; // Now receive the write data
- end
- end
- else
- begin
- // This is a register read
- RegAddr <= RxValue16;
- RxState <= RX_STATE_CMD;
- end
- end
- else
- begin
- // Unexpected character!
- TxERROR <= 1;
- RxState <= RX_STATE_IDLE;
- end
-
- default:
- TxERROR <= 1;
- endcase
- end
- end
-
-endmodule
diff --git a/eth/demo/verilog/tb_demo.v b/eth/demo/verilog/tb_demo.v deleted file mode 100644 index c5a8a3f41..000000000 --- a/eth/demo/verilog/tb_demo.v +++ /dev/null @@ -1,348 +0,0 @@ -`timescale 1ns / 1ns
-
-module tb_demo;
-
- //-------------------- Instantiate Xilinx glbl module ----------------------
- // - this is needed to get ModelSim to work because e.g. I/O buffer models
- // refer directly to glbl.GTS and similar signals
-
- wire GSR;
- wire GTS;
- xlnx_glbl glbl( .GSR( GSR ), .GTS( GTS ) );
-
- reg VLOG_ExitSignal = 0;
- reg Done = 0;
- reg Error = 0;
-
- //-------------------------------------------------------------------------
-
- reg Reset_n;
- reg Clk_100M;
- reg Clk_125M;
-
- wire RS232_TXD;
- wire RS232_RXD;
-
- wire USB_TXD;
- wire USB_RXD;
-
- //--- 10/100/1000BASE-T Ethernet PHY (MII/GMII)
- wire PHY_RESET_n;
-
- wire PHY_RXC;
- wire [7:0] PHY_RXD;
- wire PHY_RXDV;
- wire PHY_RXER;
-
- wire PHY_GTX_CLK; // GMII only
- wire PHY_TXC;
- wire [7:0] PHY_TXD;
- wire PHY_TXEN;
- wire PHY_TXER;
-
- wire PHY_COL = 0;
- wire PHY_CRS = 0;
-
- wire PHY_MDC;
- wire PHY_MDIO;
-
- wire [1:4] LED;
-
- reg [1:4] Button = 4'b0000;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- //-------------------------------------------------------------------------
- // Instantiation of sub-modules
- //-------------------------------------------------------------------------
-
- //--- DUT
-
- demo demo(
- .Reset_n ( Reset_n ),
- .Clk_100M( Clk_100M ),
- .Clk_125M( Clk_125M ),
-
- .RS232_TXD( RS232_TXD ),
- .RS232_RXD( RS232_RXD ),
-
- .USB_TXD( USB_TXD ),
- .USB_RXD( USB_RXD ),
-
- //--- 10/100/1000BASE-T Ethernet PHY (MII/GMII)
- .PHY_RESET_n( PHY_RESET_n ),
-
- .PHY_RXC ( PHY_RXC ),
- .PHY_RXD ( PHY_RXD ),
- .PHY_RXDV( PHY_RXDV ),
- .PHY_RXER( PHY_RXER ),
-
- .PHY_GTX_CLK( PHY_GTX_CLK ), // GMII only
- .PHY_TXC ( PHY_TXC ),
- .PHY_TXD ( PHY_TXD ),
- .PHY_TXEN ( PHY_TXEN ),
- .PHY_TXER ( PHY_TXER ),
-
- .PHY_COL( PHY_COL ),
- .PHY_CRS( PHY_CRS ),
-
- .PHY_MDC ( PHY_MDC ),
- .PHY_MDIO( PHY_MDIO ),
-
- // Misc. I/Os
- .LED ( LED ),
- .Button( Button )
- );
-
- //-------------------------------------------------------------------------
- // MII/GMII Ethernet PHY model
-
- reg [2:0] Speed = 3'b000;
-
- Phy_sim U_Phy_sim(
- .Gtx_clk( PHY_GTX_CLK ),
- .Rx_clk ( PHY_RXC ),
- .Tx_clk ( PHY_TXC ),
- .Tx_er ( PHY_TXER ),
- .Tx_en ( PHY_TXEN ),
- .Txd ( PHY_TXD ),
- .Rx_er ( PHY_RXER ),
- .Rx_dv ( PHY_RXDV ),
- .Rxd ( PHY_RXD ),
- .Crs ( PHY_CRS ),
- .Col ( PHY_COL ),
- .Speed ( Speed ),
- .Done ( Done )
- );
-
- //-------------------------------------------------------------------------
- // Generate all clocks & reset
- //-------------------------------------------------------------------------
-
- // Core master clock (100 MHz)
- initial
- begin
- #10;
- while ( !Done )
- begin
- #5 Clk_100M = 0;
- #5 Clk_100M = 1;
- end
- end
-
- // GMII master clock (125 MHz)
- initial
- begin
- #10;
- while ( !Done )
- begin
- #4 Clk_125M = 0;
- #4 Clk_125M = 1;
- end
- end
-
- initial
- begin
- Reset_n = 0;
-
- #103;
- Reset_n = 1;
- end
-
- //--- Emulate UART Transmitter --------------------------------------------
-
- parameter PRESCALER_16X = 3;
- integer Prescaler;
- integer TxLen = 0;
- reg [2:0] TxState;
- integer TxBit;
- reg [1023:0] TxMsg;
- reg TXD;
- reg TxDone;
-
- always @( negedge Reset_n or posedge Clk_100M )
- if ( ~Reset_n )
- begin
- Prescaler <= 0;
- TxState = 0;
- TXD = 1;
- TxBit = 0;
- TxDone <= 0;
- end
- else
- begin
- TxDone <= 0;
-
- if ( Prescaler == ((PRESCALER_16X + 1)*16 -1) )
- Prescaler <= 0;
- else
- Prescaler <= Prescaler + 1;
-
- if ( Prescaler==0 )
- begin
- casez ( TxState )
- 0: // IDLE
- begin
- if ( TxLen != 0 )
- begin // Send start bit!
- TxBit = (TxLen-1)*8;
- TxLen = TxLen - 1;
- TXD = 0;
- TxState = 1;
- end
- end
-
- 1: // Send next data bit
- begin
- // Send next data bit
- TXD = TxMsg[ TxBit ];
- TxBit = TxBit + 1;
- if ( (TxBit % 8)==0 )
- // Next send two stop bits
- TxState = 2;
- end
-
- 2: // First of two stop bits
- begin
- TXD = 1;
- TxState = 3;
- end
-
- 3: // Second of two stop bits
- begin
- TXD = 1;
- TxState = 0;
- if ( TxLen == 0 )
- // Done with transmission!
- TxDone <= 1;
- end
- endcase
- end
- end
-
- assign RS232_RXD = TXD;
- assign USB_RXD = 1;
-
- //--- Send commands to the DUT --------------------------------------------
-
- initial
- begin
- #10;
- while ( ~Reset_n ) #10;
-
- // Wait a couple of clock edges before continuing to allow
- // internal logic to get out of reset
- repeat ( 5 )
- @( posedge Clk_100M );
-
- // Wait for the "READY" message to complete transmission
- #60000;
-
- // Select 100 Mbps
- Speed = 3'b010;
- TxMsg = "W 0022 0002 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8000 8003 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8001 0011 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8002 1234 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8003 5678 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8004 9ABC ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8005 DEF0 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8006 C5C0 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "W 8007 BABE ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- TxMsg = "R 8006 ";
- TxLen = 7;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- // Enable PG!
- TxMsg = "W 1000 0001 ";
- TxLen = 12;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- // Read back that PG has been enabled!
- TxMsg = "R 1000 ";
- TxLen = 7;
- while ( ~TxDone )
- @( posedge Clk_100M );
-
- #50000;
-
- #50000;
-
- Done = 1; #10;
-
- $stop;
- end
-
- //--- Directly accesses a register on the internal Wishbone bus, bypassing the UART interface
-
- task WrReg;
- input [15:0] Reg;
- input [15:0] Data;
-
- begin
- end
- endtask
-
-endmodule
diff --git a/eth/header_ram.v b/eth/header_ram.v deleted file mode 100644 index 699f16a4f..000000000 --- a/eth/header_ram.v +++ /dev/null @@ -1,24 +0,0 @@ - -module header_ram - #(parameter REGNUM=0, - parameter WIDTH=32) - (input clk, - input set_stb, - input [7:0] set_addr, - input [31:0] set_data, - - input [3:0] addr, - output [31:0] q - ); - - reg [WIDTH-1:0] mini_ram[0:15]; - wire write_to_ram = (set_stb & (set_addr[7:4]==REGNUM[7:4])); - wire [3:0] ram_addr = write_to_ram ? set_addr[3:0] : addr; - - always @(posedge clk) - if(write_to_ram) - mini_ram[ram_addr] <= set_data; - - assign q = mini_ram[ram_addr]; - -endmodule // header_ram diff --git a/eth/mac_rxfifo_int.v b/eth/mac_rxfifo_int.v deleted file mode 100644 index 6f6c5ed38..000000000 --- a/eth/mac_rxfifo_int.v +++ /dev/null @@ -1,91 +0,0 @@ - -module mac_rxfifo_int - (input clk, input rst, - - input Rx_mac_empty, - output Rx_mac_rd, - input [31:0] Rx_mac_data, - input [1:0] Rx_mac_BE, - input Rx_mac_sop, - input Rx_mac_eop, - input Rx_mac_err, - - output [31:0] wr_dat_o, - output wr_write_o, - output wr_done_o, - output wr_error_o, - input wr_ready_i, - input wr_full_i, - - // FIFO Status - output [15:0] fifo_occupied, - output fifo_full, - output fifo_empty - ); - - // Write side of short FIFO - // Inputs: full, Rx_mac_empty, Rx_mac_sop, Rx_mac_eop, Rx_mac_err, Rx_mac_data/BE - // Controls: write, datain, Rx_mac_rd - - wire write, full, read, empty, sop_o, eop_o, error_o; - - // Write side of short FIFO - assign write = ~full & ~Rx_mac_empty; - assign Rx_mac_rd = write; - -`define LONGFIFO 0 - -`ifdef LONGFIFO - cascadefifo2 #(.WIDTH(35),.SIZE(10)) mac_rx_longfifo - (.clk(clk),.rst(rst),.clear(0), - .datain({Rx_mac_sop,Rx_mac_eop,Rx_mac_err,Rx_mac_data}),.write(write),.full(full), - .dataout({sop_o,eop_o,error_o,wr_dat_o}),.read(read),.empty(empty), - .space(), .occupied(fifo_occupied) ); -`else - shortfifo #(.WIDTH(35)) mac_rx_sfifo - (.clk(clk),.rst(rst),.clear(0), - .datain({Rx_mac_sop,Rx_mac_eop,Rx_mac_err,Rx_mac_data}),.write(write),.full(full), - .dataout({sop_o,eop_o,error_o,wr_dat_o}),.read(read),.empty(empty), - .space(), .occupied(fifo_occupied[4:0]) ); - assign fifo_occupied[15:5] = 0; -`endif - - assign fifo_full = full; - assign fifo_empty = empty; - - // Read side of short FIFO - // Inputs: empty, dataout, wr_ready_i, wr_full_i - // Controls: read, wr_dat_o, wr_write_o, wr_done_o, wr_error_o - - reg [1:0] rd_state; - localparam RD_IDLE = 0; - localparam RD_HAVEPKT = 1; - localparam RD_XFER = 2; - localparam RD_ERROR = 3; - - always @(posedge clk) - if(rst) - rd_state <= RD_IDLE; - else - case(rd_state) - RD_IDLE : - if(sop_o & ~empty) - rd_state <= RD_HAVEPKT; - RD_HAVEPKT : - if(wr_ready_i) - rd_state <= RD_XFER; - RD_XFER : - if(eop_o & ~empty) - rd_state <= RD_IDLE; - else if(wr_full_i) - rd_state <= RD_HAVEPKT; - RD_ERROR : - rd_state <= RD_IDLE; - endcase // case(rd_state) - - assign read = ~empty & ((rd_state == RD_XFER) | ((rd_state==RD_IDLE)&~sop_o)); - assign wr_write_o = ~empty & (rd_state == RD_XFER); - assign wr_done_o = ~empty & (rd_state == RD_XFER) & eop_o; - assign wr_error_o = ~empty & (rd_state == RD_XFER) & error_o; - -endmodule // mac_rxfifo_int diff --git a/eth/mac_txfifo_int.v b/eth/mac_txfifo_int.v deleted file mode 100644 index 38d8d38fc..000000000 --- a/eth/mac_txfifo_int.v +++ /dev/null @@ -1,77 +0,0 @@ - -module mac_txfifo_int - (input clk, input rst, input mac_clk, - - // To MAC - input Tx_mac_wa, - output Tx_mac_wr, - output [31:0] Tx_mac_data, - output [1:0] Tx_mac_BE, - output Tx_mac_sop, - output Tx_mac_eop, - - // To buffer interface - input [31:0] rd_dat_i, - output rd_read_o, - output rd_done_o, - output rd_error_o, - input rd_sop_i, - input rd_eop_i, - - // FIFO Status - output [15:0] fifo_occupied, - output fifo_full, - output fifo_empty ); - - wire empty, full, sfifo_write, sfifo_read; - wire [33:0] sfifo_in, sfifo_out; - - /* - shortfifo #(.WIDTH(34)) txmac_sfifo - (.clk(clk),.rst(rst),.clear(0), - .datain(sfifo_in),.write(sfifo_write),.full(full), - .dataout(sfifo_out),.read(sfifo_read),.empty(empty)); - */ - fifo_xlnx_512x36_2clk mac_tx_fifo_2clk - (.rst(rst), - .wr_clk(clk),.din({2'b0,sfifo_in}),.full(full),.wr_en(sfifo_write),.wr_data_count(fifo_occupied[8:0]), - .rd_clk(mac_clk),.dout(sfifo_out),.empty(empty),.rd_en(sfifo_read),.rd_data_count() ); - assign fifo_occupied[15:9] = 0; - assign fifo_full = full; - assign fifo_empty = empty; // Note empty is in wrong clock domain - - // MAC side signals - // We are allowed to do one more write after we are told the FIFO is full - // This allows us to register the _wa signal and speed up timing. - - reg tx_mac_wa_d1; - always @(posedge clk) - tx_mac_wa_d1 <= Tx_mac_wa; - - assign sfifo_read = ~empty & tx_mac_wa_d1; - - assign Tx_mac_wr = sfifo_read; - assign Tx_mac_data = sfifo_out[31:0]; - assign Tx_mac_BE = 0; // Since we only deal with packets that are multiples of 32 bits long - assign Tx_mac_sop = sfifo_out[33]; - assign Tx_mac_eop = sfifo_out[32]; - - - // BUFFER side signals - reg xfer_active; - always @(posedge clk) - if(rst) - xfer_active <= 0; - else if(rd_eop_i & ~full) - xfer_active <= 0; - else if(rd_sop_i) - xfer_active <= 1; - - assign sfifo_in = {rd_sop_i, rd_eop_i, rd_dat_i}; - assign sfifo_write = xfer_active & ~full; - - assign rd_read_o = sfifo_write; - assign rd_done_o = 0; // Always send everything we're given? - assign rd_error_o = 0; // No possible error situations? - -endmodule // mac_txfifo_int diff --git a/eth/rtl/verilog/Clk_ctrl.v b/eth/rtl/verilog/Clk_ctrl.v deleted file mode 100644 index 917082644..000000000 --- a/eth/rtl/verilog/Clk_ctrl.v +++ /dev/null @@ -1,133 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// Clk_ctrl.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: Clk_ctrl.v,v $
-// Revision 1.3 2006/01/19 14:07:52 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:13 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-module Clk_ctrl(
-Reset ,
-Clk_125M ,
-//host interface,
-Speed ,
-//Phy interface ,
-Gtx_clk ,
-Rx_clk ,
-Tx_clk ,
-//interface clk ,
-MAC_tx_clk ,
-MAC_rx_clk ,
-MAC_tx_clk_div ,
-MAC_rx_clk_div
-);
-input Reset ;
-input Clk_125M ;
- //host interface
-input [2:0] Speed ;
- //Phy interface
-output Gtx_clk ;//used only in GMII mode
-input Rx_clk ;
-input Tx_clk ;//used only in MII mode
- //interface clk signals
-output MAC_tx_clk ;
-output MAC_rx_clk ;
-output MAC_tx_clk_div ;
-output MAC_rx_clk_div ;
-
-
-// ******************************************************************************
-// internal signals
-// ******************************************************************************
-wire Rx_clk_div2 ;
-wire Tx_clk_div2 ;
-// ******************************************************************************
-//
-// ******************************************************************************
- assign Gtx_clk = Clk_125M ;
- assign MAC_rx_clk = Rx_clk ;
- assign MAC_rx_clk_div = Rx_clk ;
- assign MAC_tx_clk = Clk_125M;
- assign MAC_tx_clk_div = Clk_125M;
-
-
- /*
-eth_clk_div2 U_0_CLK_DIV2(
-.Reset (Reset ),
-.IN (Rx_clk ),
-.OUT (Rx_clk_div2 )
-);
-
-eth_clk_div2 U_1_CLK_DIV2(
-.Reset (Reset ),
-.IN (Tx_clk ),
-.OUT (Tx_clk_div2 )
-);
-
-eth_clk_switch U_0_CLK_SWITCH(
-.IN_0 (Rx_clk_div2 ),
-.IN_1 (Rx_clk ),
-.SW (Speed[2] ),
-.OUT (MAC_rx_clk_div )
-);
-
-eth_clk_switch U_1_CLK_SWITCH(
-.IN_0 (Tx_clk ),
-.IN_1 (Clk_125M ),
-.SW (Speed[2] ),
-.OUT (MAC_tx_clk )
-);
-
-eth_clk_switch U_2_CLK_SWITCH(
-.IN_0 (Tx_clk_div2 ),
-.IN_1 (Clk_125M ),
-.SW (Speed[2] ),
-.OUT (MAC_tx_clk_div )
-);
-
- */
-endmodule
diff --git a/eth/rtl/verilog/MAC_rx.v b/eth/rtl/verilog/MAC_rx.v deleted file mode 100644 index 0e02e8fcc..000000000 --- a/eth/rtl/verilog/MAC_rx.v +++ /dev/null @@ -1,242 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// MAC_rx.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: MAC_rx.v,v $
-// Revision 1.4 2006/11/17 17:53:07 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:52 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:13 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-module MAC_rx
- #(parameter RX_FF_DEPTH = 9)
- (
-input Reset ,
-input Clk_user,
-input Clk ,
- //RMII interface
-input MCrs_dv ,
-input [7:0] MRxD ,
-input MRxErr ,
- //flow_control signals
-output [15:0] pause_quanta,
-output pause_quanta_val,
-output [15:0] rx_fifo_space,
- //user interface
-output Rx_mac_empty,
-input Rx_mac_rd ,
-output [31:0] Rx_mac_data ,
-output [1:0] Rx_mac_BE ,
-output Rx_mac_sop ,
-output Rx_mac_eop ,
-output Rx_mac_err ,
- //CPU
-input MAC_rx_add_chk_en ,
-input [7:0] MAC_add_prom_data ,
-input [2:0] MAC_add_prom_add ,
-input MAC_add_prom_wr ,
-input broadcast_filter_en ,
-input [15:0] broadcast_bucket_depth ,
-input [15:0] broadcast_bucket_interval ,
-input RX_APPEND_CRC,
-input [4:0] Rx_Hwmark ,
-input [4:0] Rx_Lwmark ,
-input CRC_chk_en ,
-input [5:0] RX_IFG_SET ,
-input [15:0] RX_MAX_LENGTH ,// 1518
-input [6:0] RX_MIN_LENGTH ,// 64
- //RMON interface
-output [15:0] Rx_pkt_length_rmon ,
-output Rx_apply_rmon ,
-output [2:0] Rx_pkt_err_type_rmon ,
-output [2:0] Rx_pkt_type_rmon ,
-
- output [15:0] rx_fifo_occupied,
- output rx_fifo_full,
- output rx_fifo_empty,
- output [31:0] debug
-);
-//******************************************************************************
-//internal signals
-//******************************************************************************
- //CRC_chk interface
-wire CRC_en ;
-wire [7:0] CRC_data;
-wire CRC_init;
-wire CRC_err ;
- //MAC_rx_add_chk interface
-wire MAC_add_en ;
-wire [7:0] MAC_add_data;
-wire MAC_rx_add_chk_err ;
- //broadcast_filter
-wire broadcast_ptr ;
-wire broadcast_drop ;
- //MAC_rx_ctrl interface
-wire [7:0] Fifo_data ;
-wire Fifo_data_en ;
-wire Fifo_full ;
-wire Fifo_data_err ;
-wire Fifo_data_drop ;
-wire Fifo_data_end ;
-
-
-//******************************************************************************
-//instantiation
-//******************************************************************************
-
-
-MAC_rx_ctrl U_MAC_rx_ctrl(
-.Reset (Reset ),
-.Clk (Clk ),
- //RMII interface ( //RMII interface ),
-.MCrs_dv (MCrs_dv ),
-.MRxD (MRxD ),
-.MRxErr (MRxErr ),
- //CRC_chk interface (//CRC_chk interface ),
-.CRC_en (CRC_en ),
-.CRC_data (CRC_data ),
-.CRC_init (CRC_init ),
-.CRC_err (CRC_err ),
- //MAC_rx_add_chk interface (//MAC_rx_add_chk interface),
-.MAC_add_en (MAC_add_en ),
-.MAC_add_data (MAC_add_data ),
-.MAC_rx_add_chk_err (MAC_rx_add_chk_err ),
- //broadcast_filter (//broadcast_filter ),
-.broadcast_ptr (broadcast_ptr ),
-.broadcast_drop (broadcast_drop ),
- //flow_control signals (//flow_control signals ),
-.pause_quanta (pause_quanta ),
-.pause_quanta_val (pause_quanta_val ),
- //MAC_rx_FF interface (//MAC_rx_FF interface ),
-.Fifo_data (Fifo_data ),
-.Fifo_data_en (Fifo_data_en ),
-.Fifo_data_err (Fifo_data_err ),
-.Fifo_data_drop (Fifo_data_drop ),
-.Fifo_data_end (Fifo_data_end ),
-.Fifo_full (Fifo_full ),
- //RMON interface (//RMON interface ),
-.Rx_pkt_type_rmon (Rx_pkt_type_rmon ),
-.Rx_pkt_length_rmon (Rx_pkt_length_rmon ),
-.Rx_apply_rmon (Rx_apply_rmon ),
-.Rx_pkt_err_type_rmon (Rx_pkt_err_type_rmon ),
- //CPU (//CPU ),
-.RX_IFG_SET (RX_IFG_SET ),
-.RX_MAX_LENGTH (RX_MAX_LENGTH ),
-.RX_MIN_LENGTH (RX_MIN_LENGTH )
-);
-
- assign debug = {28'd0, Fifo_data_en, Fifo_data_err, Fifo_data_end,Fifo_full};
-
-MAC_rx_FF #(.RX_FF_DEPTH(RX_FF_DEPTH)) U_MAC_rx_FF (
-.Reset (Reset ),
-.Clk_MAC (Clk ),
-.Clk_SYS (Clk_user ),
- //MAC_rx_ctrl interface (//MAC_rx_ctrl interface ),
-.Fifo_data (Fifo_data ),
-.Fifo_data_en (Fifo_data_en ),
-.Fifo_full (Fifo_full ),
-.Fifo_data_err (Fifo_data_err ),
-//.Fifo_data_drop (Fifo_data_drop ),
-.Fifo_data_end (Fifo_data_end ),
-.Fifo_space (rx_fifo_space ),
- //CPU (//CPU ),
-.Rx_Hwmark (Rx_Hwmark ),
-.Rx_Lwmark (Rx_Lwmark ),
-.RX_APPEND_CRC (RX_APPEND_CRC ),
- //user interface (//user interface ),
-.Rx_mac_empty (Rx_mac_empty ),
-.Rx_mac_rd (Rx_mac_rd ),
-.Rx_mac_data (Rx_mac_data ),
-.Rx_mac_BE (Rx_mac_BE ),
-.Rx_mac_sop (Rx_mac_sop ),
-.Rx_mac_eop (Rx_mac_eop ),
-.Rx_mac_err (Rx_mac_err ),
-
-.fifo_occupied(rx_fifo_occupied),
-.fifo_full_dbg(rx_fifo_full),
-.fifo_empty(rx_fifo_empty)
-);
-
- Broadcast_filter U_Broadcast_filter
- (.Reset (Reset ),
- .Clk (Clk ),
- //MAC_rx_ctrl (//MAC_rx_ctrl ),
- .broadcast_ptr (broadcast_ptr ),
- .broadcast_drop (broadcast_drop ),
- //FromCPU (//FromCPU ),
- .broadcast_filter_en (broadcast_filter_en ),
- .broadcast_bucket_depth (broadcast_bucket_depth ),
- .broadcast_bucket_interval (broadcast_bucket_interval )
- );
-
-CRC_chk U_CRC_chk(
-.Reset (Reset ),
-.Clk (Clk ),
-.CRC_data (CRC_data ),
-.CRC_init (CRC_init ),
-.CRC_en (CRC_en ),
- //From CPU (//From CPU ),
-.CRC_chk_en (CRC_chk_en ),
-.CRC_err (CRC_err )
-);
-
- MAC_rx_add_chk U_MAC_rx_add_chk
- (.Reset (Reset ),
- .Clk (Clk ),
- .Init (CRC_init ),
- .data (MAC_add_data ),
- .MAC_add_en (MAC_add_en ),
- .MAC_rx_add_chk_err (MAC_rx_add_chk_err ),
- //From CPU (//From CPU ),
- .MAC_rx_add_chk_en (MAC_rx_add_chk_en ),
- .MAC_add_prom_data (MAC_add_prom_data ),
- .MAC_add_prom_add (MAC_add_prom_add ),
- .MAC_add_prom_wr (MAC_add_prom_wr )
- );
-
-endmodule // MAC_rx
diff --git a/eth/rtl/verilog/MAC_rx/Broadcast_filter.v b/eth/rtl/verilog/MAC_rx/Broadcast_filter.v deleted file mode 100644 index bc95e31d7..000000000 --- a/eth/rtl/verilog/MAC_rx/Broadcast_filter.v +++ /dev/null @@ -1,107 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// Broadcast_filter.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: Broadcast_filter.v,v $
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:16 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module Broadcast_filter (
-Reset ,
-Clk ,
-//MAC_rx_ctrl ,
-broadcast_ptr ,
-broadcast_drop ,
-//FromCPU ,
-broadcast_filter_en ,
-broadcast_bucket_depth ,
-broadcast_bucket_interval
-);
-input Reset ;
-input Clk ;
- //MAC_rx_ctrl
-input broadcast_ptr ;
-output broadcast_drop ;
- //FromCPU ;
-input broadcast_filter_en ;
-input [15:0] broadcast_bucket_depth ;
-input [15:0] broadcast_bucket_interval ;
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-reg [15:0] time_counter ;
-reg [15:0] broadcast_counter ;
-reg broadcast_drop ;
-//******************************************************************************
-//
-//******************************************************************************
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- time_counter <=0;
- else if (time_counter==broadcast_bucket_interval)
- time_counter <=0;
- else
- time_counter <=time_counter+1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- broadcast_counter <=0;
- else if (time_counter==broadcast_bucket_interval)
- broadcast_counter <=0;
- else if (broadcast_ptr&&broadcast_counter!=broadcast_bucket_depth)
- broadcast_counter <=broadcast_counter+1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- broadcast_drop <=0;
- else if(broadcast_filter_en&&broadcast_counter==broadcast_bucket_depth)
- broadcast_drop <=1;
- else
- broadcast_drop <=0;
-
-endmodule
\ No newline at end of file diff --git a/eth/rtl/verilog/MAC_rx/CRC_chk.v b/eth/rtl/verilog/MAC_rx/CRC_chk.v deleted file mode 100644 index d6bb22b51..000000000 --- a/eth/rtl/verilog/MAC_rx/CRC_chk.v +++ /dev/null @@ -1,128 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// CRC_chk.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: CRC_chk.v,v $
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:16 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module CRC_chk(
-Reset ,
-Clk ,
-CRC_data ,
-CRC_init ,
-CRC_en ,
-//From CPU
-CRC_chk_en ,
-CRC_err
-);
-input Reset ;
-input Clk ;
-input[7:0] CRC_data ;
-input CRC_init ;
-input CRC_en ;
- //From CPU
-input CRC_chk_en ;
-output CRC_err ;
-//******************************************************************************
-//internal signals
-//******************************************************************************
-reg [31:0] CRC_reg;
-//******************************************************************************
-//input data width is 8bit, and the first bit is bit[0]
-function[31:0] NextCRC;
- input[7:0] D;
- input[31:0] C;
- reg[31:0] NewCRC;
- begin
- NewCRC[0]=C[24]^C[30]^D[1]^D[7];
- NewCRC[1]=C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[2]=C[26]^D[5]^C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[3]=C[27]^D[4]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[4]=C[28]^D[3]^C[27]^D[4]^C[26]^D[5]^C[24]^C[30]^D[1]^D[7];
- NewCRC[5]=C[29]^D[2]^C[28]^D[3]^C[27]^D[4]^C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[6]=C[30]^D[1]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[7]=C[31]^D[0]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[24]^D[7];
- NewCRC[8]=C[0]^C[28]^D[3]^C[27]^D[4]^C[25]^D[6]^C[24]^D[7];
- NewCRC[9]=C[1]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^D[6];
- NewCRC[10]=C[2]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[24]^D[7];
- NewCRC[11]=C[3]^C[28]^D[3]^C[27]^D[4]^C[25]^D[6]^C[24]^D[7];
- NewCRC[12]=C[4]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[13]=C[5]^C[30]^D[1]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[14]=C[6]^C[31]^D[0]^C[30]^D[1]^C[28]^D[3]^C[27]^D[4]^C[26]^D[5];
- NewCRC[15]=C[7]^C[31]^D[0]^C[29]^D[2]^C[28]^D[3]^C[27]^D[4];
- NewCRC[16]=C[8]^C[29]^D[2]^C[28]^D[3]^C[24]^D[7];
- NewCRC[17]=C[9]^C[30]^D[1]^C[29]^D[2]^C[25]^D[6];
- NewCRC[18]=C[10]^C[31]^D[0]^C[30]^D[1]^C[26]^D[5];
- NewCRC[19]=C[11]^C[31]^D[0]^C[27]^D[4];
- NewCRC[20]=C[12]^C[28]^D[3];
- NewCRC[21]=C[13]^C[29]^D[2];
- NewCRC[22]=C[14]^C[24]^D[7];
- NewCRC[23]=C[15]^C[25]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[24]=C[16]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[25]=C[17]^C[27]^D[4]^C[26]^D[5];
- NewCRC[26]=C[18]^C[28]^D[3]^C[27]^D[4]^C[24]^C[30]^D[1]^D[7];
- NewCRC[27]=C[19]^C[29]^D[2]^C[28]^D[3]^C[25]^C[31]^D[0]^D[6];
- NewCRC[28]=C[20]^C[30]^D[1]^C[29]^D[2]^C[26]^D[5];
- NewCRC[29]=C[21]^C[31]^D[0]^C[30]^D[1]^C[27]^D[4];
- NewCRC[30]=C[22]^C[31]^D[0]^C[28]^D[3];
- NewCRC[31]=C[23]^C[29]^D[2];
- NextCRC=NewCRC;
- end
- endfunction
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- CRC_reg <=32'hffffffff;
- else if (CRC_init)
- CRC_reg <=32'hffffffff;
- else if (CRC_en)
- CRC_reg <=NextCRC(CRC_data,CRC_reg);
-
-assign CRC_err = CRC_chk_en&(CRC_reg[31:0] != 32'hc704dd7b);
-
-endmodule
diff --git a/eth/rtl/verilog/MAC_rx/MAC_rx_FF.v b/eth/rtl/verilog/MAC_rx/MAC_rx_FF.v deleted file mode 100644 index e212b8986..000000000 --- a/eth/rtl/verilog/MAC_rx/MAC_rx_FF.v +++ /dev/null @@ -1,167 +0,0 @@ -
-// ////////////////////////////////////////////////////////////////////
-// Completely Rewritten by M. Ettus, no John Gao code left
-// ////////////////////////////////////////////////////////////////////
-
-module MAC_rx_FF
- #(parameter RX_FF_DEPTH = 9)
- (input Reset,
- input Clk_MAC,
- input Clk_SYS,
-
- // MAC_rx_ctrl interface
- input [7:0] Fifo_data,
- input Fifo_data_en,
- output Fifo_full,
- input Fifo_data_err,
- input Fifo_data_end,
- output [15:0] Fifo_space,
-
- // CPU
- input RX_APPEND_CRC,
- input [4:0] Rx_Hwmark,
- input [4:0] Rx_Lwmark,
-
- // User interface
- output Rx_mac_empty,
- input Rx_mac_rd,
- output [31:0] Rx_mac_data,
- output [1:0] Rx_mac_BE,
- output Rx_mac_sop,
- output Rx_mac_eop,
- output Rx_mac_err,
-
- // FIFO Levels
- output [15:0] fifo_occupied,
- output fifo_full_dbg,
- output fifo_empty
- );
-
- reg [1:0] FF_state;
- reg [2:0] PKT_state;
- reg [31:0] staging;
- reg [35:0] staging2;
- reg line_ready, line_ready_d1;
- wire sop_i, eop_i;
- reg [1:0] be;
-
- always @(posedge Clk_MAC or posedge Reset)
- if(Reset)
- FF_state <= 0;
- else
- if(Fifo_data_err | Fifo_data_end)
- FF_state <= 0;
- else if(Fifo_data_en)
- FF_state <= FF_state + 1;
-
- always @(posedge Clk_MAC or posedge Reset)
- if(Reset)
- staging[31:0] <= 0;
- else if(Fifo_data_en)
- case(FF_state)
- 0 : staging[31:24] <= Fifo_data;
- 1 : staging[23:16] <= Fifo_data;
- 2 : staging[15:8] <= Fifo_data;
- 3 : staging[7:0] <= Fifo_data;
- endcase // case(FF_state)
-
- localparam PKT_idle = 0;
- localparam PKT_sop = 1;
- localparam PKT_pkt = 2;
- localparam PKT_end = 3;
- localparam PKT_err = 4;
-
- always @(posedge Clk_MAC or posedge Reset)
- if(Reset)
- PKT_state <= 0;
- else
- case(PKT_state)
- PKT_idle :
- if(Fifo_data_en)
- PKT_state <= PKT_sop;
- PKT_sop, PKT_pkt :
- if(Fifo_data_err | (line_ready & Fifo_full))
- PKT_state <= PKT_err;
- else if(Fifo_data_end)
- PKT_state <= PKT_end;
- else if(line_ready & ~Fifo_full)
- PKT_state <= PKT_pkt;
- PKT_end :
- PKT_state <= PKT_idle;
- PKT_err :
- if(~Fifo_full)
- PKT_state <= PKT_idle;
- endcase // case(PKT_state)
-
- assign sop_i = (PKT_state == PKT_sop);
- assign eop_i = (PKT_state == PKT_end);
-
- always @(posedge Clk_MAC)
- if(line_ready)
- staging2 <= {sop_i, eop_i, be[1:0], staging};
-
- always @(posedge Clk_MAC)
- if(Reset)
- line_ready <= 0;
- else if((Fifo_data_en & (FF_state==2'd3)) | Fifo_data_end | Fifo_data_err)
- line_ready <= 1;
- else
- line_ready <= 0;
-
- always @(posedge Clk_MAC)
- line_ready_d1 <= line_ready;
-
- always @(posedge Clk_MAC)
- if(Fifo_data_end | Fifo_data_err)
- be <= FF_state;
- else
- be <= 0;
-
- wire sop_o, eop_o, empty;
- wire [1:0] be_o;
- wire [RX_FF_DEPTH-1:0] occupied, occupied_sysclk;
- wire [31:0] dataout;
-
-/*
- fifo_2clock #(.DWIDTH(36),.AWIDTH(RX_FF_DEPTH)) mac_rx_fifo
- (.wclk(Clk_MAC),.datain((PKT_state==PKT_err) ? 36'hF_FFFF_FFFF : staging2),.write(~Fifo_full & (line_ready_d1|(PKT_state==PKT_err))),
- .full(Fifo_full),.level_wclk(occupied),
- .rclk(Clk_SYS),.dataout({sop_o,eop_o,be_o[1:0],dataout}),.read(Rx_mac_rd),
- .empty(empty),.level_rclk(),
- .arst(Reset) );
- */
-
- fifo_xlnx_2Kx36_2clk mac_rx_ff_core
- (
- .din((PKT_state==PKT_err) ? 36'hF_FFFF_FFFF : staging2), // Bus [35 : 0]
- .rd_clk(Clk_SYS),
- .rd_en(Rx_mac_rd),
- .rst(Reset),
- .wr_clk(Clk_MAC),
- .wr_en(~Fifo_full & (line_ready_d1|(PKT_state==PKT_err))),
- .dout({sop_o,eop_o,be_o[1:0],dataout}), // Bus [35 : 0]
- .empty(empty),
- .full(Fifo_full),
- .rd_data_count(occupied_sysclk), // Bus [11 : 0]
- .wr_data_count(occupied)); // Bus [11 : 0]
-
- assign Fifo_space[15:RX_FF_DEPTH] = 0;
- assign Fifo_space[RX_FF_DEPTH-1:0] = ~occupied;
- assign fifo_occupied = occupied_sysclk;
- assign fifo_full_dbg = Fifo_full; // FIXME -- in wrong clock domain
- assign fifo_empty = empty;
-
- // mac side fifo interface
- // Input - Rx_mac_rd
- // Output - Rx_mac_empty, Rx_mac_sop, Rx_mac_eop, Rx_mac_err, Rx_mac_data, Rx_mac_BE
-
- assign Rx_mac_BE = be_o;
- assign Rx_mac_sop = sop_o & ~eop_o;
- assign Rx_mac_eop = eop_o;
- assign Rx_mac_err = sop_o & eop_o;
- assign Rx_mac_empty = empty;
- assign Rx_mac_data = dataout;
-
-endmodule // MAC_rx_FF
-
-// FIXME Should we send out an "almost full" signal instead of full?
diff --git a/eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v b/eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v deleted file mode 100644 index 0c8d6bd4e..000000000 --- a/eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v +++ /dev/null @@ -1,158 +0,0 @@ -// ////////////////////////////////////////////////////////////////////
-// // ////
-// // MAC_rx_add_chk.v ////
-// // ////
-// // This file is part of the Ethernet IP core project ////
-// // http://www.opencores.org/projects.cgi/wr_en/ethernet_tri_mode/////
-// // ////
-// // Author(s): ////
-// // - Jon Gao (gaojon@yahoo.com) ////
-// // ////
-// // ////
-// ////////////////////////////////////////////////////////////////////
-// // ////
-// // Copyright (C) 2001 Authors ////
-// // ////
-// // This source file may be used and distributed without ////
-// // restriction provided that this copyright statement is not ////
-// // removed from the file and that any derivative work contains ////
-// // the original copyright notice and the associated disclaimer. ////
-// // ////
-// // This source file is free software; you can redistribute it ////
-// // and/or modify it under the terms of the GNU Lesser General ////
-// // Public License as published by the Free Software Foundation; ////
-// // either version 2.1 of the License, or (at your option) any ////
-// // later version. ////
-// // ////
-// // This source is distributed in the hope that it will be ////
-// // useful, but WITHOUT ANY WARRANTY; without even the implied ////
-// // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-// // PURPOSE. See the GNU Lesser General Public License for more ////
-// // details. ////
-// // ////
-// // You should have received a copy of the GNU Lesser General ////
-// // Public License along with this source; if not, download it ////
-// // from http://www.opencores.org/lgpl.shtml ////
-// // ////
-// ////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: MAC_rx_add_chk.v,v $
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:17 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module MAC_rx_add_chk
- (Reset ,
- Clk ,
- Init ,
- data ,
- MAC_add_en ,
- MAC_rx_add_chk_err ,
- //From CPU
- MAC_rx_add_chk_en ,
- MAC_add_prom_data ,
- MAC_add_prom_add ,
- MAC_add_prom_wr
- );
-
- input Reset ;
- input Clk ;
- input Init ;
- input [7:0] data ;
- input MAC_add_en ;
- output MAC_rx_add_chk_err ;
- //From CPU
- input MAC_rx_add_chk_en ;
- input [7:0] MAC_add_prom_data ;
- input [2:0] MAC_add_prom_add ;
- input MAC_add_prom_wr ;
-
- // ******************************************************************************
- // internal signals
- // ******************************************************************************
- reg [2:0] addr_rd;
- wire [2:0] addr_wr;
- wire [7:0] din;
- //wire [7:0] dout;
- reg [7:0] dout;
- wire wr_en;
-
- reg MAC_rx_add_chk_err;
- reg MAC_add_prom_wr_dl1;
- reg MAC_add_prom_wr_dl2;
- reg [7:0] data_dl1 ;
- reg MAC_add_en_dl1 ;
-
- // ******************************************************************************
- // write data from cpu to prom
- // ******************************************************************************
- always @ (posedge Clk or posedge Reset)
- if (Reset)
- begin
- data_dl1 <=0;
- MAC_add_en_dl1 <=0;
- end
- else
- begin
- data_dl1 <=data;
- MAC_add_en_dl1 <=MAC_add_en;
- end
-
- always @ (posedge Clk or posedge Reset)
- if (Reset)
- begin
- MAC_add_prom_wr_dl1 <=0;
- MAC_add_prom_wr_dl2 <=0;
- end
- else
- begin
- MAC_add_prom_wr_dl1 <=MAC_add_prom_wr;
- MAC_add_prom_wr_dl2 <=MAC_add_prom_wr_dl1;
- end
-
- assign wr_en =MAC_add_prom_wr_dl1&!MAC_add_prom_wr_dl2;
- assign addr_wr =MAC_add_prom_add;
- assign din =MAC_add_prom_data;
-
- // ******************************************************************************
- // mac add verify
- // ******************************************************************************
- always @ (posedge Clk or posedge Reset)
- if (Reset)
- addr_rd <=0;
- else if (Init)
- addr_rd <=0;
- else if (MAC_add_en)
- addr_rd <=addr_rd + 1;
-
- always @ (posedge Clk or posedge Reset)
- if (Reset)
- MAC_rx_add_chk_err <=0;
- else if (Init)
- MAC_rx_add_chk_err <=0;
- else if (MAC_rx_add_chk_en && MAC_add_en_dl1 && (dout!=data_dl1) )
- MAC_rx_add_chk_err <=1;
-
-
- // ******************************************************************************
- // a port for read ,b port for write .
- // ******************************************************************************
-
- reg [7:0] address_ram [0:7];
- always @(posedge Clk)
- if(wr_en)
- address_ram[addr_wr] <= din;
-
- always @(posedge Clk)
- dout <= address_ram[addr_rd];
-
-endmodule // MAC_rx_add_chk
diff --git a/eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v b/eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v deleted file mode 100644 index 5ab795801..000000000 --- a/eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v +++ /dev/null @@ -1,664 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// MAC_rx_ctrl.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: MAC_rx_ctrl.v,v $
-// Revision 1.4 2006/06/25 04:58:56 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.3 2005/12/16 06:44:17 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.2 2005/12/13 12:15:37 Administrator
-// no message
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module MAC_rx_ctrl (
-Reset ,
-Clk ,
-//RMII interface
-MCrs_dv , //
-MRxD , //
-MRxErr , //
-//CRC_chk interface
-CRC_en ,
-CRC_data,
-CRC_init ,
-CRC_err ,
-//MAC_rx_add_chk interface
-MAC_add_en ,
-MAC_add_data,
-MAC_rx_add_chk_err ,
-//broadcast_filter
-broadcast_ptr ,
-broadcast_drop ,
-//flow_control signals
-pause_quanta ,
-pause_quanta_val ,
-//MAC_rx_FF interface
-Fifo_data ,
-Fifo_data_en ,
-Fifo_data_err ,
-Fifo_data_drop ,
-Fifo_data_end ,
-Fifo_full ,
-//RMON interface
-Rx_pkt_type_rmon ,
-Rx_pkt_length_rmon ,
-Rx_apply_rmon ,
-Rx_pkt_err_type_rmon ,
-//CPU
-RX_IFG_SET ,
-RX_MAX_LENGTH,
-RX_MIN_LENGTH
-);
-
-input Reset ;
-input Clk ;
- //RMII interface
-input MCrs_dv ;
-input [7:0] MRxD ;
-input MRxErr ;
- //CRC_chk interface
-output CRC_en ;
-output CRC_init;
-output [7:0] CRC_data;
-input CRC_err ;
- //MAC_rx_add_chk interface
-output MAC_add_en ;
-output [7:0] MAC_add_data;
-input MAC_rx_add_chk_err ;
- //broadcast_filter
-output broadcast_ptr ;
-input broadcast_drop ;
- //flow_control signals
-output [15:0] pause_quanta ;
-output pause_quanta_val ;
- //MAC_rx_FF interface
-output [7:0] Fifo_data ;
-output Fifo_data_en ;
-output Fifo_data_err ;
-output Fifo_data_drop ;
-output Fifo_data_end ;
-input Fifo_full;
- //RMON interface
-output [15:0] Rx_pkt_length_rmon ;
-output Rx_apply_rmon ;
-output [2:0] Rx_pkt_err_type_rmon ;
-output [2:0] Rx_pkt_type_rmon ;
- //CPU
-input [5:0] RX_IFG_SET ;
-input [15:0] RX_MAX_LENGTH ;// 1518
-input [6:0] RX_MIN_LENGTH ;// 64
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-parameter State_idle =4'd00;
-parameter State_preamble =4'd01;
-parameter State_SFD =4'd02;
-parameter State_data =4'd03;
-parameter State_checkCRC =4'd04;
-parameter State_OkEnd =4'd07;
-parameter State_DropEnd =4'd08;
-parameter State_ErrEnd =4'd09;
-parameter State_CRCErrEnd =4'd10;
-parameter State_FFFullDrop =4'd11;
-parameter State_FFFullErrEnd =4'd12;
-parameter State_IFG =4'd13;
-parameter State_Drop2End =4'd14;
-
-parameter Pause_idle =4'd0;
-parameter Pause_pre_syn =4'd1;
-parameter Pause_quanta_hi =4'd2;
-parameter Pause_quanta_lo =4'd3;
-parameter Pause_syn =4'd4;
-
-reg [3:0] Current_state /* synthesis syn_keep=1 */;
-reg [3:0] Next_state;
-reg [3:0] Pause_current /* synthesis syn_keep=1 */;
-reg [3:0] Pause_next;
-reg [5:0] IFG_counter;
-reg Crs_dv ;
-reg [7:0] RxD ;
-reg [7:0] RxD_dl1 ;
-reg RxErr ;
-reg [15:0] Frame_length_counter;
-reg Too_long;
-reg Too_short;
-reg ProcessingHeader;
-//reg Fifo_data_en;
-//reg Fifo_data_err;
-//reg Fifo_data_drop;
-//reg Fifo_data_end;
-reg CRC_en;
-reg CRC_init;
-reg Rx_apply_rmon;
-reg [2:0] Rx_pkt_err_type_rmon;
-reg MAC_add_en;
-reg [2:0] Rx_pkt_type_rmon;
-reg [7:0] pause_quanta_h ;
-reg [15:0] pause_quanta ;
-reg pause_quanta_val ;
-reg pause_quanta_val_tmp;
-reg pause_frame_ptr ;
-reg broadcast_ptr ;
-//******************************************************************************
-//delay signals
-//******************************************************************************
-
-always @ (posedge Reset or posedge Clk)
- if (Reset)
- begin
- Crs_dv <=0;
- RxD <=0;
- RxErr <=0;
- end
- else
- begin
- Crs_dv <=MCrs_dv ;
- RxD <=MRxD ;
- RxErr <=MRxErr ;
- end
-
-always @ (posedge Reset or posedge Clk)
- if (Reset)
- RxD_dl1 <=0;
- else
- RxD_dl1 <=RxD;
-
-//---------------------------------------------------------------------------
-// Small pre-FIFO (acutally a synchronously clearable shift-register) for
-// storing the first part of a packet before writing it to the "real" FIFO
-// in MAC_rx_FF. This allows a packet to be dropped safely if an error
-// happens in the beginning of a packet (or if the MAC address doesn't pass
-// the receive filter!)
-//---------------------------------------------------------------------------
-
- reg pre_fifo_data_drop;
- reg pre_fifo_data_en;
- reg pre_fifo_data_err;
- reg pre_fifo_data_end;
- wire [7:0] pre_fifo_wrdata;
-
- reg [8+3-1:0] pre_fifo_element_0;
- reg [8+3-1:0] pre_fifo_element_1;
- reg [8+3-1:0] pre_fifo_element_2;
- reg [8+3-1:0] pre_fifo_element_3;
- reg [8+3-1:0] pre_fifo_element_4;
- reg [8+3-1:0] pre_fifo_element_5;
- reg [8+3-1:0] pre_fifo_element_6;
- reg [8+3-1:0] pre_fifo_element_7;
- reg [8+3-1:0] pre_fifo_element_8;
- reg [8+3-1:0] pre_fifo_element_9;
-
- always @( posedge Reset or posedge Clk )
- if ( Reset )
- begin
- pre_fifo_element_0 <= 'b0;
- pre_fifo_element_1 <= 'b0;
- pre_fifo_element_2 <= 'b0;
- pre_fifo_element_3 <= 'b0;
- pre_fifo_element_4 <= 'b0;
- pre_fifo_element_5 <= 'b0;
- pre_fifo_element_6 <= 'b0;
- pre_fifo_element_7 <= 'b0;
- pre_fifo_element_8 <= 'b0;
- pre_fifo_element_9 <= 'b0;
- end
- else
- begin
- if ( pre_fifo_data_drop )
- begin
- pre_fifo_element_0 <= 'b0;
- pre_fifo_element_1 <= 'b0;
- pre_fifo_element_2 <= 'b0;
- pre_fifo_element_3 <= 'b0;
- pre_fifo_element_4 <= 'b0;
- pre_fifo_element_5 <= 'b0;
- pre_fifo_element_6 <= 'b0;
- pre_fifo_element_7 <= 'b0;
- pre_fifo_element_8 <= 'b0;
- pre_fifo_element_9 <= 'b0;
- end
- else
- begin
- pre_fifo_element_0 <= pre_fifo_element_1;
- pre_fifo_element_1 <= pre_fifo_element_2;
- pre_fifo_element_2 <= pre_fifo_element_3;
- pre_fifo_element_3 <= pre_fifo_element_4;
- pre_fifo_element_4 <= pre_fifo_element_5;
- pre_fifo_element_5 <= pre_fifo_element_6;
- pre_fifo_element_6 <= pre_fifo_element_7;
- pre_fifo_element_7 <= pre_fifo_element_8;
- pre_fifo_element_8 <= pre_fifo_element_9;
- pre_fifo_element_9 <= { pre_fifo_data_en,
- pre_fifo_data_err,
- pre_fifo_data_end,
- pre_fifo_wrdata };
- end
- end
-
- assign Fifo_data = pre_fifo_element_0[7:0];
- assign Fifo_data_end = pre_fifo_element_0[8];
- assign Fifo_data_err = pre_fifo_element_0[9];
- assign Fifo_data_en = pre_fifo_element_0[10];
-
- assign CRC_data = pre_fifo_wrdata;
- assign MAC_add_data = pre_fifo_wrdata;
-
-//******************************************************************************
-//State_machine
-//******************************************************************************
-
-always @( posedge Reset or posedge Clk )
- if ( Reset )
- Current_state <= State_idle;
- else
- Current_state <= Next_state;
-
-always @ (*)
- case (Current_state)
- State_idle:
- if ( Crs_dv&&RxD==8'h55 )
- Next_state = State_preamble;
- else
- Next_state = Current_state;
-
- State_preamble:
- if ( !Crs_dv )
- Next_state = State_DropEnd;
- else if ( RxErr )
- Next_state = State_DropEnd;
- else if ( RxD==8'hd5 )
- Next_state = State_SFD;
- else if ( RxD==8'h55 )
- Next_state =Current_state;
- else
- Next_state = State_DropEnd;
-
- State_SFD:
- if ( !Crs_dv )
- Next_state = State_DropEnd;
- else if ( RxErr )
- Next_state = State_DropEnd;
- else
- Next_state = State_data;
-
- State_data:
- if ( !Crs_dv && !ProcessingHeader && !Too_short && !Too_long )
- Next_state = State_checkCRC;
- else if ( !Crs_dv && ProcessingHeader )
- Next_state = State_Drop2End;
- else if ( !Crs_dv && (Too_short | Too_long) )
- Next_state = State_ErrEnd;
- else if ( Fifo_full )
- Next_state = State_FFFullErrEnd;
- else if ( RxErr && ProcessingHeader )
- Next_state = State_Drop2End;
- else if ( RxErr || Too_long )
- Next_state = State_ErrEnd;
- else if ( MAC_rx_add_chk_err || broadcast_drop )
- Next_state = State_DropEnd;
- else
- Next_state = State_data;
-
- State_checkCRC:
- if ( CRC_err )
- Next_state = State_CRCErrEnd;
- else
- Next_state = State_OkEnd;
-
- State_OkEnd:
- Next_state = State_IFG;
-
- State_ErrEnd:
- Next_state = State_IFG;
-
- State_DropEnd:
- Next_state = State_IFG;
-
- State_Drop2End:
- Next_state = State_IFG;
-
- State_CRCErrEnd:
- Next_state = State_IFG;
-
- State_FFFullErrEnd:
- Next_state = State_FFFullDrop;
-
- State_FFFullDrop:
- if ( !Crs_dv )
- Next_state =State_IFG;
- else
- Next_state =Current_state;
-
- State_IFG:
- if ( IFG_counter==RX_IFG_SET-4 ) // Remove some additional time?
- Next_state = State_idle;
- else
- Next_state = Current_state;
-
- default:
- Next_state = State_idle;
- endcase
-
-always @( posedge Reset or posedge Clk )
- if ( Reset )
- IFG_counter <= 0;
- else if ( Current_state!=State_IFG )
- IFG_counter <= 0;
- else
- IFG_counter <= IFG_counter + 1;
-
-//******************************************************************************
-//gen fifo interface signals
-//******************************************************************************
-
-assign pre_fifo_wrdata = RxD_dl1;
-
-always @( Current_state )
- if ( Current_state==State_data )
- pre_fifo_data_en = 1;
- else
- pre_fifo_data_en = 0;
-
-always @( Current_state )
- if ( (Current_state==State_ErrEnd ) ||
- (Current_state==State_OkEnd ) ||
- (Current_state==State_CRCErrEnd ) ||
- (Current_state==State_FFFullErrEnd) ||
- (Current_state==State_DropEnd ) ||
- (Current_state==State_Drop2End ) )
- pre_fifo_data_end = 1;
- else
- pre_fifo_data_end = 0;
-
-always @( Current_state )
- if ( (Current_state==State_ErrEnd ) ||
- (Current_state==State_CRCErrEnd ) ||
- (Current_state==State_FFFullErrEnd) ||
- (Current_state==State_DropEnd ) ||
- (Current_state==State_Drop2End ) )
- pre_fifo_data_err = 1;
- else
- pre_fifo_data_err = 0;
-
-always @( Current_state )
- if ( (Current_state==State_DropEnd ) ||
- (Current_state==State_Drop2End) )
- pre_fifo_data_drop = 1;
- else
- pre_fifo_data_drop = 0;
-
- // Drop in main Rx FIFO is no longer supported!
- assign Fifo_data_drop = 0;
-
-//******************************************************************************
-//CRC_chk interface
-//******************************************************************************
-
-always @(Current_state)
- if (Current_state==State_data)
- CRC_en =1;
- else
- CRC_en =0;
-
-always @(Current_state)
- if (Current_state==State_SFD)
- CRC_init =1;
- else
- CRC_init =0;
-
-//******************************************************************************
-//gen rmon signals
-//******************************************************************************
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Frame_length_counter <=0;
- else if (Current_state==State_SFD)
- Frame_length_counter <=1;
- else if (Current_state==State_data)
- Frame_length_counter <=Frame_length_counter+ 1'b1;
-
-always @( Frame_length_counter )
- if ( Frame_length_counter < 8 )
- ProcessingHeader = 1;
- else
- ProcessingHeader = 0;
-
-always @ (Frame_length_counter or RX_MIN_LENGTH)
- if (Frame_length_counter<RX_MIN_LENGTH)
- Too_short =1;
- else
- Too_short =0;
-
-always @ (*)
- if (Frame_length_counter>RX_MAX_LENGTH)
- Too_long =1;
- else
- Too_long =0;
-
-assign Rx_pkt_length_rmon = Frame_length_counter-1'b1;
-
-reg [2:0] Rx_apply_rmon_reg;
-
-always @( posedge Clk or posedge Reset )
- if ( Reset )
- begin
- Rx_apply_rmon <= 0;
- Rx_apply_rmon_reg <= 'b0;
- end
- else
- begin
- if ( (Current_state==State_OkEnd ) ||
- (Current_state==State_ErrEnd ) ||
- (Current_state==State_CRCErrEnd ) ||
- (Current_state==State_Drop2End ) ||
- (Current_state==State_FFFullErrEnd) )
- Rx_apply_rmon <= 1;
- else
- if ( Rx_apply_rmon_reg[2] )
- Rx_apply_rmon <= 0;
-
- Rx_apply_rmon_reg <= { Rx_apply_rmon_reg[1:0], Rx_apply_rmon };
- end
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Rx_pkt_err_type_rmon <=0;
- else if (Current_state==State_CRCErrEnd)
- Rx_pkt_err_type_rmon <=3'b001 ;//
- else if (Current_state==State_FFFullErrEnd)
- Rx_pkt_err_type_rmon <=3'b010 ;//
- else if ( (Current_state==State_ErrEnd) || (Current_state==State_Drop2End) )
- Rx_pkt_err_type_rmon <=3'b011 ;//
- else if(Current_state==State_OkEnd)
- Rx_pkt_err_type_rmon <=3'b100 ;
-
-
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Rx_pkt_type_rmon <=0;
- else if (Current_state==State_OkEnd&&pause_frame_ptr)
- Rx_pkt_type_rmon <=3'b100 ;//
- else if(Current_state==State_SFD&&Next_state==State_data)
- Rx_pkt_type_rmon <={1'b0,MRxD[7:6]};
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- broadcast_ptr <=0;
- else if(Current_state==State_IFG)
- broadcast_ptr <=0;
- else if(Current_state==State_SFD&&Next_state==State_data&&MRxD[7:6]==2'b11)
- broadcast_ptr <=1;
-
-
-
-//******************************************************************************
-//MAC add checker signals
-//******************************************************************************
-always @ (Frame_length_counter or pre_fifo_data_en)
- if(Frame_length_counter>=1&&Frame_length_counter<=6)
- MAC_add_en <=pre_fifo_data_en;
- else
- MAC_add_en <=0;
-
-//******************************************************************************
-//flow control signals
-//******************************************************************************
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Pause_current <=Pause_idle;
- else
- Pause_current <=Pause_next;
-
-always @ (*)
- case (Pause_current)
- Pause_idle :
- if(Current_state==State_SFD)
- Pause_next =Pause_pre_syn;
- else
- Pause_next =Pause_current;
- Pause_pre_syn:
- case (Frame_length_counter)
- 16'd1: if (RxD_dl1==8'h01)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd2: if (RxD_dl1==8'h80)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd3: if (RxD_dl1==8'hc2)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd4: if (RxD_dl1==8'h00)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd5: if (RxD_dl1==8'h00)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd6: if (RxD_dl1==8'h01)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd13: if (RxD_dl1==8'h88)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd14: if (RxD_dl1==8'h08)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd15: if (RxD_dl1==8'h00)
- Pause_next =Pause_current;
- else
- Pause_next =Pause_idle;
- 16'd16: if (RxD_dl1==8'h01)
- Pause_next =Pause_quanta_hi;
- else
- Pause_next =Pause_idle;
- default: Pause_next =Pause_current;
- endcase
- Pause_quanta_hi :
- Pause_next =Pause_quanta_lo;
- Pause_quanta_lo :
- Pause_next =Pause_syn;
- Pause_syn :
- if (Current_state==State_IFG)
- Pause_next =Pause_idle;
- else
- Pause_next =Pause_current;
- default
- Pause_next =Pause_idle;
- endcase
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- pause_quanta_h <=0;
- else if(Pause_current==Pause_quanta_hi)
- pause_quanta_h <=RxD_dl1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- pause_quanta <=0;
- else if(Pause_current==Pause_quanta_lo)
- pause_quanta <={pause_quanta_h,RxD_dl1};
-
- // The following 2 always blocks are a strange way of holding
- // pause_quanta_val high for 2 cycles
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- pause_quanta_val_tmp <=0;
- else if(Current_state==State_OkEnd&&Pause_current==Pause_syn)
- pause_quanta_val_tmp <=1;
- else
- pause_quanta_val_tmp <=0;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- pause_quanta_val <=0;
- else if(Current_state==State_OkEnd&&Pause_current==Pause_syn||pause_quanta_val_tmp)
- pause_quanta_val <=1;
- else
- pause_quanta_val <=0;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- pause_frame_ptr <=0;
- else if(Pause_current==Pause_syn)
- pause_frame_ptr <=1;
- else
- pause_frame_ptr <=0;
-
-endmodule
-
-
diff --git a/eth/rtl/verilog/MAC_top.v b/eth/rtl/verilog/MAC_top.v deleted file mode 100644 index 4e5b0db0a..000000000 --- a/eth/rtl/verilog/MAC_top.v +++ /dev/null @@ -1,518 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// MAC_top.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-
-module MAC_top
- #(parameter TX_FF_DEPTH = 9,
- parameter RX_FF_DEPTH = 9)
- (
- // System signals
- input Clk_125M,
- input Clk_user,
-
- input rst_mac,
- input rst_user,
-
- // Wishbone compliant core host interface
- input RST_I, // Active high (async) reset of the Wishbone interface
- input CLK_I, // Wishbone interface clock (nominally 50 MHz)
- input STB_I, // Active high module-select
- input CYC_I, // Active high cycle-enable
- input [6:0] ADR_I, // Module register address
- input WE_I, // Active high for writes, low for reads
- input [31:0] DAT_I, // Write data
- output [31:0] DAT_O, // Read data
- output ACK_O, // Acknowledge output – single high pulse
-
- // User (packet) interface
- output Rx_mac_empty,
- input Rx_mac_rd,
- output [31:0] Rx_mac_data,
- output [1:0] Rx_mac_BE,
- output Rx_mac_sop,
- output Rx_mac_eop,
- output Rx_mac_err,
-
- output Tx_mac_wa,
- input Tx_mac_wr,
- input [31:0] Tx_mac_data,
- input [1:0] Tx_mac_BE,
- input Tx_mac_sop,
- input Tx_mac_eop,
-
- // PHY interface (GMII/MII)
- output Gtx_clk, // Used only in GMII mode
- input Rx_clk,
- input Tx_clk, // Used only in MII mode
- output Tx_er,
- output Tx_en,
- output [7:0] Txd,
- input Rx_er,
- input Rx_dv,
- input [7:0] Rxd,
- input Crs,
- input Col,
-
- // MDIO interface (to PHY)
- inout Mdio,
- output Mdc,
-
- // FIFO levels
- output [15:0] rx_fifo_occupied,
- output rx_fifo_full,
- output rx_fifo_empty,
- output [15:0] tx_fifo_occupied,
- output tx_fifo_full,
- output tx_fifo_empty,
-
- // Debug Interface
- output [31:0] debug0,
- output [31:0] debug1
-);
-
- wire rst_mac_rx = rst_mac;
- wire rst_mac_tx = rst_mac;
- wire [2:0] Speed;
-
- wire [31:0] debug_rx;
- wire [31:0] debug_tx0;
- wire [31:0] debug_tx1;
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- // RMON interface
- wire [15:0] Rx_pkt_length_rmon;
- wire Rx_apply_rmon;
- wire [2:0] Rx_pkt_err_type_rmon;
- wire [2:0] Rx_pkt_type_rmon;
- wire [2:0] Tx_pkt_type_rmon;
- wire [15:0] Tx_pkt_length_rmon;
- wire Tx_apply_rmon;
- wire [2:0] Tx_pkt_err_type_rmon;
-
- // PHY interface
- wire MCrs_dv;
- wire [7:0] MRxD;
- wire MRxErr;
-
- // Flow-control signals
- wire [15:0] pause_quanta;
- wire pause_quanta_val;
- wire [15:0] rx_fifo_space;
- wire pause_apply, pause_quanta_sub;
- wire xon_gen, xoff_gen, xon_gen_complete, xoff_gen_complete;
- wire [15:0] fc_hwmark, fc_lwmark, fc_padtime;
-
- //PHY interface
- wire [7:0] MTxD;
- wire MTxEn;
- wire MCRS;
-
- // Interface clk signals
- wire MAC_tx_clk;
- wire MAC_rx_clk;
- wire MAC_tx_clk_div;
- wire MAC_rx_clk_div;
-
- // Reg signals
- wire [4:0] Tx_Hwmark;
- wire [4:0] Tx_Lwmark;
- wire pause_frame_send_en;
- wire [15:0] pause_quanta_set;
- wire MAC_tx_add_en;
- wire FullDuplex;
- wire [3:0] MaxRetry;
- wire [5:0] IFGset;
- wire [7:0] MAC_tx_add_prom_data;
- wire [2:0] MAC_tx_add_prom_add;
- wire MAC_tx_add_prom_wr;
- wire tx_pause_en;
-
- // Rx host interface
- wire MAC_rx_add_chk_en;
- wire [7:0] MAC_rx_add_prom_data;
- wire [2:0] MAC_rx_add_prom_add;
- wire MAC_rx_add_prom_wr;
- wire broadcast_filter_en;
- wire RX_APPEND_CRC;
- wire [4:0] Rx_Hwmark;
- wire [4:0] Rx_Lwmark;
- wire CRC_chk_en;
- wire [5:0] RX_IFG_SET;
- wire [15:0] RX_MAX_LENGTH;
- wire [6:0] RX_MIN_LENGTH;
-
- // RMON host interface
- wire [5:0] CPU_rd_addr;
- wire CPU_rd_apply;
- wire CPU_rd_grant;
- wire [31:0] CPU_rd_dout;
-
- // PHY int host interface
- wire Line_loop_en;
-
- // MII to CPU
- wire [7:0] Divider;
- wire [15:0] CtrlData;
- wire [4:0] Rgad;
- wire [4:0] Fiad;
- wire NoPre;
- wire WCtrlData;
- wire RStat;
- wire ScanStat;
- wire Busy;
- wire LinkFail;
- wire Nvalid;
- wire [15:0] Prsd;
- wire WCtrlDataStart;
- wire RStatStart;
- wire UpdateMIIRX_DATAReg;
- wire [15:0] broadcast_bucket_depth;
- wire [15:0] broadcast_bucket_interval;
-
- //-------------------------------------------------------------------------
- // Instantiation of sub-modules
- //-------------------------------------------------------------------------
-
- MAC_rx #(.RX_FF_DEPTH(RX_FF_DEPTH))
- U_MAC_rx(
- .Reset ( rst_mac_rx ),
- .Clk_user ( Clk_user ),
- .Clk ( MAC_rx_clk_div ),
-
- // RMII interface
- .MCrs_dv ( MCrs_dv ),
- .MRxD ( MRxD ),
- .MRxErr ( MRxErr ),
-
- // Flow-control signals
- .pause_quanta ( pause_quanta ),
- .pause_quanta_val ( pause_quanta_val ),
- .rx_fifo_space ( rx_fifo_space ),
-
- // User interface
- .Rx_mac_empty ( Rx_mac_empty ),
- .Rx_mac_rd ( Rx_mac_rd ),
- .Rx_mac_data ( Rx_mac_data ),
- .Rx_mac_BE ( Rx_mac_BE ),
- .Rx_mac_sop ( Rx_mac_sop ),
- .Rx_mac_eop ( Rx_mac_eop ),
- .Rx_mac_err ( Rx_mac_err ),
-
- // CPU
- .MAC_rx_add_chk_en ( MAC_rx_add_chk_en ),
- .MAC_add_prom_data ( MAC_rx_add_prom_data ),
- .MAC_add_prom_add ( MAC_rx_add_prom_add ),
- .MAC_add_prom_wr ( MAC_rx_add_prom_wr ),
- .broadcast_filter_en ( broadcast_filter_en ),
- .broadcast_bucket_depth ( broadcast_bucket_depth ),
- .broadcast_bucket_interval( broadcast_bucket_interval ),
- .RX_APPEND_CRC ( RX_APPEND_CRC ),
- .Rx_Hwmark ( Rx_Hwmark ),
- .Rx_Lwmark ( Rx_Lwmark ),
- .CRC_chk_en ( CRC_chk_en ),
- .RX_IFG_SET ( RX_IFG_SET ),
- .RX_MAX_LENGTH ( RX_MAX_LENGTH ),
- .RX_MIN_LENGTH ( RX_MIN_LENGTH ),
-
- // RMON interface
- .Rx_pkt_length_rmon ( Rx_pkt_length_rmon ),
- .Rx_apply_rmon ( Rx_apply_rmon ),
- .Rx_pkt_err_type_rmon ( Rx_pkt_err_type_rmon ),
- .Rx_pkt_type_rmon ( Rx_pkt_type_rmon ),
-
- .rx_fifo_occupied(rx_fifo_occupied),
- .rx_fifo_full(rx_fifo_full),
- .rx_fifo_empty(rx_fifo_empty),
- .debug(debug_rx)
- );
-
- MAC_tx #(.TX_FF_DEPTH(TX_FF_DEPTH))
- U_MAC_tx(
- .Reset ( rst_mac_tx ),
- .Clk ( MAC_tx_clk_div ),
- //.Clk_user ( Clk_user ),
- .Clk_user ( MAC_tx_clk_div ),
-
- // PHY interface
- .TxD ( MTxD ),
- .TxEn ( MTxEn ),
- .CRS ( MCRS ),
-
- // RMON
- .Tx_pkt_type_rmon ( Tx_pkt_type_rmon ),
- .Tx_pkt_length_rmon ( Tx_pkt_length_rmon ),
- .Tx_apply_rmon ( Tx_apply_rmon ),
- .Tx_pkt_err_type_rmon( Tx_pkt_err_type_rmon ),
-
- // User interface
- .Tx_mac_wa ( Tx_mac_wa ),
- .Tx_mac_wr ( Tx_mac_wr ),
- .Tx_mac_data ( Tx_mac_data ),
- .Tx_mac_BE ( Tx_mac_BE ),
- .Tx_mac_sop ( Tx_mac_sop ),
- .Tx_mac_eop ( Tx_mac_eop ),
-
- // Host interface
- .Tx_Hwmark ( Tx_Hwmark ),
- .Tx_Lwmark ( Tx_Lwmark ),
- .MAC_tx_add_en ( MAC_tx_add_en ),
- .FullDuplex ( FullDuplex ),
- .MaxRetry ( MaxRetry ),
- .IFGset ( IFGset ),
- .MAC_add_prom_data ( MAC_tx_add_prom_data ),
- .MAC_add_prom_add ( MAC_tx_add_prom_add ),
- .MAC_add_prom_wr ( MAC_tx_add_prom_wr ),
-
- .pause_apply ( pause_apply ),
- .pause_quanta_sub ( pause_quanta_sub ),
- .pause_quanta_set ( pause_quanta_set ),
- .xoff_gen ( xoff_gen ),
- .xon_gen ( xon_gen ),
- .xoff_gen_complete ( xoff_gen_complete ),
- .xon_gen_complete ( xon_gen_complete ),
- .debug0(debug_tx0),
- .debug1(debug_tx1)
- );
-
- // Flow control outbound -- when other side sends PAUSE, we wait
- flow_ctrl_tx flow_ctrl_tx
- (.rst(rst_mac_tx),
- .tx_clk(MAC_tx_clk_div),
- // Setting
- .tx_pause_en ( tx_pause_en ),
- // From RX side
- .pause_quanta (pause_quanta),
- .pause_quanta_val(pause_quanta_val), // Other guy sent a PAUSE
- // To TX side
- .pause_apply (pause_apply), // To TX, stop sending new frames
- .pause_quanta_sub (pause_quanta_sub) // From TX, indicates we have used up 1 quanta
- );
-
- flow_ctrl_rx flow_ctrl_rx // When we are running out of RX space, send a PAUSE
- (.rst(rst_mac_rx), // FIXME
- // Settings
- .pause_frame_send_en ( pause_frame_send_en ),
- .pause_quanta_set ( pause_quanta_set ),
- .fc_hwmark (fc_hwmark),
- .fc_lwmark (fc_lwmark),
- .fc_padtime (fc_padtime),
- // From RX side
- .rx_clk(MAC_rx_clk_div),
- .rx_fifo_space (rx_fifo_space), // Decide if we need to send a PAUSE
- // To TX side
- .tx_clk(MAC_tx_clk_div),
- .xoff_gen (xoff_gen),
- .xon_gen(xon_gen), // Tell our TX to send PAUSE frames
- .xoff_gen_complete (xoff_gen_complete),
- .xon_gen_complete(xon_gen_complete)
- );
-
- RMON U_RMON(
- .Clk ( CLK_I ),
- .Reset ( RST_I ),
-
- // Tx RMON
- .Tx_pkt_type_rmon ( Tx_pkt_type_rmon ),
- .Tx_pkt_length_rmon ( Tx_pkt_length_rmon ),
- .Tx_apply_rmon ( Tx_apply_rmon ),
- .Tx_pkt_err_type_rmon( Tx_pkt_err_type_rmon ),
-
- // Rx RMON
- .Rx_pkt_type_rmon ( Rx_pkt_type_rmon ),
- .Rx_pkt_length_rmon ( Rx_pkt_length_rmon ),
- .Rx_apply_rmon ( Rx_apply_rmon ),
- .Rx_pkt_err_type_rmon( Rx_pkt_err_type_rmon ),
-
- // CPU
- .CPU_rd_addr ( CPU_rd_addr ),
- .CPU_rd_apply ( CPU_rd_apply ),
- .CPU_rd_grant ( CPU_rd_grant ),
- .CPU_rd_dout ( CPU_rd_dout )
- );
-
- Phy_int U_Phy_int(
- .rst_mac_rx ( rst_mac_rx ),
- .rst_mac_tx ( rst_mac_tx ),
- .MAC_rx_clk ( MAC_rx_clk ),
- .MAC_tx_clk ( MAC_tx_clk ),
- // Rx interface
- .MCrs_dv ( MCrs_dv ),
- .MRxD ( MRxD ),
- .MRxErr ( MRxErr ),
- // Tx interface
- .MTxD ( MTxD ),
- .MTxEn ( MTxEn ),
- .MCRS ( MCRS ),
- // PHY interface
- .Tx_er ( Tx_er ),
- .Tx_en ( Tx_en ),
- .Txd ( Txd ),
- .Rx_er ( Rx_er ),
- .Rx_dv ( Rx_dv ),
- .Rxd ( Rxd ),
- .Crs ( Crs ),
- .Col ( Col ),
- // Host interface
- .Line_loop_en( Line_loop_en ),
- .Speed ( Speed ) );
-
- Clk_ctrl U_Clk_ctrl(
- .Reset ( rst_mac ),
- .Clk_125M ( Clk_125M ),
-
- // Host interface
- .Speed ( Speed ),
-
- // Phy interface
- .Gtx_clk ( Gtx_clk ),
- .Rx_clk ( Rx_clk ),
- .Tx_clk ( Tx_clk ),
-
- // Interface clocks
- .MAC_tx_clk ( MAC_tx_clk ),
- .MAC_rx_clk ( MAC_rx_clk ),
- .MAC_tx_clk_div( MAC_tx_clk_div ),
- .MAC_rx_clk_div( MAC_rx_clk_div )
- );
-
- eth_miim U_eth_miim(
- .Clk ( CLK_I ),
- .Reset ( RST_I ),
- .Divider ( Divider ),
- .NoPre ( NoPre ),
- .CtrlData ( CtrlData ),
- .Rgad ( Rgad ),
- .Fiad ( Fiad ),
- .WCtrlData ( WCtrlData ),
- .RStat ( RStat ),
- .ScanStat ( ScanStat ),
- .Mdio ( Mdio ),
- .Mdc ( Mdc ),
- .Busy ( Busy ),
- .Prsd ( Prsd ),
- .LinkFail ( LinkFail ),
- .Nvalid ( Nvalid ),
- .WCtrlDataStart ( WCtrlDataStart ),
- .RStatStart ( RStatStart ),
- .UpdateMIIRX_DATAReg( UpdateMIIRX_DATAReg )
- );
-
- Reg_int U_Reg_int(
- // Wishbone compliant core host interface
- .CLK_I( CLK_I ),
- .RST_I( RST_I ),
- .STB_I( STB_I ),
- .CYC_I( CYC_I ),
- .ADR_I( ADR_I ),
- .WE_I ( WE_I ),
- .DAT_I( DAT_I ),
- .DAT_O( DAT_O ),
- .ACK_O( ACK_O ),
-
- // Tx host interface
- .Tx_Hwmark ( Tx_Hwmark ),
- .Tx_Lwmark ( Tx_Lwmark ),
- .MAC_tx_add_en ( MAC_tx_add_en ),
- .FullDuplex ( FullDuplex ),
- .MaxRetry ( MaxRetry ),
- .IFGset ( IFGset ),
- .MAC_tx_add_prom_data ( MAC_tx_add_prom_data ),
- .MAC_tx_add_prom_add ( MAC_tx_add_prom_add ),
- .MAC_tx_add_prom_wr ( MAC_tx_add_prom_wr ),
-
- // Rx host interface
- .MAC_rx_add_chk_en ( MAC_rx_add_chk_en ),
- .MAC_rx_add_prom_data ( MAC_rx_add_prom_data ),
- .MAC_rx_add_prom_add ( MAC_rx_add_prom_add ),
- .MAC_rx_add_prom_wr ( MAC_rx_add_prom_wr ),
- .broadcast_filter_en ( broadcast_filter_en ),
- .broadcast_bucket_depth ( broadcast_bucket_depth ),
- .broadcast_bucket_interval( broadcast_bucket_interval ),
- .RX_APPEND_CRC ( RX_APPEND_CRC ),
- .Rx_Hwmark ( Rx_Hwmark ),
- .Rx_Lwmark ( Rx_Lwmark ),
- .CRC_chk_en ( CRC_chk_en ),
- .RX_IFG_SET ( RX_IFG_SET ),
- .RX_MAX_LENGTH ( RX_MAX_LENGTH ),
- .RX_MIN_LENGTH ( RX_MIN_LENGTH ),
-
- // Flow Control settings
- .pause_frame_send_en ( pause_frame_send_en ),
- .pause_quanta_set ( pause_quanta_set ),
- .tx_pause_en ( tx_pause_en ),
- .fc_hwmark ( fc_hwmark ),
- .fc_lwmark ( fc_lwmark ),
- .fc_padtime ( fc_padtime ),
-
- // RMON host interface
- .CPU_rd_addr ( CPU_rd_addr ),
- .CPU_rd_apply ( CPU_rd_apply ),
- .CPU_rd_grant ( CPU_rd_grant ),
- .CPU_rd_dout ( CPU_rd_dout ),
-
- // PHY int host interface
- .Line_loop_en ( Line_loop_en ),
- .Speed ( Speed ),
-
- // MII to CPU
- .Divider ( Divider ),
- .CtrlData ( CtrlData ),
- .Rgad ( Rgad ),
- .Fiad ( Fiad ),
- .NoPre ( NoPre ),
- .WCtrlData ( WCtrlData ),
- .RStat ( RStat ),
- .ScanStat ( ScanStat ),
- .Busy ( Busy ),
- .LinkFail ( LinkFail ),
- .Nvalid ( Nvalid ),
- .Prsd ( Prsd ),
- .WCtrlDataStart ( WCtrlDataStart ),
- .RStatStart ( RStatStart ),
- .UpdateMIIRX_DATAReg ( UpdateMIIRX_DATAReg )
- );
-
- assign debug0 = {xon_gen, xoff_gen, xon_gen_complete, xoff_gen_complete, debug_rx[3:0]};
- //assign debug0 = {{debug_rx[3:0], xon_gen, xon_gen_complete, xoff_gen, xoff_gen_complete},
- // {1'b0,Rx_mac_err,Rx_mac_empty,Rx_mac_rd,Rx_mac_sop,Rx_mac_eop,Rx_mac_BE[1:0]},
- // {rx_fifo_space}};
- //assign debug0 = debug_tx0;
- //assign debug1 = debug_tx1;
-endmodule
diff --git a/eth/rtl/verilog/MAC_tx.v b/eth/rtl/verilog/MAC_tx.v deleted file mode 100644 index bbf331022..000000000 --- a/eth/rtl/verilog/MAC_tx.v +++ /dev/null @@ -1,250 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// MAC_tx.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: MAC_tx.v,v $
-// Revision 1.4 2006/11/17 17:53:07 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:53 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:14 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-module MAC_tx
- #(parameter TX_FF_DEPTH = 9)
- (
-input Reset ,
-input Clk ,
-input Clk_user ,
- //PHY interface
-output [7:0] TxD ,
-output TxEn ,
-input CRS ,
- //RMON
-output [2:0] Tx_pkt_type_rmon ,
-output [15:0] Tx_pkt_length_rmon ,
-output Tx_apply_rmon ,
-output [2:0] Tx_pkt_err_type_rmon,
- //user interface
-output Tx_mac_wa ,
-input Tx_mac_wr ,
-input [31:0] Tx_mac_data ,
-input [1:0] Tx_mac_BE ,//big endian
-input Tx_mac_sop ,
-input Tx_mac_eop ,
- //host interface
-input [4:0] Tx_Hwmark ,
-input [4:0] Tx_Lwmark ,
-input MAC_tx_add_en ,
-input FullDuplex ,
-input [3:0] MaxRetry ,
-input [5:0] IFGset ,
-input [7:0] MAC_add_prom_data ,
-input [2:0] MAC_add_prom_add ,
-input MAC_add_prom_wr ,
- // Flow control stuff
-input pause_apply ,
-output pause_quanta_sub,
-input [15:0] pause_quanta_set ,
-input xoff_gen,
-input xon_gen,
-output xoff_gen_complete,
-output xon_gen_complete,
- output [31:0] debug0,
- output [31:0] debug1
-);
-
- // ******************************************************************************
- // internal signals
- // ******************************************************************************
- //CRC_gen Interface
-wire CRC_init ;
-wire[7:0] Frame_data ;
-wire Data_en ;
-wire CRC_rd ;
-wire CRC_end ;
-wire[7:0] CRC_out ;
- //Random_gen interface
-wire Random_init ;
-wire[3:0] RetryCnt ;
-wire Random_time_meet ;//levle hight indicate random time passed away
- //flow control
- //MAC_rx_FF
-wire[7:0] Fifo_data ;
-wire Fifo_rd ;
-wire Fifo_eop ;
-wire Fifo_da ;
-wire Fifo_rd_finish ;
-wire Fifo_rd_retry ;
-wire Fifo_ra ;
-wire Fifo_data_err_empty ;
-wire Fifo_data_err_full ;
- //MAC_tx_addr_add
-wire MAC_tx_addr_init ;
-wire MAC_tx_addr_rd ;
-wire[7:0] MAC_tx_addr_data ;
-
-
- reg xon_gen_d1, xoff_gen_d1;
- always @(posedge Clk) xon_gen_d1 <= xon_gen;
- always @(posedge Clk) xoff_gen_d1 <= xoff_gen;
-
-//******************************************************************************
-//instantiation
-//******************************************************************************
-MAC_tx_ctrl U_MAC_tx_ctrl(
-.Reset (Reset ),
-.Clk (Clk ),
- //CRC_gen Interface (//CRC_gen Interface ),
-.CRC_init (CRC_init ),
-.Frame_data (Frame_data ),
-.Data_en (Data_en ),
-.CRC_rd (CRC_rd ),
-.CRC_end (CRC_end ),
-.CRC_out (CRC_out ),
- //Random_gen interfac (//Random_gen interfac ),
-.Random_init (Random_init ),
-.RetryCnt (RetryCnt ),
-.Random_time_meet (Random_time_meet ),
- //flow control (//flow control ),
-.pause_apply (pause_apply ),
-.pause_quanta_sub (pause_quanta_sub ),
-.xoff_gen (xoff_gen_d1 ),
-.xoff_gen_complete (xoff_gen_complete ),
-.xon_gen (xon_gen_d1 ),
-.xon_gen_complete (xon_gen_complete ),
- //MAC_tx_FF (//MAC_tx_FF ),
-.Fifo_data (Fifo_data ),
-.Fifo_rd (Fifo_rd ),
-.Fifo_eop (Fifo_eop ),
-.Fifo_da (Fifo_da ),
-.Fifo_rd_finish (Fifo_rd_finish ),
-.Fifo_rd_retry (Fifo_rd_retry ),
-.Fifo_ra (Fifo_ra ),
-.Fifo_data_err_empty (Fifo_data_err_empty ),
-.Fifo_data_err_full (Fifo_data_err_full ),
- //RMII (//RMII ),
-.TxD (TxD ),
-.TxEn (TxEn ),
-.CRS (CRS ),
- //MAC_tx_addr_add (//MAC_tx_addr_add ),
-.MAC_tx_addr_rd (MAC_tx_addr_rd ),
-.MAC_tx_addr_data (MAC_tx_addr_data ),
-.MAC_tx_addr_init (MAC_tx_addr_init ),
- //RMON (//RMON ),
-.Tx_pkt_type_rmon (Tx_pkt_type_rmon ),
-.Tx_pkt_length_rmon (Tx_pkt_length_rmon ),
-.Tx_apply_rmon (Tx_apply_rmon ),
-.Tx_pkt_err_type_rmon (Tx_pkt_err_type_rmon ),
- //CPU (//CPU ),
-.pause_quanta_set (pause_quanta_set ),
-.MAC_tx_add_en (MAC_tx_add_en ),
-.FullDuplex (FullDuplex ),
-.MaxRetry (MaxRetry ),
-.IFGset (IFGset )
-);
-
-CRC_gen U_CRC_gen(
-.Reset (Reset ),
-.Clk (Clk ),
-.Init (CRC_init ),
-.Frame_data (Frame_data ),
-.Data_en (Data_en ),
-.CRC_rd (CRC_rd ),
-.CRC_out (CRC_out ),
-.CRC_end (CRC_end )
-);
-
- MAC_tx_addr_add U_MAC_tx_addr_add
- (.Reset (Reset ),
- .Clk (Clk ),
- .MAC_tx_addr_rd (MAC_tx_addr_rd ),
- .MAC_tx_addr_init (MAC_tx_addr_init ),
- .MAC_tx_addr_data (MAC_tx_addr_data ),
- //CPU
- .MAC_add_prom_data (MAC_add_prom_data ),
- .MAC_add_prom_add (MAC_add_prom_add ),
- .MAC_add_prom_wr (MAC_add_prom_wr )
- );
-
-MAC_tx_FF #(.TX_FF_DEPTH(TX_FF_DEPTH)) U_MAC_tx_FF(
-.Reset (Reset ),
-.Clk_MAC (Clk ),
-.Clk_SYS (Clk_user ),
- //MAC_rx_ctrl interf (//MAC_rx_ctrl interf ),
-.Fifo_data (Fifo_data ),
-.Fifo_rd (Fifo_rd ),
-.Fifo_rd_finish (Fifo_rd_finish ),
-.Fifo_rd_retry (Fifo_rd_retry ),
-.Fifo_eop (Fifo_eop ),
-.Fifo_da (Fifo_da ),
-.Fifo_ra (Fifo_ra ),
-.Fifo_data_err_empty (Fifo_data_err_empty ),
-.Fifo_data_err_full (Fifo_data_err_full ),
- //user interface (//user interface ),
-.Tx_mac_wa (Tx_mac_wa ),
-.Tx_mac_wr (Tx_mac_wr ),
-.Tx_mac_data (Tx_mac_data ),
-.Tx_mac_BE (Tx_mac_BE ),
-.Tx_mac_sop (Tx_mac_sop ),
-.Tx_mac_eop (Tx_mac_eop ),
- //host interface (//host interface ),
-.FullDuplex (FullDuplex ),
-.Tx_Hwmark (Tx_Hwmark ),
-.Tx_Lwmark (Tx_Lwmark ),
-.debug0(debug0),
-.debug1(debug1)
-);
-
-Random_gen U_Random_gen(
-.Reset (Reset ),
-.Clk (Clk ),
-.Init (Random_init ),
-.RetryCnt (RetryCnt ),
-.Random_time_meet (Random_time_meet )
-);
-
-endmodule
diff --git a/eth/rtl/verilog/MAC_tx/CRC_gen.v b/eth/rtl/verilog/MAC_tx/CRC_gen.v deleted file mode 100644 index 4a16e7c36..000000000 --- a/eth/rtl/verilog/MAC_tx/CRC_gen.v +++ /dev/null @@ -1,169 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// CRC_gen.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: CRC_gen.v,v $
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:17 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module CRC_gen (
-Reset ,
-Clk ,
-Init ,
-Frame_data ,
-Data_en ,
-CRC_rd ,
-CRC_end ,
-CRC_out
-
-);
-input Reset ;
-input Clk ;
-input Init ;
-input [7:0] Frame_data ;
-input Data_en ;
-input CRC_rd ;
-output [7:0] CRC_out ;
-output CRC_end ;
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-reg [7:0] CRC_out ;
-reg [31:0] CRC_reg;
-reg CRC_end;
-reg [3:0] Counter;
-//******************************************************************************
-//******************************************************************************
-//input data width is 8bit, and the first bit is bit[0]
-function[31:0] NextCRC;
- input[7:0] D;
- input[31:0] C;
- reg[31:0] NewCRC;
- begin
- NewCRC[0]=C[24]^C[30]^D[1]^D[7];
- NewCRC[1]=C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[2]=C[26]^D[5]^C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[3]=C[27]^D[4]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[4]=C[28]^D[3]^C[27]^D[4]^C[26]^D[5]^C[24]^C[30]^D[1]^D[7];
- NewCRC[5]=C[29]^D[2]^C[28]^D[3]^C[27]^D[4]^C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[6]=C[30]^D[1]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[7]=C[31]^D[0]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[24]^D[7];
- NewCRC[8]=C[0]^C[28]^D[3]^C[27]^D[4]^C[25]^D[6]^C[24]^D[7];
- NewCRC[9]=C[1]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^D[6];
- NewCRC[10]=C[2]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[24]^D[7];
- NewCRC[11]=C[3]^C[28]^D[3]^C[27]^D[4]^C[25]^D[6]^C[24]^D[7];
- NewCRC[12]=C[4]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[13]=C[5]^C[30]^D[1]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[14]=C[6]^C[31]^D[0]^C[30]^D[1]^C[28]^D[3]^C[27]^D[4]^C[26]^D[5];
- NewCRC[15]=C[7]^C[31]^D[0]^C[29]^D[2]^C[28]^D[3]^C[27]^D[4];
- NewCRC[16]=C[8]^C[29]^D[2]^C[28]^D[3]^C[24]^D[7];
- NewCRC[17]=C[9]^C[30]^D[1]^C[29]^D[2]^C[25]^D[6];
- NewCRC[18]=C[10]^C[31]^D[0]^C[30]^D[1]^C[26]^D[5];
- NewCRC[19]=C[11]^C[31]^D[0]^C[27]^D[4];
- NewCRC[20]=C[12]^C[28]^D[3];
- NewCRC[21]=C[13]^C[29]^D[2];
- NewCRC[22]=C[14]^C[24]^D[7];
- NewCRC[23]=C[15]^C[25]^D[6]^C[24]^C[30]^D[1]^D[7];
- NewCRC[24]=C[16]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
- NewCRC[25]=C[17]^C[27]^D[4]^C[26]^D[5];
- NewCRC[26]=C[18]^C[28]^D[3]^C[27]^D[4]^C[24]^C[30]^D[1]^D[7];
- NewCRC[27]=C[19]^C[29]^D[2]^C[28]^D[3]^C[25]^C[31]^D[0]^D[6];
- NewCRC[28]=C[20]^C[30]^D[1]^C[29]^D[2]^C[26]^D[5];
- NewCRC[29]=C[21]^C[31]^D[0]^C[30]^D[1]^C[27]^D[4];
- NewCRC[30]=C[22]^C[31]^D[0]^C[28]^D[3];
- NewCRC[31]=C[23]^C[29]^D[2];
- NextCRC=NewCRC;
- end
- endfunction
-//******************************************************************************
-
-always @ (posedge Clk) // or posedge Reset)
-// if (Reset)
-// CRC_reg <=32'hffffffff;
-// else
- if (Init)
- CRC_reg <=32'hffffffff;
- else if (Data_en)
- CRC_reg <=NextCRC(Frame_data,CRC_reg);
- else if (CRC_rd)
- CRC_reg <={CRC_reg[23:0],8'hff};
-
-always @ (CRC_rd or CRC_reg)
-// if (CRC_rd)
- CRC_out <=~{
- CRC_reg[24],
- CRC_reg[25],
- CRC_reg[26],
- CRC_reg[27],
- CRC_reg[28],
- CRC_reg[29],
- CRC_reg[30],
- CRC_reg[31]
- };
-// else
-// CRC_out <=0;
-
-//caculate CRC out length ,4 cycles
-//CRC_end aligned to last CRC checksum data
-always @(posedge Clk or posedge Reset)
- if (Reset)
- Counter <=0;
- else if (!CRC_rd)
- Counter <=0;
- else
- Counter <=Counter + 1;
-
-always @ (Counter)
- if (Counter==3)
- CRC_end=1;
- else
- CRC_end=0;
-
-endmodule
-
-
diff --git a/eth/rtl/verilog/MAC_tx/MAC_tx_FF.v b/eth/rtl/verilog/MAC_tx/MAC_tx_FF.v deleted file mode 100644 index e62346fb7..000000000 --- a/eth/rtl/verilog/MAC_tx/MAC_tx_FF.v +++ /dev/null @@ -1,722 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// MAC_tx_FF.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-
-module MAC_tx_FF
- #(parameter TX_FF_DEPTH = 9)
- (input Reset ,
- input Clk_MAC ,
- input Clk_SYS ,
- //MAC_tx_ctrl
- output reg [7:0]Fifo_data ,
- input Fifo_rd ,
- input Fifo_rd_finish ,
- input Fifo_rd_retry ,
- output reg Fifo_eop ,
- output reg Fifo_da ,
- output reg Fifo_ra ,
- output reg Fifo_data_err_empty ,
- output Fifo_data_err_full ,
- //user interface
- output reg Tx_mac_wa ,
- input Tx_mac_wr ,
- input [31:0] Tx_mac_data ,
- input [1:0] Tx_mac_BE ,//big endian
- input Tx_mac_sop ,
- input Tx_mac_eop ,
- //host interface
- input FullDuplex ,
- input [4:0] Tx_Hwmark ,
- input [4:0] Tx_Lwmark ,
- output [31:0] debug0,
- output [31:0] debug1
- );
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-localparam MAC_byte3 =4'd00;
-localparam MAC_byte2 =4'd01;
-localparam MAC_byte1 =4'd02;
-localparam MAC_byte0 =4'd03;
-localparam MAC_wait_finish =4'd04;
-localparam MAC_retry =4'd08;
-localparam MAC_idle =4'd09;
-localparam MAC_FFEmpty =4'd10;
-localparam MAC_FFEmpty_drop =4'd11;
-localparam MAC_pkt_sub =4'd12;
-localparam MAC_FF_Err =4'd13;
-
-
-reg [3:0] Next_state_MAC ;
-
-
-localparam SYS_idle =4'd0;
-localparam SYS_WaitSop =4'd1;
-localparam SYS_SOP =4'd2;
-localparam SYS_MOP =4'd3;
-localparam SYS_DROP =4'd4;
-localparam SYS_EOP_ok =4'd5;
-localparam SYS_FFEmpty =4'd6;
-localparam SYS_EOP_err =4'd7;
-localparam SYS_SOP_err =4'd8;
-
-reg [3:0] Next_state_SYS;
-
-reg [TX_FF_DEPTH-1:0] Add_wr ;
-reg [TX_FF_DEPTH-1:0] Add_wr_ungray ;
-reg [TX_FF_DEPTH-1:0] Add_wr_gray ;
-reg [TX_FF_DEPTH-1:0] Add_wr_gray_dl1 ;
-reg [TX_FF_DEPTH-1:0] Add_wr_gray_dl2 ;
-
-reg [TX_FF_DEPTH-1:0] Add_rd ;
-reg [TX_FF_DEPTH-1:0] Add_rd_reg ;
-reg [TX_FF_DEPTH-1:0] Add_rd_gray ;
-reg [TX_FF_DEPTH-1:0] Add_rd_gray_dl1 ;
-reg [TX_FF_DEPTH-1:0] Add_rd_gray_dl2 ;
-reg [TX_FF_DEPTH-1:0] Add_rd_ungray ;
-wire[35:0] Din ;
-wire[35:0] Dout ;
-reg Wr_en ;
-wire[TX_FF_DEPTH-1:0] Add_wr_pluse;
-wire[TX_FF_DEPTH-1:0] Add_wr_pluse_pluse;
-reg [TX_FF_DEPTH-1:TX_FF_DEPTH-5] Add_rd_reg_dl1;
-
-reg [3:0] Current_state_MAC;
-reg [3:0] Current_state_MAC_reg;
-reg [3:0] Current_state_SYS;
-reg Full;
-reg AlmostFull;
-reg Empty;
-reg [35:0] Dout_reg;
-reg Packet_number_sub_edge;
-reg Packet_number_add;
-reg [5:0] Packet_number_inFF;
-reg [5:0] Packet_number_inFF_reg;
-reg Dout_reg_en;
-reg Add_rd_add;
-
-
-reg Tx_mac_wr_dl1 ;
-reg [31:0] Tx_mac_data_dl1 ;
-reg [1:0] Tx_mac_BE_dl1 ;
-reg FF_FullErr ;
-wire[1:0] Dout_BE ;
-wire Dout_eop ;
-wire Dout_err ;
-wire[31:0] Dout_data ;
-reg Packet_number_sub_dl1 ;
-reg Packet_number_sub_dl2 ;
-reg [4:0] Fifo_data_count ;
-reg Fifo_ra_tmp ;
-reg Pkt_sub_apply_tmp ;
-reg Pkt_sub_apply ;
-reg Add_rd_reg_rdy_tmp ;
-reg Add_rd_reg_rdy ;
-reg Add_rd_reg_rdy_dl1 ;
-reg Add_rd_reg_rdy_dl2 ;
-reg [4:0] Tx_Hwmark_pl ;
-reg [4:0] Tx_Lwmark_pl ;
-reg Add_rd_jump_tmp ;
-reg Add_rd_jump_tmp_pl1 ;
-reg Add_rd_jump ;
-reg Add_rd_jump_wr_pl1 ;
-
-//******************************************************************************
-//write data to from FF .
-//domain Clk_SYS
-//******************************************************************************
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Current_state_SYS <=SYS_idle;
- else
- Current_state_SYS <=Next_state_SYS;
-
-always @ (Current_state_SYS or Tx_mac_wr or Tx_mac_sop or Full or AlmostFull
- or Tx_mac_eop )
- case (Current_state_SYS)
- SYS_idle:
- if (Tx_mac_wr&&Tx_mac_sop&&!Full)
- Next_state_SYS =SYS_SOP;
- else
- Next_state_SYS =Current_state_SYS ;
- SYS_SOP:
- Next_state_SYS =SYS_MOP;
- SYS_MOP:
- if (AlmostFull)
- Next_state_SYS =SYS_DROP;
- else if (Tx_mac_wr&&Tx_mac_sop)
- Next_state_SYS =SYS_SOP_err;
- else if (Tx_mac_wr&&Tx_mac_eop)
- Next_state_SYS =SYS_EOP_ok;
- else
- Next_state_SYS =Current_state_SYS ;
- SYS_EOP_ok:
- if (Tx_mac_wr&&Tx_mac_sop)
- Next_state_SYS =SYS_SOP;
- else
- Next_state_SYS =SYS_idle;
- SYS_EOP_err:
- if (Tx_mac_wr&&Tx_mac_sop)
- Next_state_SYS =SYS_SOP;
- else
- Next_state_SYS =SYS_idle;
- SYS_SOP_err:
- Next_state_SYS =SYS_DROP;
- SYS_DROP: //FIFO overflow
- if (Tx_mac_wr&&Tx_mac_eop)
- Next_state_SYS =SYS_EOP_err;
- else
- Next_state_SYS =Current_state_SYS ;
- default:
- Next_state_SYS =SYS_idle;
- endcase
-
-//delay signals
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- begin
- Tx_mac_wr_dl1 <=0;
- Tx_mac_data_dl1 <=0;
- Tx_mac_BE_dl1 <=0;
- end
- else
- begin
- Tx_mac_wr_dl1 <=Tx_mac_wr ;
- Tx_mac_data_dl1 <=Tx_mac_data ;
- Tx_mac_BE_dl1 <=Tx_mac_BE ;
- end
-
-always @(Current_state_SYS)
- if (Current_state_SYS==SYS_EOP_err)
- FF_FullErr =1;
- else
- FF_FullErr =0;
-
-reg Tx_mac_eop_gen;
-
-always @(Current_state_SYS)
- if (Current_state_SYS==SYS_EOP_err||Current_state_SYS==SYS_EOP_ok)
- Tx_mac_eop_gen =1;
- else
- Tx_mac_eop_gen =0;
-
-assign Din={Tx_mac_eop_gen,FF_FullErr,Tx_mac_BE_dl1,Tx_mac_data_dl1};
-
-always @(Current_state_SYS or Tx_mac_wr_dl1)
- if ((Current_state_SYS==SYS_SOP||Current_state_SYS==SYS_EOP_ok||
- Current_state_SYS==SYS_MOP||Current_state_SYS==SYS_EOP_err)&&Tx_mac_wr_dl1)
- Wr_en = 1;
- else
- Wr_en = 0;
-
-
-//
-
-
-always @ (posedge Reset or posedge Clk_SYS)
- if (Reset)
- Add_wr_gray <=0;
- else
- begin : Add_wr_gray_loop
- integer i;
- Add_wr_gray[TX_FF_DEPTH-1] <=Add_wr[TX_FF_DEPTH-1];
- for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
- Add_wr_gray[i] <=Add_wr[i+1]^Add_wr[i];
- end
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Add_rd_gray_dl1 <=0;
- else
- Add_rd_gray_dl1 <=Add_rd_gray;
-
- always @(posedge Clk_SYS or posedge Reset)
- if (Reset)
- Add_rd_gray_dl2 <= 0;
- else
- Add_rd_gray_dl2 <= Add_rd_gray_dl1;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Add_rd_jump_wr_pl1 <=0;
- else
- Add_rd_jump_wr_pl1 <=Add_rd_jump;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Add_rd_ungray =0;
- else if (!Add_rd_jump_wr_pl1)
- begin : Add_rd_ungray_loop
- integer i;
- Add_rd_ungray[TX_FF_DEPTH-1] = Add_rd_gray_dl2[TX_FF_DEPTH-1];
- for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
- Add_rd_ungray[i] = Add_rd_ungray[i+1]^Add_rd_gray_dl2[i];
- end
-
-assign Add_wr_pluse =Add_wr+1;
-assign Add_wr_pluse_pluse =Add_wr+4;
-
-always @ (Add_wr_pluse or Add_rd_ungray)
- if (Add_wr_pluse==Add_rd_ungray)
- Full =1;
- else
- Full =0;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- AlmostFull <=0;
- else if (Add_wr_pluse_pluse==Add_rd_ungray)
- AlmostFull <=1;
- else
- AlmostFull <=0;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Add_wr <= 0;
- else if (Wr_en&&!Full)
- Add_wr <= Add_wr +1;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- begin
- Packet_number_sub_dl1 <=0;
- Packet_number_sub_dl2 <=0;
- end
- else
- begin
- Packet_number_sub_dl1 <=Pkt_sub_apply;
- Packet_number_sub_dl2 <=Packet_number_sub_dl1;
- end
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Packet_number_sub_edge <=0;
- else if (Packet_number_sub_dl1&!Packet_number_sub_dl2)
- Packet_number_sub_edge <=1;
- else
- Packet_number_sub_edge <=0;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Packet_number_add <=0;
- else if (Current_state_SYS==SYS_EOP_ok||Current_state_SYS==SYS_EOP_err)
- Packet_number_add <=1;
- else
- Packet_number_add <=0;
-
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Packet_number_inFF <=0;
- else if (Packet_number_add&&!Packet_number_sub_edge)
- Packet_number_inFF <=Packet_number_inFF + 1'b1;
- else if (!Packet_number_add&&Packet_number_sub_edge)
- Packet_number_inFF <=Packet_number_inFF - 1'b1;
-
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Packet_number_inFF_reg <=0;
- else
- Packet_number_inFF_reg <=Packet_number_inFF;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- begin
- Add_rd_reg_rdy_dl1 <=0;
- Add_rd_reg_rdy_dl2 <=0;
- end
- else
- begin
- Add_rd_reg_rdy_dl1 <=Add_rd_reg_rdy;
- Add_rd_reg_rdy_dl2 <=Add_rd_reg_rdy_dl1;
- end
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Add_rd_reg_dl1 <=0;
- else if (Add_rd_reg_rdy_dl1&!Add_rd_reg_rdy_dl2)
- Add_rd_reg_dl1 <=Add_rd_reg[TX_FF_DEPTH-1:TX_FF_DEPTH-5];
-
-
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Fifo_data_count <=0;
- else if (FullDuplex)
- Fifo_data_count <=Add_wr[TX_FF_DEPTH-1:TX_FF_DEPTH-5]-Add_rd_ungray[TX_FF_DEPTH-1:TX_FF_DEPTH-5];
- else
- Fifo_data_count <=Add_wr[TX_FF_DEPTH-1:TX_FF_DEPTH-5]-Add_rd_reg_dl1[TX_FF_DEPTH-1:TX_FF_DEPTH-5]; //for half duplex backoff requirement
-
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Fifo_ra_tmp <=0;
- else if (Packet_number_inFF_reg>=1||Fifo_data_count>=Tx_Lwmark)
- Fifo_ra_tmp <=1;
- else
- Fifo_ra_tmp <=0;
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- begin
- Tx_Hwmark_pl <=0;
- Tx_Lwmark_pl <=0;
- end
- else
- begin
- Tx_Hwmark_pl <=Tx_Hwmark;
- Tx_Lwmark_pl <=Tx_Lwmark;
- end
-
-always @ (posedge Clk_SYS or posedge Reset)
- if (Reset)
- Tx_mac_wa <=0;
- else if (Fifo_data_count>=Tx_Hwmark_pl)
- Tx_mac_wa <=0;
- else if (Fifo_data_count<Tx_Lwmark_pl)
- Tx_mac_wa <=1;
-
-//******************************************************************************
-//rd data to from FF .
-//domain Clk_MAC
-//******************************************************************************
-reg[35:0] Dout_dl1;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Dout_dl1 <=0;
- else
- Dout_dl1 <=Dout;
-
-always @ (Current_state_MAC or Next_state_MAC)
- if ((Current_state_MAC==MAC_idle||Current_state_MAC==MAC_byte0)&&Next_state_MAC==MAC_byte3)
- Dout_reg_en =1;
- else
- Dout_reg_en =0;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Dout_reg <=0;
- else if (Dout_reg_en)
- Dout_reg <=Dout_dl1;
-
-assign {Dout_eop,Dout_err,Dout_BE,Dout_data}=Dout_reg;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Current_state_MAC <=MAC_idle;
- else
- Current_state_MAC <=Next_state_MAC;
-
-always @ (Current_state_MAC or Fifo_rd or Dout_BE or Dout_eop or Fifo_rd_retry
- or Fifo_rd_finish or Empty or Fifo_rd or Fifo_eop)
- case (Current_state_MAC)
- MAC_idle:
- if (Empty&&Fifo_rd)
- Next_state_MAC=MAC_FF_Err;
- else if (Fifo_rd)
- Next_state_MAC=MAC_byte3;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_byte3:
- if (Fifo_rd_retry)
- Next_state_MAC=MAC_retry;
- else if (Fifo_eop)
- Next_state_MAC=MAC_wait_finish;
- else if (Fifo_rd&&!Fifo_eop)
- Next_state_MAC=MAC_byte2;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_byte2:
- if (Fifo_rd_retry)
- Next_state_MAC=MAC_retry;
- else if (Fifo_eop)
- Next_state_MAC=MAC_wait_finish;
- else if (Fifo_rd&&!Fifo_eop)
- Next_state_MAC=MAC_byte1;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_byte1:
- if (Fifo_rd_retry)
- Next_state_MAC=MAC_retry;
- else if (Fifo_eop)
- Next_state_MAC=MAC_wait_finish;
- else if (Fifo_rd&&!Fifo_eop)
- Next_state_MAC=MAC_byte0;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_byte0:
- if (Empty&&Fifo_rd&&!Fifo_eop)
- Next_state_MAC=MAC_FFEmpty;
- else if (Fifo_rd_retry)
- Next_state_MAC=MAC_retry;
- else if (Fifo_eop)
- Next_state_MAC=MAC_wait_finish;
- else if (Fifo_rd&&!Fifo_eop)
- Next_state_MAC=MAC_byte3;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_retry:
- Next_state_MAC=MAC_idle;
- MAC_wait_finish:
- if (Fifo_rd_finish)
- Next_state_MAC=MAC_pkt_sub;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_pkt_sub:
- Next_state_MAC=MAC_idle;
- MAC_FFEmpty:
- if (!Empty)
- Next_state_MAC=MAC_byte3;
- else
- Next_state_MAC=Current_state_MAC;
- MAC_FF_Err: //stopped state-machine need change
- Next_state_MAC=Current_state_MAC;
- default
- Next_state_MAC=MAC_idle;
- endcase
-//
-always @ (posedge Reset or posedge Clk_MAC)
- if (Reset)
- Add_rd_gray <=0;
- else
- begin : Add_rd_gray_loop
- integer i;
- Add_rd_gray[TX_FF_DEPTH-1] <=Add_rd[TX_FF_DEPTH-1];
- for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
- Add_rd_gray[i] <= Add_rd[i+1]^Add_rd[i];
- end
-//
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_wr_gray_dl1 <=0;
- else
- Add_wr_gray_dl1 <=Add_wr_gray;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_wr_gray_dl2 <=0;
- else
- Add_wr_gray_dl2 <=Add_wr_gray_dl1;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_wr_ungray =0;
- else
- begin : Add_wr_ungray_loop
- integer i;
- Add_wr_ungray[TX_FF_DEPTH-1] = Add_wr_gray_dl2[TX_FF_DEPTH-1];
- for (i=TX_FF_DEPTH-2;i>=0;i=i-1)
- Add_wr_ungray[i] = Add_wr_ungray[i+1]^Add_wr_gray_dl2[i];
- end
-
-//empty
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Empty <=1;
- else if (Add_rd==Add_wr_ungray)
- Empty <=1;
- else
- Empty <=0;
-
-//ra
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Fifo_ra <=0;
- else
- Fifo_ra <=Fifo_ra_tmp;
-
-
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Pkt_sub_apply_tmp <=0;
- else if (Current_state_MAC==MAC_pkt_sub)
- Pkt_sub_apply_tmp <=1;
- else
- Pkt_sub_apply_tmp <=0;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Pkt_sub_apply <=0;
- else if ((Current_state_MAC==MAC_pkt_sub)||Pkt_sub_apply_tmp)
- Pkt_sub_apply <=1;
- else
- Pkt_sub_apply <=0;
-
-//reg Add_rd for collison retry
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd_reg <=0;
- else if (Fifo_rd_finish)
- Add_rd_reg <=Add_rd;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd_reg_rdy_tmp <=0;
- else if (Fifo_rd_finish)
- Add_rd_reg_rdy_tmp <=1;
- else
- Add_rd_reg_rdy_tmp <=0;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd_reg_rdy <=0;
- else if (Fifo_rd_finish||Add_rd_reg_rdy_tmp)
- Add_rd_reg_rdy <=1;
- else
- Add_rd_reg_rdy <=0;
-
-
-always @ (Current_state_MAC or Next_state_MAC)
- if ((Current_state_MAC==MAC_idle||Current_state_MAC==MAC_byte0)&&Next_state_MAC==MAC_byte3)
- Add_rd_add =1;
- else
- Add_rd_add =0;
-
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd <=0;
- else if (Current_state_MAC==MAC_retry)
- Add_rd <= Add_rd_reg;
- else if (Add_rd_add)
- Add_rd <= Add_rd + 1;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd_jump_tmp <=0;
- else if (Current_state_MAC==MAC_retry)
- Add_rd_jump_tmp <=1;
- else
- Add_rd_jump_tmp <=0;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd_jump_tmp_pl1 <=0;
- else
- Add_rd_jump_tmp_pl1 <=Add_rd_jump_tmp;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Add_rd_jump <=0;
- else if (Current_state_MAC==MAC_retry)
- Add_rd_jump <=1;
- else if (Add_rd_jump_tmp_pl1)
- Add_rd_jump <=0;
-
-//gen Fifo_data
-
-
-always @ (Dout_data or Current_state_MAC)
- case (Current_state_MAC)
- MAC_byte3:
- Fifo_data =Dout_data[31:24];
- MAC_byte2:
- Fifo_data =Dout_data[23:16];
- MAC_byte1:
- Fifo_data =Dout_data[15:8];
- MAC_byte0:
- Fifo_data =Dout_data[7:0];
- default:
- Fifo_data =0;
- endcase
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Fifo_da <=0;
- else if ((Current_state_MAC==MAC_byte0||Current_state_MAC==MAC_byte1||
- Current_state_MAC==MAC_byte2||Current_state_MAC==MAC_byte3)&&Fifo_rd&&!Fifo_eop)
- Fifo_da <=1;
- else
- Fifo_da <=0;
-
-//gen Fifo_data_err_empty
-assign Fifo_data_err_full=Dout_err;
-//gen Fifo_data_err_empty
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Current_state_MAC_reg <=0;
- else
- Current_state_MAC_reg <=Current_state_MAC;
-
-always @ (posedge Clk_MAC or posedge Reset)
- if (Reset)
- Fifo_data_err_empty <=0;
- else if (Current_state_MAC_reg==MAC_FFEmpty)
- Fifo_data_err_empty <=1;
- else
- Fifo_data_err_empty <=0;
-
-//always @ (posedge Clk_MAC)
-// if (Current_state_MAC_reg==MAC_FF_Err)
-// begin
-// $finish(2);
-// $display("mac_tx_FF meet error status at time :%t",$time);
-// end
-
-//gen Fifo_eop aligned to last valid data byte
-always @ ( Current_state_MAC or Dout_eop or Dout_BE )
- if ( ( ( Current_state_MAC==MAC_byte0 && Dout_BE==2'b00 ) ||
- ( Current_state_MAC==MAC_byte1 && Dout_BE==2'b11 ) ||
- ( Current_state_MAC==MAC_byte2 && Dout_BE==2'b10 ) ||
- ( Current_state_MAC==MAC_byte3 && Dout_BE==2'b01 ) ) && Dout_eop )
- Fifo_eop = 1;
- else
- Fifo_eop = 0;
-
- // Dual port RAM for FIFO
- ram_2port #(.DWIDTH(36),.AWIDTH(TX_FF_DEPTH)) mac_tx_ff_ram
- (.clka(Clk_SYS),.ena(1'b1),.wea(Wr_en),.addra(Add_wr),.dia(Din),.doa(),
- .clkb(Clk_MAC),.enb(1'b1),.web(1'b0),.addrb(Add_rd),.dib(36'b0),.dob(Dout) );
-
- assign debug0 =
- { { 5'd0, Empty, Full, AlmostFull },
- { Current_state_SYS, Current_state_MAC },
- { Fifo_rd, Fifo_rd_finish, Fifo_rd_retry, Fifo_eop, Fifo_da, Fifo_ra, Fifo_data_err_empty, Fifo_data_err_full },
- { 2'b0, Dout_BE, Tx_mac_wa, Tx_mac_wr, Tx_mac_sop, Tx_mac_eop} };
-
- assign debug1 =
- { { 8'd0 },
- { 8'd0 },
- { 8'd0 },
- { 8'd0 } };
-
-endmodule // MAC_tx_FF
diff --git a/eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v b/eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v deleted file mode 100644 index 76026ce06..000000000 --- a/eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v +++ /dev/null @@ -1,128 +0,0 @@ -// ////////////////////////////////////////////////////////////////////
-// // ////
-// // MAC_tx_addr_add.v ////
-// // ////
-// // This file is part of the Ethernet IP core project ////
-// // http://www.opencores.org/projects.cgi/wr_en/ethernet_tri_mode/////
-// // ////
-// // Author(s): ////
-// // - Jon Gao (gaojon@yahoo.com) ////
-// // ////
-// // ////
-// ////////////////////////////////////////////////////////////////////
-// // ////
-// // Copyright (C) 2001 Authors ////
-// // ////
-// // This source file may be used and distributed without ////
-// // restriction provided that this copyright statement is not ////
-// // removed from the file and that any derivative work contains ////
-// // the original copyright notice and the associated disclaimer. ////
-// // ////
-// // This source file is free software; you can redistribute it ////
-// // and/or modify it under the terms of the GNU Lesser General ////
-// // Public License as published by the Free Software Foundation; ////
-// // either version 2.1 of the License, or (at your option) any ////
-// // later version. ////
-// // ////
-// // This source is distributed in the hope that it will be ////
-// // useful, but WITHOUT ANY WARRANTY; without even the implied ////
-// // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-// // PURPOSE. See the GNU Lesser General Public License for more ////
-// // details. ////
-// // ////
-// // You should have received a copy of the GNU Lesser General ////
-// // Public License along with this source; if not, download it ////
-// // from http://www.opencores.org/lgpl.shtml ////
-// // ////
-// ////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: MAC_tx_addr_add.v,v $
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:18 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module MAC_tx_addr_add
- (Reset ,
- Clk ,
- MAC_tx_addr_init ,
- MAC_tx_addr_rd ,
- MAC_tx_addr_data ,
- //CPU ,
- MAC_add_prom_data ,
- MAC_add_prom_add ,
- MAC_add_prom_wr
- );
-
- input Reset ;
- input Clk ;
- input MAC_tx_addr_rd ;
- input MAC_tx_addr_init ;
- output [7:0] MAC_tx_addr_data ;
- //CPU ;
- input [7:0] MAC_add_prom_data ;
- input [2:0] MAC_add_prom_add ;
- input MAC_add_prom_wr ;
-
- // ******************************************************************************
- // internal signals
- // ******************************************************************************
- reg [2:0] add_rd;
- wire [2:0] add_wr;
- wire [7:0] din;
- //wire [7:0] dout;
- reg [7:0] dout;
- wire wr_en;
- reg MAC_add_prom_wr_dl1;
- reg MAC_add_prom_wr_dl2;
- // ******************************************************************************
- // write data from cpu to prom
- // ******************************************************************************
- always @ (posedge Clk or posedge Reset)
- if (Reset)
- begin
- MAC_add_prom_wr_dl1 <=0;
- MAC_add_prom_wr_dl2 <=0;
- end
- else
- begin
- MAC_add_prom_wr_dl1 <=MAC_add_prom_wr;
- MAC_add_prom_wr_dl2 <=MAC_add_prom_wr_dl1;
- end
-
- assign wr_en =MAC_add_prom_wr_dl1&!MAC_add_prom_wr_dl2;
- assign add_wr =MAC_add_prom_add;
- assign din =MAC_add_prom_data;
-
- // ******************************************************************************
- // read data from cpu to prom
- // ******************************************************************************
- always @ (posedge Clk or posedge Reset)
- if (Reset)
- add_rd <=0;
- else if (MAC_tx_addr_init)
- add_rd <=0;
- else if (MAC_tx_addr_rd)
- add_rd <=add_rd + 1;
- assign MAC_tx_addr_data=dout;
- // ******************************************************************************
- // b port for read ,a port for write .
- // ******************************************************************************
-
- reg [7:0] address_ram [0:7];
- always @(posedge Clk)
- if(wr_en)
- address_ram[add_wr] <= din;
-
- always @(posedge Clk)
- dout <= address_ram[add_rd];
-
-endmodule // MAC_tx_addr_add
diff --git a/eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v b/eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v deleted file mode 100644 index 8da2e253c..000000000 --- a/eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v +++ /dev/null @@ -1,656 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// MAC_tx_ctrl.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: MAC_tx_Ctrl.v,v $
-// Revision 1.4 2006/06/25 04:58:56 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:54 maverickist
-// verification is complete.
-//
-// Revision 1.3 2005/12/16 06:44:17 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.2 2005/12/13 12:15:38 Administrator
-// no message
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-
-module MAC_tx_ctrl (
-Reset ,
-Clk ,
-//CRC_gen Interface
-CRC_init ,
-Frame_data ,
-Data_en ,
-CRC_rd ,
-CRC_end ,
-CRC_out ,
-//Ramdon_gen interfac
-Random_init ,
-RetryCnt ,
-Random_time_meet ,
-//flow control
-pause_apply ,
-pause_quanta_sub ,
-xoff_gen ,
-xoff_gen_complete ,
-xon_gen ,
-xon_gen_complete ,
-//MAC_tx_FF
-Fifo_data ,
-Fifo_rd ,
-Fifo_eop ,
-Fifo_da ,
-Fifo_rd_finish ,
-Fifo_rd_retry ,
-Fifo_ra ,
-Fifo_data_err_empty ,
-Fifo_data_err_full ,
-//RMII
-TxD ,
-TxEn ,
-CRS ,
-//MAC_tx_addr_add
-MAC_tx_addr_rd ,
-MAC_tx_addr_data ,
-MAC_tx_addr_init ,
-//RMON
-Tx_pkt_type_rmon ,
-Tx_pkt_length_rmon ,
-Tx_apply_rmon ,
-Tx_pkt_err_type_rmon,
-//CPU
-pause_quanta_set ,
-MAC_tx_add_en ,
-FullDuplex ,
-MaxRetry ,
-IFGset
-);
-
-input Reset ;
-input Clk ;
- //CRC_gen Interface
-output CRC_init ;
-output [7:0] Frame_data ;
-output Data_en ;
-output CRC_rd ;
-input CRC_end ;
-input [7:0] CRC_out ;
- //Ramdon_gen interface
-output Random_init ;
-output [3:0] RetryCnt ;
-input Random_time_meet ;//levle hight indicate random time passed away
- //flow control
-input pause_apply ;
-output pause_quanta_sub ;
-input xoff_gen ;
-output xoff_gen_complete ;
-input xon_gen ;
-output xon_gen_complete ;
- //MAC_rx_FF
-input [7:0] Fifo_data ;
-output Fifo_rd ;
-input Fifo_eop ;
-input Fifo_da ;
-output Fifo_rd_finish ;
-output Fifo_rd_retry ;
-input Fifo_ra ;
-input Fifo_data_err_empty ;
-input Fifo_data_err_full ;
- //RMII
-output [7:0] TxD ;
-output TxEn ;
-input CRS ;
- //MAC_tx_addr_add
-output MAC_tx_addr_init ;
-output MAC_tx_addr_rd ;
-input [7:0] MAC_tx_addr_data ;
- //RMON
-output [2:0] Tx_pkt_type_rmon ;
-output [15:0] Tx_pkt_length_rmon ;
-output Tx_apply_rmon ;
-output [2:0] Tx_pkt_err_type_rmon;
- //CPU
-input [15:0] pause_quanta_set ;
-input MAC_tx_add_en ;
-input FullDuplex ;
-input [3:0] MaxRetry ;
-input [5:0] IFGset ;
-//******************************************************************************
-//internal signals
-//******************************************************************************
-parameter StateIdle =4'd00;
-parameter StatePreamble =4'd01;
-parameter StateSFD =4'd02;
-parameter StateData =4'd03;
-parameter StatePause =4'd04;
-parameter StatePAD =4'd05;
-parameter StateFCS =4'd06;
-parameter StateIFG =4'd07;
-parameter StateJam =4'd08;
-parameter StateBackOff =4'd09;
-parameter StateJamDrop =4'd10;
-parameter StateFFEmptyDrop =4'd11;
-parameter StateSwitchNext =4'd12;
-parameter StateDefer =4'd13;
-parameter StateSendPauseFrame =4'd14;
-
-reg [3:0] Current_state;
-reg [3:0] Next_state;
-reg [5:0] IFG_counter;
-reg [4:0] Preamble_counter;//
-reg [7:0] TxD_tmp ;
-reg TxEn_tmp ;
-reg [15:0] Tx_pkt_length_rmon ;
-reg Tx_apply_rmon ;
-reg [2:0] Tx_pkt_err_type_rmon;
-reg [3:0] RetryCnt ;
-reg Random_init ;
-reg Fifo_rd_finish ;
-reg Fifo_rd_retry ;
-reg [7:0] TxD ;
-reg TxEn ;
-reg CRC_init ;
-reg Data_en ;
-reg CRC_rd ;
-reg Fifo_rd ;
-reg MAC_tx_addr_rd ;
-reg MAC_header_slot ;
-reg MAC_header_slot_tmp ;
-reg [2:0] Tx_pkt_type_rmon ;
-wire Collision ;
-reg MAC_tx_addr_init ;
-reg Src_MAC_ptr ;
-reg [7:0] IPLengthCounter ;//for pad append
-reg [1:0] PADCounter ;
-reg [7:0] JamCounter ;
-reg PktDrpEvenPtr ;
-reg [7:0] pause_counter ;
-reg pause_quanta_sub ;
-reg [15:0] pause_quanta_set_dl1 ;
-reg xoff_gen_complete ;
-reg xon_gen_complete ;
-//******************************************************************************
-//boundery signal processing
-//******************************************************************************
-always @(posedge Clk or posedge Reset)
- if (Reset)
- begin
- pause_quanta_set_dl1 <=0;
- end
- else
- begin
- pause_quanta_set_dl1 <=pause_quanta_set ;
- end
-//******************************************************************************
-//state machine
-//******************************************************************************
-assign Collision=TxEn&CRS;
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- IPLengthCounter <=0;
- else if (Current_state==StateDefer)
- IPLengthCounter <=0;
- else if (IPLengthCounter!=8'hff&&(Current_state==StateData||Current_state==StateSendPauseFrame||Current_state==StatePAD))
- IPLengthCounter <=IPLengthCounter+1;
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- PADCounter <=0;
- else if (Current_state!=StatePAD)
- PADCounter <=0;
- else
- PADCounter <=PADCounter+1;
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- Current_state <=StateDefer;
- else
- Current_state <=Next_state;
-
-always @ (*)
- case (Current_state)
- StateDefer:
- if ((FullDuplex)||(!FullDuplex&&!CRS))
- Next_state=StateIFG;
- else
- Next_state=Current_state;
- StateIFG:
- if (!FullDuplex&&CRS)
- Next_state=StateDefer;
- else if ((FullDuplex&&IFG_counter==IFGset-4)||(!FullDuplex&&!CRS&&IFG_counter==IFGset-4))//remove some additional time
- Next_state=StateIdle;
- else
- Next_state=Current_state;
- StateIdle:
- if (!FullDuplex&&CRS)
- Next_state=StateDefer;
- else if (xoff_gen||xon_gen)
- Next_state=StatePreamble;
- else if (pause_apply)
- Next_state=StatePause;
- else if ((FullDuplex||~CRS)&&Fifo_ra)
- Next_state=StatePreamble;
- else
- Next_state=Current_state;
- StatePause:
- if (pause_counter==512/8)
- Next_state=StateDefer;
- else if (xoff_gen||xon_gen)
- Next_state=StateIdle;
- else
- Next_state=Current_state;
- StatePreamble:
- if (!FullDuplex&&Collision)
- Next_state=StateJam;
- else if ((FullDuplex&&Preamble_counter==6)||(!FullDuplex&&!Collision&&Preamble_counter==6))
- Next_state=StateSFD;
- else
- Next_state=Current_state;
- StateSFD:
- if (!FullDuplex&&Collision)
- Next_state=StateJam;
- else if (xoff_gen||xon_gen)
- Next_state=StateSendPauseFrame;
- else
- Next_state=StateData;
- StateSendPauseFrame:
- if (IPLengthCounter==17)
- Next_state=StatePAD;
- else
- Next_state=Current_state;
- StateData:
- if (!FullDuplex&&Collision)
- Next_state=StateJam;
- else if (Fifo_data_err_empty)
- Next_state=StateFFEmptyDrop;
- else if (Fifo_eop&&IPLengthCounter>=59)//IP+MAC+TYPE=60 ,start from 0
- Next_state=StateFCS;
- else if (Fifo_eop)
- Next_state=StatePAD;
- else
- Next_state=StateData;
- StatePAD:
- if (!FullDuplex&&Collision)
- Next_state=StateJam;
- else if (IPLengthCounter>=59)
- Next_state=StateFCS;
- else
- Next_state=Current_state;
- StateJam:
- if (RetryCnt<=MaxRetry&&JamCounter==16)
- Next_state=StateBackOff;
- else if (RetryCnt>MaxRetry)
- Next_state=StateJamDrop;
- else
- Next_state=Current_state;
- StateBackOff:
- if (Random_time_meet)
- Next_state =StateDefer;
- else
- Next_state =Current_state;
- StateFCS:
- if (!FullDuplex&&Collision)
- Next_state =StateJam;
- else if (CRC_end)
- Next_state =StateSwitchNext;
- else
- Next_state =Current_state;
- StateFFEmptyDrop:
- if (Fifo_eop)
- Next_state =StateSwitchNext;
- else
- Next_state =Current_state;
- StateJamDrop:
- if (Fifo_eop)
- Next_state =StateSwitchNext;
- else
- Next_state =Current_state;
- StateSwitchNext:
- Next_state =StateDefer;
- default:
- Next_state =StateDefer;
- endcase
-
-
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- JamCounter <=0;
- else if (Current_state!=StateJam)
- JamCounter <=0;
- else if (Current_state==StateJam)
- JamCounter <=JamCounter+1;
-
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- RetryCnt <=0;
- else if (Current_state==StateSwitchNext)
- RetryCnt <=0;
- else if (Current_state==StateJam&&Next_state==StateBackOff)
- RetryCnt <=RetryCnt + 1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- IFG_counter <=0;
- else if (Current_state!=StateIFG)
- IFG_counter <=0;
- else
- IFG_counter <=IFG_counter + 1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Preamble_counter <=0;
- else if (Current_state!=StatePreamble)
- Preamble_counter <=0;
- else
- Preamble_counter <=Preamble_counter+ 1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- PktDrpEvenPtr <=0;
- else if(Current_state==StateJamDrop||Current_state==StateFFEmptyDrop)
- PktDrpEvenPtr <=~PktDrpEvenPtr;
-//******************************************************************************
-//generate output signals
-//******************************************************************************
-//CRC related
-always @(Current_state)
- if (Current_state==StateSFD)
- CRC_init =1;
- else
- CRC_init =0;
-
-assign Frame_data=TxD_tmp;
-
-always @(Current_state)
- if (Current_state==StateData||Current_state==StateSendPauseFrame||Current_state==StatePAD)
- Data_en =1;
- else
- Data_en =0;
-
-always @(Current_state)
- if (Current_state==StateFCS)
- CRC_rd =1;
- else
- CRC_rd =0;
-
-//Ramdon_gen interface
-always @(Current_state or Next_state)
- if (Current_state==StateJam&&Next_state==StateBackOff)
- Random_init =1;
- else
- Random_init =0;
-
-//MAC_rx_FF
-//data have one cycle delay after fifo read signals
-always @ (*)
- if (Current_state==StateData ||
- Current_state==StateSFD&&!(xoff_gen||xon_gen) ||
- Current_state==StateJamDrop&&PktDrpEvenPtr||
- Current_state==StateFFEmptyDrop&&PktDrpEvenPtr )
- Fifo_rd =1;
- else
- Fifo_rd =0;
-
-always @ (Current_state)
- if (Current_state==StateSwitchNext)
- Fifo_rd_finish =1;
- else
- Fifo_rd_finish =0;
-
-always @ (Current_state)
- if (Current_state==StateJam)
- Fifo_rd_retry =1;
- else
- Fifo_rd_retry =0;
-//RMII
-always @(Current_state)
- if (Current_state==StatePreamble||Current_state==StateSFD||
- Current_state==StateData||Current_state==StateSendPauseFrame||
- Current_state==StateFCS||Current_state==StatePAD||Current_state==StateJam)
- TxEn_tmp =1;
- else
- TxEn_tmp =0;
-
-//gen txd data
-always @(*)
- case (Current_state)
- StatePreamble:
- TxD_tmp =8'h55;
- StateSFD:
- TxD_tmp =8'hd5;
- StateData:
- if (Src_MAC_ptr&&MAC_tx_add_en)
- TxD_tmp =MAC_tx_addr_data;
- else
- TxD_tmp =Fifo_data;
- StateSendPauseFrame:
- if (Src_MAC_ptr&&MAC_tx_add_en)
- TxD_tmp =MAC_tx_addr_data;
- else
- case (IPLengthCounter)
- 8'd0: TxD_tmp =8'h01;
- 8'd1: TxD_tmp =8'h80;
- 8'd2: TxD_tmp =8'hc2;
- 8'd3: TxD_tmp =8'h00;
- 8'd4: TxD_tmp =8'h00;
- 8'd5: TxD_tmp =8'h01;
- 8'd12: TxD_tmp =8'h88;//type
- 8'd13: TxD_tmp =8'h08;//
- 8'd14: TxD_tmp =8'h00;//opcode
- 8'd15: TxD_tmp =8'h01;
- 8'd16: TxD_tmp =xon_gen?8'b0:pause_quanta_set_dl1[15:8];
- 8'd17: TxD_tmp =xon_gen?8'b0:pause_quanta_set_dl1[7:0];
-// 8'd60: TxD_tmp =8'h26;
-// 8'd61: TxD_tmp =8'h6b;
-// 8'd62: TxD_tmp =8'hae;
-// 8'd63: TxD_tmp =8'h0a;
- default:TxD_tmp =0;
- endcase
-
- StatePAD:
- TxD_tmp =8'h00;
- StateJam:
- TxD_tmp =8'h01; //jam sequence
- StateFCS:
- TxD_tmp =CRC_out;
- default:
- TxD_tmp =2'b0;
- endcase
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- begin
- TxD <=0;
- TxEn <=0;
- end
- else
- begin
- TxD <=TxD_tmp;
- TxEn <=TxEn_tmp;
- end
-//RMON
-
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Tx_pkt_length_rmon <=0;
- else if (Current_state==StateSFD)
- Tx_pkt_length_rmon <=0;
- else if (Current_state==StateData||Current_state==StateSendPauseFrame||Current_state==StatePAD||Current_state==StateFCS)
- Tx_pkt_length_rmon <=Tx_pkt_length_rmon+1;
-
-
-reg [2:0] Tx_apply_rmon_reg;
-
-always @( posedge Clk or posedge Reset )
- if ( Reset )
- begin
- Tx_apply_rmon <= 0;
- Tx_apply_rmon_reg <= 'b0;
- end
- else
- begin
- if ( (Fifo_eop&&Current_state==StateJamDrop) ||
- (Fifo_eop&&Current_state==StateFFEmptyDrop) ||
- CRC_end )
- Tx_apply_rmon <= 1;
- else
- if ( Tx_apply_rmon_reg[2] )
- Tx_apply_rmon <= 0;
-
- Tx_apply_rmon_reg <= { Tx_apply_rmon_reg[1:0], Tx_apply_rmon };
- end
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Tx_pkt_err_type_rmon <=0;
- else if(Fifo_eop&&Current_state==StateJamDrop)
- Tx_pkt_err_type_rmon <=3'b001;//
- else if(Fifo_eop&&Current_state==StateFFEmptyDrop)
- Tx_pkt_err_type_rmon <=3'b010;//underflow
- else if(Fifo_eop&&Fifo_data_err_full)
- Tx_pkt_err_type_rmon <=3'b011;//overflow
- else if(CRC_end)
- Tx_pkt_err_type_rmon <=3'b100;//normal
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- MAC_header_slot_tmp <=0;
- else if(Current_state==StateSFD&&Next_state==StateData)
- MAC_header_slot_tmp <=1;
- else
- MAC_header_slot_tmp <=0;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- MAC_header_slot <=0;
- else
- MAC_header_slot <=MAC_header_slot_tmp;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Tx_pkt_type_rmon <=0;
- else if (Current_state==StateSendPauseFrame)
- Tx_pkt_type_rmon <=3'b100;
- else if(MAC_header_slot)
- Tx_pkt_type_rmon <={1'b0,TxD[7:6]};
-
-
-always @(Tx_pkt_length_rmon)
- if (Tx_pkt_length_rmon>=6&&Tx_pkt_length_rmon<=11)
- Src_MAC_ptr =1;
- else
- Src_MAC_ptr =0;
-
-//MAC_tx_addr_add
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- MAC_tx_addr_rd <=0;
- else if ((Tx_pkt_length_rmon>=4&&Tx_pkt_length_rmon<=9)&&(MAC_tx_add_en||Current_state==StateSendPauseFrame))
- MAC_tx_addr_rd <=1;
- else
- MAC_tx_addr_rd <=0;
-
- always @*
- //if ((Tx_pkt_length_rmon==3)&&Fifo_rd)
- if (Current_state==StatePreamble)
- MAC_tx_addr_init=1;
- else
- MAC_tx_addr_init=0;
-
-//**************************************************************************************************************
-// CFH: this implementation delays the time it sends an entire Ethernet frame with 512 bits for every pause
-// request of 512 bits. Actually, it should only delay the time it takes to transmit 512 bits, not counting
-// Ethernet header, CRC, Interframe Gap etc.
-// Hence the current implementation waits longer than the pause frame actually requests (~20% more)
-//**************************************************************************************************************
-
-//flow control
-always @(posedge Clk or posedge Reset)
- if (Reset)
- pause_counter <=0;
- else if (Current_state!=StatePause)
- pause_counter <=0;
- else
- pause_counter <=pause_counter+1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- pause_quanta_sub <=0;
- else if(pause_counter==512/8)
- pause_quanta_sub <=1;
- else
- pause_quanta_sub <=0;
-
-// FIXME The below probably won't work if the pause request comes when we are in the wrong state
- reg clear_xonxoff;
- always @(posedge Clk or posedge Reset)
- if(Reset)
- clear_xonxoff <= 0;
- else if((Current_state==StateSendPauseFrame) & (IPLengthCounter==17))
- clear_xonxoff <= 1;
- else if(~xon_gen & ~xoff_gen)
- clear_xonxoff <= 0;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- xoff_gen_complete <=0;
- else if(clear_xonxoff & xoff_gen)
- xoff_gen_complete <=1;
- else
- xoff_gen_complete <=0;
-
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- xon_gen_complete <=0;
- else if(clear_xonxoff & xon_gen)
- xon_gen_complete <=1;
- else
- xon_gen_complete <=0;
-
-endmodule
diff --git a/eth/rtl/verilog/MAC_tx/Random_gen.v b/eth/rtl/verilog/MAC_tx/Random_gen.v deleted file mode 100644 index fd57008b1..000000000 --- a/eth/rtl/verilog/MAC_tx/Random_gen.v +++ /dev/null @@ -1,109 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// Random_gen.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-
-module Random_gen(
-Reset ,
-Clk ,
-Init ,
-RetryCnt ,
-Random_time_meet
-);
-input Reset ;
-input Clk ;
-input Init ;
-input [3:0] RetryCnt ;
-output Random_time_meet;
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-reg [9:0] Random_sequence ;
-reg [9:0] Random ;
-reg [9:0] Random_counter ;
-reg [7:0] Slot_time_counter; //256*2=512bit=1 slot time
-reg Random_time_meet;
-
-//******************************************************************************
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Random_sequence <=0;
- else
- Random_sequence <={Random_sequence[8:0],~(Random_sequence[2]^Random_sequence[9])};
-
-always @ (RetryCnt or Random_sequence)
- case (RetryCnt)
- 4'h0 : Random={9'b0,Random_sequence[0]};
- 4'h1 : Random={8'b0,Random_sequence[1:0]};
- 4'h2 : Random={7'b0,Random_sequence[2:0]};
- 4'h3 : Random={6'b0,Random_sequence[3:0]};
- 4'h4 : Random={5'b0,Random_sequence[4:0]};
- 4'h5 : Random={4'b0,Random_sequence[5:0]};
- 4'h6 : Random={3'b0,Random_sequence[6:0]};
- 4'h7 : Random={2'b0,Random_sequence[7:0]};
- 4'h8 : Random={1'b0,Random_sequence[8:0]};
- 4'h9 : Random={ Random_sequence[9:0]};
- default : Random={ Random_sequence[9:0]};
- endcase
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Slot_time_counter <=0;
- else if(Init)
- Slot_time_counter <=0;
- else if(!Random_time_meet)
- Slot_time_counter <=Slot_time_counter+1;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Random_counter <=0;
- else if (Init)
- Random_counter <=Random;
- else if (Random_counter!=0&&Slot_time_counter==255)
- Random_counter <=Random_counter -1 ;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Random_time_meet <=1;
- else if (Init)
- Random_time_meet <=0;
- else if (Random_counter==0)
- Random_time_meet <=1;
-
-endmodule
-
-
diff --git a/eth/rtl/verilog/Phy_int.v b/eth/rtl/verilog/Phy_int.v deleted file mode 100644 index c85d4f64b..000000000 --- a/eth/rtl/verilog/Phy_int.v +++ /dev/null @@ -1,205 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// Phy_int.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: Phy_int.v,v $
-// Revision 1.3 2006/01/19 14:07:53 maverickist
-// verification is complete.
-//
-// Revision 1.3 2005/12/16 06:44:14 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.2 2005/12/13 12:15:36 Administrator
-// no message
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-module Phy_int
- (input rst_mac_rx,
- input rst_mac_tx,
- input MAC_rx_clk,
- input MAC_tx_clk,
-
- // Rx interface
- output reg MCrs_dv,
- output reg [7:0] MRxD,
- output MRxErr,
-
- // Tx interface
- input [7:0] MTxD,
- input MTxEn,
- output MCRS,
-
- // PHY interface
- output Tx_er,
- output reg Tx_en,
- output reg [7:0] Txd,
- input Rx_er,
- input Rx_dv,
- input [7:0] Rxd,
- input Crs,
- input Col,
-
- // Host interface
- input Line_loop_en,
- input [2:0] Speed );
-
- //-------------------------------------------------------------------------
- // Local declarations
- //-------------------------------------------------------------------------
-
- reg [7:0] MTxD_dl1;
- reg MTxEn_dl1;
- reg Tx_odd_data_ptr;
- reg Rx_odd_data_ptr;
- reg Rx_er_dl1;
- reg Rx_dv_dl1;
- reg Rx_dv_dl2;
- reg [7:0] Rxd_dl1;
- reg [7:0] Rxd_dl2;
- reg Crs_dl1;
-
- //-------------------------------------------------------------------------
- // Tx control
- //-------------------------------------------------------------------------
-
- // Reg boundary signals
- always @( posedge MAC_tx_clk or posedge rst_mac_tx )
- if ( rst_mac_tx )
- begin
- MTxD_dl1 <= 0;
- MTxEn_dl1 <= 0;
- end
- else
- begin
- MTxD_dl1 <= MTxD;
- MTxEn_dl1 <= MTxEn;
- end
-
- always @( posedge MAC_tx_clk or posedge rst_mac_tx )
- if ( rst_mac_tx )
- Tx_odd_data_ptr <= 0;
- else if ( !MTxD_dl1 )
- Tx_odd_data_ptr <= 0;
- else
- Tx_odd_data_ptr <= !Tx_odd_data_ptr;
-
-
- always @( posedge MAC_tx_clk or posedge rst_mac_tx )
- if ( rst_mac_tx )
- Txd <= 0;
- else if ( Speed[2] && MTxEn_dl1 )
- Txd <= MTxD_dl1;
- else if ( MTxEn_dl1 && !Tx_odd_data_ptr )
- Txd <= { 4'b0, MTxD_dl1[3:0] };
- else if ( MTxEn_dl1 && Tx_odd_data_ptr )
- Txd <= { 4'b0, MTxD_dl1[7:4] };
- else
- Txd <=0;
-
- always @( posedge MAC_tx_clk or posedge rst_mac_tx )
- if ( rst_mac_tx )
- Tx_en <= 0;
- else if ( MTxEn_dl1 )
- Tx_en <= 1;
- else
- Tx_en <= 0;
-
- assign Tx_er = 0;
-
- //-------------------------------------------------------------------------
- // Rx control
- //-------------------------------------------------------------------------
-
- // Reg boundery signals
- always @( posedge MAC_rx_clk or posedge rst_mac_rx )
- if ( rst_mac_rx )
- begin
- Rx_er_dl1 <= 0;
- Rx_dv_dl1 <= 0;
- Rx_dv_dl2 <= 0;
- Rxd_dl1 <= 0;
- Rxd_dl2 <= 0;
- Crs_dl1 <= 0;
- end
- else
- begin
- Rx_er_dl1 <= Rx_er;
- Rx_dv_dl1 <= Rx_dv;
- Rx_dv_dl2 <= Rx_dv_dl1;
- Rxd_dl1 <= Rxd;
- Rxd_dl2 <= Rxd_dl1;
- Crs_dl1 <= Crs;
- end
-
- assign MRxErr = Rx_er_dl1;
- assign MCRS = Crs_dl1;
-
- always @( posedge MAC_rx_clk or posedge rst_mac_rx )
- if ( rst_mac_rx )
- MCrs_dv <= 0;
- else if ( Line_loop_en )
- MCrs_dv <= Tx_en;
- else if( Rx_dv_dl2 )
- MCrs_dv <= 1;
- else
- MCrs_dv <= 0;
-
- always @ ( posedge MAC_rx_clk or posedge rst_mac_rx )
- if ( rst_mac_rx )
- Rx_odd_data_ptr <= 0;
- else if ( !Rx_dv_dl1 )
- Rx_odd_data_ptr <= 0;
- else
- Rx_odd_data_ptr <= !Rx_odd_data_ptr;
-
- always @ ( posedge MAC_rx_clk or posedge rst_mac_rx )
- if ( rst_mac_rx )
- MRxD <= 0;
- else if( Line_loop_en )
- MRxD <= Txd;
- else if( Speed[2] && Rx_dv_dl2 )
- MRxD <= Rxd_dl2;
- else if( Rx_dv_dl1 && Rx_odd_data_ptr )
- MRxD <={ Rxd_dl1[3:0], Rxd_dl2[3:0] };
-
-endmodule
diff --git a/eth/rtl/verilog/RMON.v b/eth/rtl/verilog/RMON.v deleted file mode 100644 index 18a84beb5..000000000 --- a/eth/rtl/verilog/RMON.v +++ /dev/null @@ -1,163 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// RMON.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: RMON.v,v $
-// Revision 1.4 2006/06/25 04:58:56 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:53 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:16 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-module RMON
- (input Clk ,
- input Reset ,
- //Tx_RMON
- input [2:0] Tx_pkt_type_rmon ,
- input [15:0] Tx_pkt_length_rmon ,
- input Tx_apply_rmon ,
- input [2:0] Tx_pkt_err_type_rmon,
- //Tx_RMON
- input [2:0] Rx_pkt_type_rmon ,
- input [15:0] Rx_pkt_length_rmon ,
- input Rx_apply_rmon ,
- input [2:0] Rx_pkt_err_type_rmon,
- //CPU
- input [5:0] CPU_rd_addr ,
- input CPU_rd_apply ,
- output CPU_rd_grant ,
- output [31:0] CPU_rd_dout
- );
-
- // ******************************************************************************
- // interface signals
- // ******************************************************************************
- wire Reg_apply_0 ;
- wire [4:0] Reg_addr_0 ;
- wire [15:0] Reg_data_0 ;
- wire Reg_next_0 ;
- wire Reg_apply_1 ;
- wire [4:0] Reg_addr_1 ;
- wire [15:0] Reg_data_1 ;
- wire Reg_next_1 ;
- wire [5:0] Addra ;
- wire [31:0] Dina ;
- reg [31:0] Douta ;
- wire Wea ;
-
- // ******************************************************************************
-
- RMON_addr_gen U_0_Rx_RMON_addr_gen
- (.Clk (Clk ),
- .Reset (Reset ),
- //RMON
- .Pkt_type_rmon (Rx_pkt_type_rmon ),
- .Pkt_length_rmon (Rx_pkt_length_rmon ),
- .Apply_rmon (Rx_apply_rmon ),
- .Pkt_err_type_rmon (Rx_pkt_err_type_rmon ),
- //Rmon_ctrl
- .Reg_apply (Reg_apply_0 ),
- .Reg_addr (Reg_addr_0 ),
- .Reg_data (Reg_data_0 ),
- .Reg_next (Reg_next_0 ),
- //CPU
- .Reg_drop_apply ( ) );
-
- RMON_addr_gen U_0_Tx_RMON_addr_gen
- (.Clk (Clk ),
- .Reset (Reset ),
- //RMON
- .Pkt_type_rmon (Tx_pkt_type_rmon ),
- .Pkt_length_rmon (Tx_pkt_length_rmon ),
- .Apply_rmon (Tx_apply_rmon ),
- .Pkt_err_type_rmon (Tx_pkt_err_type_rmon ),
- //Rmon_ctrl
- .Reg_apply (Reg_apply_1 ),
- .Reg_addr (Reg_addr_1 ),
- .Reg_data (Reg_data_1 ),
- .Reg_next (Reg_next_1 ),
- //CPU
- .Reg_drop_apply ( ) );
-
- RMON_ctrl U_RMON_ctrl
- (.Clk (Clk ),
- .Reset (Reset ),
- //RMON_ctrl
- .Reg_apply_0 (Reg_apply_0 ),
- .Reg_addr_0 (Reg_addr_0 ),
- .Reg_data_0 (Reg_data_0 ),
- .Reg_next_0 (Reg_next_0 ),
- .Reg_apply_1 (Reg_apply_1 ),
- .Reg_addr_1 (Reg_addr_1 ),
- .Reg_data_1 (Reg_data_1 ),
- .Reg_next_1 (Reg_next_1 ),
- //dual-port ram
- .Addra (Addra ),
- .Dina (Dina ),
- .Douta (Douta ),
- .Wea (Wea ),
- //CPU
- .CPU_rd_addr (CPU_rd_addr ),
- .CPU_rd_apply (CPU_rd_apply ),
- .CPU_rd_grant (CPU_rd_grant ),
- .CPU_rd_dout (CPU_rd_dout ) );
-
- reg [31:0] RMON_ram [0:63];
- wire [31:0] Douta_imm = RMON_ram[Addra];
- integer i;
- initial
- for(i=0;i<64;i=i+1)
- RMON_ram[i] = 32'd0;
-
- always @(posedge Clk)
- if(Wea)
- RMON_ram[Addra] <= Dina;
-
- always @(posedge Clk)
- Douta <= Douta_imm;
-
-endmodule // RMON
diff --git a/eth/rtl/verilog/RMON/RMON_addr_gen.v b/eth/rtl/verilog/RMON/RMON_addr_gen.v deleted file mode 100644 index 9da8d1f80..000000000 --- a/eth/rtl/verilog/RMON/RMON_addr_gen.v +++ /dev/null @@ -1,295 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// RMON_addr_gen.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: RMON_addr_gen.v,v $
-// Revision 1.4 2006/06/25 04:58:57 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:55 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:19 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-module RMON_addr_gen(
-Clk ,
-Reset ,
-//RMON
-Pkt_type_rmon ,
-Pkt_length_rmon ,
-Apply_rmon ,//pluse signal looks like eop
-Pkt_err_type_rmon ,
-//
-Reg_apply ,
-Reg_addr ,
-Reg_data ,
-Reg_next ,
-//CPU
-Reg_drop_apply
-);
-input Clk ;
-input Reset ;
- //RMON
-input [2:0] Pkt_type_rmon ;
-input [15:0] Pkt_length_rmon ;
-input Apply_rmon ;//pluse signal looks like eop
-input [2:0] Pkt_err_type_rmon ;
- //RMON_ctrl
-output Reg_apply ;
-output [4:0] Reg_addr ;
-output [15:0] Reg_data ;
-input Reg_next ;
- //CPU
-output Reg_drop_apply ;
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-parameter StateIdle =4'd0;
-parameter StatePktLength =4'd1;
-parameter StatePktNumber =4'd2;
-parameter StatePktType =4'd3;
-parameter StatePktRange =4'd4;
-
-reg [3:0] CurrentState /* synthesys syn_keep=1 */;
-reg [3:0] NextState;
-
-reg [2:0] PktTypeReg ;
-reg [15:0] PktLengthReg ;
-reg [2:0] PktErrTypeReg ;
-
-reg Reg_apply ;
-reg [4:0] Reg_addr ;
-reg [15:0] Reg_data ;
-reg Reg_drop_apply ;
-//******************************************************************************
-//register boundery signals
-
-//******************************************************************************
-reg Apply_rmon_dl1;
-reg Apply_rmon_dl2;
-reg Apply_rmon_pulse;
-reg [2:0] Pkt_type_rmon_dl1 ;
-reg [15:0] Pkt_length_rmon_dl1 ;
-reg [2:0] Pkt_err_type_rmon_dl1 ;
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- begin
- Pkt_type_rmon_dl1 <=0;
- Pkt_length_rmon_dl1 <=0;
- Pkt_err_type_rmon_dl1 <=0;
- end
- else
- begin
- Pkt_type_rmon_dl1 <=Pkt_type_rmon ;
- Pkt_length_rmon_dl1 <=Pkt_length_rmon ;
- Pkt_err_type_rmon_dl1 <=Pkt_err_type_rmon ;
- end
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- begin
- Apply_rmon_dl1 <=0;
- Apply_rmon_dl2 <=0;
- end
- else
- begin
- Apply_rmon_dl1 <=Apply_rmon;
- Apply_rmon_dl2 <=Apply_rmon_dl1;
- end
-
-always @(Apply_rmon_dl1 or Apply_rmon_dl2)
- if (Apply_rmon_dl1&!Apply_rmon_dl2)
- Apply_rmon_pulse =1;
- else
- Apply_rmon_pulse =0;
-
-
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- begin
- PktTypeReg <=0;
- PktLengthReg <=0;
- PktErrTypeReg <=0;
- end
- else if (Apply_rmon_pulse&&CurrentState==StateIdle)
- begin
- PktTypeReg <=Pkt_type_rmon_dl1 ;
- PktLengthReg <=Pkt_length_rmon_dl1 ;
- PktErrTypeReg <=Pkt_err_type_rmon_dl1 ;
- end
-
-
-//******************************************************************************
-//State Machine
-//******************************************************************************
-always @(posedge Clk or posedge Reset)
- if (Reset)
- CurrentState <=StateIdle;
- else
- CurrentState <=NextState;
-
-always @(CurrentState or Apply_rmon_pulse or Reg_next)
- case (CurrentState)
- StateIdle:
- if (Apply_rmon_pulse)
- NextState =StatePktLength;
- else
- NextState =StateIdle;
- StatePktLength:
- if (Reg_next)
- NextState =StatePktNumber;
- else
- NextState =CurrentState;
- StatePktNumber:
- if (Reg_next)
- NextState =StatePktType;
- else
- NextState =CurrentState;
- StatePktType:
- if (Reg_next)
- NextState =StatePktRange;
- else
- NextState =CurrentState;
- StatePktRange:
- if (Reg_next)
- NextState =StateIdle;
- else
- NextState =CurrentState;
- default:
- NextState =StateIdle;
- endcase
-
-//******************************************************************************
-//gen output signals
-//******************************************************************************
-//Reg_apply
-always @ (CurrentState)
- if (CurrentState==StatePktLength||CurrentState==StatePktNumber||
- CurrentState==StatePktType||CurrentState==StatePktRange)
- Reg_apply =1;
- else
- Reg_apply =0;
-
-//Reg_addr
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Reg_addr <=0;
- else case (CurrentState)
- StatePktLength:
- Reg_addr <=5'd00;
- StatePktNumber:
- Reg_addr <=5'd01;
- StatePktType:
- case(PktTypeReg)
- 3'b011:
- Reg_addr <=5'd02; //broadcast
- 3'b001:
- Reg_addr <=5'd03; //multicast
- 3'b100:
- Reg_addr <=5'd16; //pause frame
- default:
- Reg_addr <=5'd04; //unicast
- endcase
- StatePktRange:
- case(PktErrTypeReg)
- 3'b001:
- Reg_addr <=5'd05;
- 3'b010:
- Reg_addr <=5'd06;
- 3'b011:
- Reg_addr <=5'd07;
- 3'b100:
- if (PktLengthReg<64)
- Reg_addr <=5'd08;
- else if (PktLengthReg==64)
- Reg_addr <=5'd09;
- else if (PktLengthReg<128)
- Reg_addr <=5'd10;
- else if (PktLengthReg<256)
- Reg_addr <=5'd11;
- else if (PktLengthReg<512)
- Reg_addr <=5'd12;
- else if (PktLengthReg<1024)
- Reg_addr <=5'd13;
- else if (PktLengthReg<1519)
- Reg_addr <=5'd14;
- else
- Reg_addr <=5'd15;
- default:
- Reg_addr <=5'd05;
- endcase
- default:
- Reg_addr <=5'd05;
- endcase
-
-//Reg_data
-always @ (CurrentState or PktLengthReg)
- case (CurrentState)
- StatePktLength:
- Reg_data =PktLengthReg;
- StatePktNumber:
- Reg_data =1;
- StatePktType:
- Reg_data =1;
- StatePktRange:
- Reg_data =1;
- default:
- Reg_data =0;
- endcase
-
-//Reg_drop_apply
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Reg_drop_apply <=0;
- else if (CurrentState!=StateIdle&&Apply_rmon_pulse)
- Reg_drop_apply <=1;
- else
- Reg_drop_apply <=0;
-
-
-endmodule
-
diff --git a/eth/rtl/verilog/RMON/RMON_ctrl.v b/eth/rtl/verilog/RMON/RMON_ctrl.v deleted file mode 100644 index 4fc038dc8..000000000 --- a/eth/rtl/verilog/RMON/RMON_ctrl.v +++ /dev/null @@ -1,283 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// RMON_ctrl.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: RMON_ctrl.v,v $
-// Revision 1.4 2006/06/25 04:58:57 maverickist
-// no message
-//
-// Revision 1.3 2006/01/19 14:07:55 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:19 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-module RMON_ctrl (
-Clk ,
-Reset ,
-//RMON_ctrl
-Reg_apply_0 ,
-Reg_addr_0 ,
-Reg_data_0 ,
-Reg_next_0 ,
-Reg_apply_1 ,
-Reg_addr_1 ,
-Reg_data_1 ,
-Reg_next_1 ,
-//dual-port ram
-Addra ,
-Dina ,
-Douta ,
-Wea ,
-//CPU
-CPU_rd_addr ,
-CPU_rd_apply ,
-CPU_rd_grant ,
-CPU_rd_dout
-
-);
-input Clk ;
-input Reset ;
- //RMON_ctrl
-input Reg_apply_0 ;
-input [4:0] Reg_addr_0 ;
-input [15:0] Reg_data_0 ;
-output Reg_next_0 ;
-input Reg_apply_1 ;
-input [4:0] Reg_addr_1 ;
-input [15:0] Reg_data_1 ;
-output Reg_next_1 ;
- //dual-port ram
- //port-a for Rmon
-output [5:0] Addra ;
-output [31:0] Dina ;
-input [31:0] Douta ;
-output Wea ;
- //CPU
-input [5:0] CPU_rd_addr ;
-input CPU_rd_apply ;
-output CPU_rd_grant ;
-output [31:0] CPU_rd_dout ;
-
-
-
-
-//******************************************************************************
-//internal signals
-//******************************************************************************
-
-parameter StateCPU =4'd00;
-parameter StateMAC0 =4'd01;
-parameter StateMAC1 =4'd02;
-
-
-reg [3:0] CurrentState /* synthesys syn_keep=1 */;
-reg [3:0] NextState;
-reg [3:0] CurrentState_reg;
-
-reg [4:0] StepCounter;
-reg [5:0] Addra ;
-reg [31:0] Dina;
-reg Reg_next_0 ;
-reg Reg_next_1 ;
-reg Write;
-reg Read;
-reg Pipeline;
-reg [31:0] CPU_rd_dout ;
-reg CPU_rd_apply_reg ;
-//******************************************************************************
-//State Machine
-//******************************************************************************
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- CurrentState <=StateMAC0;
- else
- CurrentState <=NextState;
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- CurrentState_reg <=StateMAC0;
- else if(CurrentState!=StateCPU)
- CurrentState_reg <=CurrentState;
-
-always @(CurrentState or CPU_rd_apply_reg or Reg_apply_0 or CurrentState_reg
- or Reg_apply_1
- or StepCounter
- )
- case(CurrentState)
- StateMAC0:
- if(!Reg_apply_0&&CPU_rd_apply_reg)
- NextState =StateCPU;
- else if(!Reg_apply_0)
- NextState =StateMAC1;
- else
- NextState =CurrentState;
- StateMAC1:
- if(!Reg_apply_1&&CPU_rd_apply_reg)
- NextState =StateCPU;
- else if(!Reg_apply_1)
- NextState =StateMAC0;
- else
- NextState =CurrentState;
- StateCPU:
- if (StepCounter==3)
- case (CurrentState_reg)
- StateMAC0 :NextState =StateMAC0 ;
- StateMAC1 :NextState =StateMAC1 ;
- default :NextState =StateMAC0;
- endcase
- else
- NextState =CurrentState;
-
- default:
- NextState =StateMAC0;
- endcase
-
-
-
-always @(posedge Clk or posedge Reset)
- if (Reset)
- StepCounter <=0;
- else if(NextState!=CurrentState)
- StepCounter <=0;
- else if (StepCounter!=4'hf)
- StepCounter <=StepCounter + 1;
-
-//******************************************************************************
-//temp signals
-//******************************************************************************
-always @(StepCounter)
- if( StepCounter==1||StepCounter==4||
- StepCounter==7||StepCounter==10)
- Read =1;
- else
- Read =0;
-
-always @(StepCounter or CurrentState)
- if( StepCounter==2||StepCounter==5||
- StepCounter==8||StepCounter==11)
- Pipeline =1;
- else
- Pipeline =0;
-
-always @(StepCounter or CurrentState)
- if( StepCounter==3||StepCounter==6||
- StepCounter==9||StepCounter==12)
- Write =1;
- else
- Write =0;
-
-
-//******************************************************************************
-//gen output signals
-//******************************************************************************
-//Addra
-always @(*)
- case(CurrentState)
- StateMAC0 : Addra={1'd0 ,Reg_addr_0 };
- StateMAC1 : Addra={1'd1 ,Reg_addr_1 };
- StateCPU: Addra=CPU_rd_addr;
- default: Addra=0;
- endcase
-
-//Dina
-always @(posedge Clk or posedge Reset)
- if (Reset)
- Dina <=0;
- else
- case(CurrentState)
- StateMAC0 : Dina<=Douta+Reg_data_0 ;
- StateMAC1 : Dina<=Douta+Reg_data_1 ;
- StateCPU: Dina<=0;
- default: Dina<=0;
- endcase
-
-assign Wea =Write;
-//Reg_next
-always @(CurrentState or Pipeline)
- if(CurrentState==StateMAC0)
- Reg_next_0 =Pipeline;
- else
- Reg_next_0 =0;
-
-always @(CurrentState or Pipeline)
- if(CurrentState==StateMAC1)
- Reg_next_1 =Pipeline;
- else
- Reg_next_1 =0;
-
-
-//CPU_rd_grant
-reg CPU_rd_apply_dl1;
-reg CPU_rd_apply_dl2;
-//rising edge
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- begin
- CPU_rd_apply_dl1 <=0;
- CPU_rd_apply_dl2 <=0;
- end
- else
- begin
- CPU_rd_apply_dl1 <=CPU_rd_apply;
- CPU_rd_apply_dl2 <=CPU_rd_apply_dl1;
- end
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- CPU_rd_apply_reg <=0;
- else if (CPU_rd_apply_dl1&!CPU_rd_apply_dl2)
- CPU_rd_apply_reg <=1;
- else if (CurrentState==StateCPU&&Write)
- CPU_rd_apply_reg <=0;
-
-assign CPU_rd_grant = CPU_rd_apply & CPU_rd_apply_dl1 & CPU_rd_apply_dl2 & !CPU_rd_apply_reg;
-
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- CPU_rd_dout <=0;
- else if (Pipeline&&CurrentState==StateCPU)
- CPU_rd_dout <=Douta;
-
-endmodule
diff --git a/eth/rtl/verilog/Reg_int.v b/eth/rtl/verilog/Reg_int.v deleted file mode 100644 index bdf73d8e5..000000000 --- a/eth/rtl/verilog/Reg_int.v +++ /dev/null @@ -1,275 +0,0 @@ -module Reg_int (
- // Wishbone compliant core host interface
- input CLK_I, // Wishbone interface clock (nominally 50 MHz)
- input RST_I, // Active high (async) reset of the Wishbone interface
- input STB_I, // Active high module-select
- input CYC_I, // Active high cycle-enable
- input [6:0] ADR_I, // Module register address
- input WE_I, // Active high for writes, low for reads
- input [31:0] DAT_I, // Write data
- output reg [31:0] DAT_O, // Read data
- output reg ACK_O, // Acknowledge output – single high pulse
-
- // Tx host interface
- output [4:0] Tx_Hwmark,
- output [4:0] Tx_Lwmark,
- output MAC_tx_add_en,
- output FullDuplex,
- output [3:0] MaxRetry,
- output [5:0] IFGset,
- output [7:0] MAC_tx_add_prom_data,
- output [2:0] MAC_tx_add_prom_add,
- output MAC_tx_add_prom_wr,
-
- // Rx host interface
- output MAC_rx_add_chk_en,
- output [7:0] MAC_rx_add_prom_data,
- output [2:0] MAC_rx_add_prom_add,
- output MAC_rx_add_prom_wr,
- output broadcast_filter_en,
- output [15:0] broadcast_bucket_depth,
- output [15:0] broadcast_bucket_interval,
- output RX_APPEND_CRC,
- output [4:0] Rx_Hwmark,
- output [4:0] Rx_Lwmark,
- output CRC_chk_en,
- output [5:0] RX_IFG_SET,
- output [15:0] RX_MAX_LENGTH, // Default 1518
- output [6:0] RX_MIN_LENGTH, // Default 64
-
- // Flow control settings
- output pause_frame_send_en,
- output [15:0] pause_quanta_set,
- output tx_pause_en,
- output [15:0] fc_hwmark,
- output [15:0] fc_lwmark,
- output [15:0] fc_padtime,
-
- // RMON host interface
- output [5:0] CPU_rd_addr,
- output CPU_rd_apply,
- input CPU_rd_grant,
- input [31:0] CPU_rd_dout,
-
- //Phy int host interface
- output Line_loop_en,
- output [2:0] Speed,
-
- //MII to CPU
- output [7:0] Divider, // Divider for the host clock
- output [15:0] CtrlData, // Control Data (to be written to the PHY reg.)
- output [4:0] Rgad, // Register Address (within the PHY)
- output [4:0] Fiad, // PHY Address
- output NoPre, // No Preamble (no 32-bit preamble)
- output WCtrlData, // Write Control Data operation
- output RStat, // Read Status operation
- output ScanStat, // Scan Status operation
- input Busy, // Busy Signal
- input LinkFail, // Link Integrity Signal
- input Nvalid, // Invalid Status (qualifier for the valid scan result)
- input [15:0] Prsd, // Read Status Data (data read from the PHY)
- input WCtrlDataStart, // This signals resets the WCTRLDATA bit in the MIIM Command register
- input RStatStart, // This signal resets the RSTAT BIT in the MIIM Command register
- input UpdateMIIRX_DATAReg // Updates MII RX_DATA register with read data
-);
-
- // New registers for controlling the MII interface
- wire [8:0] MIIMODER;
- reg [2:0] MIICOMMAND;
- wire [12:0] MIIADDRESS;
- wire [15:0] MIITX_DATA;
- reg [15:0] MIIRX_DATA;
- wire [2:0] MIISTATUS;
-
- // New registers for controlling the MII interface
-
- // MIIMODER
- assign NoPre = MIIMODER[8];
- assign Divider = MIIMODER[7:0];
- // MIICOMMAND
- assign WCtrlData = MIICOMMAND[2];
- assign RStat = MIICOMMAND[1];
- assign ScanStat = MIICOMMAND[0];
- // MIIADDRESS
- assign Rgad = MIIADDRESS[12:8];
- assign Fiad = MIIADDRESS[4:0];
- // MIITX_DATA
- assign CtrlData = MIITX_DATA[15:0];
- // MIISTATUS
- assign MIISTATUS[2:0] = { 13'b0, Nvalid, Busy, LinkFail };
-
- wire Wr;
-
- RegCPUData #( 5 ) U_0_000( Tx_Hwmark , 7'd000, 5'h09, RST_I, CLK_I, Wr, ADR_I, DAT_I[4:0] );
- RegCPUData #( 5 ) U_0_001( Tx_Lwmark , 7'd001, 5'h08, RST_I, CLK_I, Wr, ADR_I, DAT_I[4:0] );
- RegCPUData #( 1 ) U_0_002( pause_frame_send_en , 7'd002, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 16 ) U_0_003( pause_quanta_set , 7'd003, 16'h01af, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 6 ) U_0_004( IFGset , 7'd004, 6'h0c, RST_I, CLK_I, Wr, ADR_I, DAT_I[5:0] );
- RegCPUData #( 1 ) U_0_005( FullDuplex , 7'd005, 1'h1, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 4 ) U_0_006( MaxRetry , 7'd006, 4'h2, RST_I, CLK_I, Wr, ADR_I, DAT_I[3:0] );
- RegCPUData #( 1 ) U_0_007( MAC_tx_add_en , 7'd007, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 8 ) U_0_008( MAC_tx_add_prom_data , 7'd008, 8'h00, RST_I, CLK_I, Wr, ADR_I, DAT_I[7:0] );
- RegCPUData #( 3 ) U_0_009( MAC_tx_add_prom_add , 7'd009, 3'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[2:0] );
- RegCPUData #( 1 ) U_0_010( MAC_tx_add_prom_wr , 7'd010, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 1 ) U_0_011( tx_pause_en , 7'd011, 1'h1, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 16 ) U_0_012( fc_hwmark , 7'd012, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 16 ) U_0_013( fc_lwmark , 7'd013, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 1 ) U_0_014( MAC_rx_add_chk_en , 7'd014, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 8 ) U_0_015( MAC_rx_add_prom_data , 7'd015, 8'h00, RST_I, CLK_I, Wr, ADR_I, DAT_I[7:0] );
- RegCPUData #( 3 ) U_0_016( MAC_rx_add_prom_add , 7'd016, 3'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[2:0] );
- RegCPUData #( 1 ) U_0_017( MAC_rx_add_prom_wr , 7'd017, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 1 ) U_0_018( broadcast_filter_en , 7'd018, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 16 ) U_0_019( broadcast_bucket_depth , 7'd019, 16'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 16 ) U_0_020( broadcast_bucket_interval , 7'd020, 16'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 1 ) U_0_021( RX_APPEND_CRC , 7'd021, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 5 ) U_0_022( Rx_Hwmark , 7'd022, 5'h1a, RST_I, CLK_I, Wr, ADR_I, DAT_I[4:0] );
- RegCPUData #( 5 ) U_0_023( Rx_Lwmark , 7'd023, 5'h10, RST_I, CLK_I, Wr, ADR_I, DAT_I[4:0] );
- RegCPUData #( 1 ) U_0_024( CRC_chk_en , 7'd024, 1'h1, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 6 ) U_0_025( RX_IFG_SET , 7'd025, 6'h0c, RST_I, CLK_I, Wr, ADR_I, DAT_I[5:0] );
- RegCPUData #( 16 ) U_0_026( RX_MAX_LENGTH , 7'd026, 16'h2710, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 7 ) U_0_027( RX_MIN_LENGTH , 7'd027, 7'h40, RST_I, CLK_I, Wr, ADR_I, DAT_I[6:0] );
- RegCPUData #( 6 ) U_0_028( CPU_rd_addr , 7'd028, 6'h00, RST_I, CLK_I, Wr, ADR_I, DAT_I[5:0] );
- RegCPUData #( 1 ) U_0_029( CPU_rd_apply , 7'd029, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
-//RegCPUData #( 1 ) U_0_030( CPU_rd_grant , 7'd030, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
-//RegCPUData #( 16 ) U_0_031( CPU_rd_dout_l , 7'd031, 16'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
-//RegCPUData #( 16 ) U_0_032( CPU_rd_dout_h , 7'd032, 16'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
- RegCPUData #( 1 ) U_0_033( Line_loop_en , 7'd033, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[0:0] );
- RegCPUData #( 3 ) U_0_034( Speed , 7'd034, 3'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[2:0] );
-
- // New registers for controlling the MDIO interface
- RegCPUData #( 9 ) U_0_035( MIIMODER , 7'd035, 9'h064, RST_I, CLK_I, Wr, ADR_I, DAT_I[8:0] );
- // Reg #36 is MIICOMMAND - implemented separately below
- RegCPUData #( 13 ) U_0_037( MIIADDRESS , 7'd037, 13'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[12:0] );
- RegCPUData #( 16 ) U_0_038( MIITX_DATA , 7'd038, 16'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
-
- // New FC register
- RegCPUData #( 16 ) U_0_041( fc_padtime , 7'd041, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );
-
- // Asserted in first clock of 2-cycle access, negated otherwise
- wire Access = ~ACK_O & STB_I & CYC_I;
-
- // Asserted in first clock of 2-cycle write access, negated otherwise
- assign Wr = Access & WE_I;
-
- // MIICOMMAND register - needs special treatment because of auto-resetting bits
- always @ ( posedge RST_I or posedge CLK_I )
- if ( RST_I )
- MIICOMMAND <= 0;
- else
- begin
- if ( Wr & ( ADR_I == 7'd036 ) )
- // Write access
- MIICOMMAND <= DAT_I;
- else
- begin
- if ( WCtrlDataStart )
- MIICOMMAND[2] <= 0;
- if ( RStatStart )
- MIICOMMAND[1] <= 0;
- end
- end
-
- // MIIRX_DATA register
- always @ ( posedge RST_I or posedge CLK_I )
- if ( RST_I )
- MIIRX_DATA <= 0;
- else
- if ( UpdateMIIRX_DATAReg )
- MIIRX_DATA <= Prsd;
-
- // ACK_O is asserted in second clock of 2-cycle access, negated otherwise
- always @ ( posedge RST_I or posedge CLK_I )
- if ( RST_I )
- ACK_O <= 0;
- else
- ACK_O <= Access;
-
- always @ ( posedge RST_I or posedge CLK_I )
- if(RST_I)
- DAT_O <= 0;
- else
- begin
- DAT_O <=0;
- if ( Access & ~WE_I )
- casez ( ADR_I )
- 7'd00: DAT_O <= Tx_Hwmark;
- 7'd01: DAT_O <= Tx_Lwmark;
- 7'd02: DAT_O <= pause_frame_send_en;
- 7'd03: DAT_O <= pause_quanta_set;
- 7'd04: DAT_O <= IFGset;
- 7'd05: DAT_O <= FullDuplex;
- 7'd06: DAT_O <= MaxRetry;
- 7'd07: DAT_O <= MAC_tx_add_en;
- 7'd08: DAT_O <= MAC_tx_add_prom_data;
- 7'd09: DAT_O <= MAC_tx_add_prom_add;
- 7'd10: DAT_O <= MAC_tx_add_prom_wr;
- 7'd11: DAT_O <= tx_pause_en;
- 7'd12: DAT_O <= fc_hwmark;
- 7'd13: DAT_O <= fc_lwmark;
- 7'd14: DAT_O <= MAC_rx_add_chk_en;
- 7'd15: DAT_O <= MAC_rx_add_prom_data;
- 7'd16: DAT_O <= MAC_rx_add_prom_add;
- 7'd17: DAT_O <= MAC_rx_add_prom_wr;
- 7'd18: DAT_O <= broadcast_filter_en;
- 7'd19: DAT_O <= broadcast_bucket_depth;
- 7'd20: DAT_O <= broadcast_bucket_interval;
- 7'd21: DAT_O <= RX_APPEND_CRC;
- 7'd22: DAT_O <= Rx_Hwmark;
- 7'd23: DAT_O <= Rx_Lwmark;
- 7'd24: DAT_O <= CRC_chk_en;
- 7'd25: DAT_O <= RX_IFG_SET;
- 7'd26: DAT_O <= RX_MAX_LENGTH;
- 7'd27: DAT_O <= RX_MIN_LENGTH;
- 7'd28: DAT_O <= CPU_rd_addr;
- 7'd29: DAT_O <= CPU_rd_apply;
- 7'd30: DAT_O <= CPU_rd_grant;
- 7'd31: DAT_O <= CPU_rd_dout;
- //7'd32: DAT_O <= CPU_rd_dout[31:16];
- 7'd33: DAT_O <= Line_loop_en;
- 7'd34: DAT_O <= Speed;
-
- // New registers for controlling MII interface
- 7'd35: DAT_O <= MIIMODER;
- 7'd36: DAT_O <= MIICOMMAND;
- 7'd37: DAT_O <= MIIADDRESS;
- 7'd38: DAT_O <= MIITX_DATA;
- 7'd39: DAT_O <= MIIRX_DATA;
- 7'd40: DAT_O <= MIISTATUS;
- 7'd41: DAT_O <= fc_padtime;
- endcase
- end
-
-endmodule
-
-module RegCPUData(
- RegOut,
- RegAddr,
- RegInit,
-
- Reset,
- Clk,
- Wr,
- Addr,
- WrData
-);
-
- parameter WIDTH = 16;
-
- output reg [WIDTH-1:0] RegOut;
- input [6:0] RegAddr;
- input [WIDTH-1:0] RegInit;
-
- input Reset;
- input Clk;
- input Wr;
- input [6:0] Addr;
- input [WIDTH-1:0] WrData;
-
- always @( posedge Reset or posedge Clk )
- if ( Reset )
- RegOut <= RegInit;
- else
- if ( Wr && ( Addr == RegAddr ) )
- RegOut <= WrData;
-
-endmodule
diff --git a/eth/rtl/verilog/TECH/eth_clk_div2.v b/eth/rtl/verilog/TECH/eth_clk_div2.v deleted file mode 100644 index 994907d44..000000000 --- a/eth/rtl/verilog/TECH/eth_clk_div2.v +++ /dev/null @@ -1,71 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// eth_clk_div2.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: CLK_DIV2.v,v $
-// Revision 1.3 2006/01/19 14:07:56 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:20 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-
-//////////////////////////////////////////////////////////////////////
-// This file can only used for simulation .
-// You need to replace it with your own element according to technology
-//////////////////////////////////////////////////////////////////////
-
-module eth_clk_div2 (
- input Reset,
- input IN,
- output reg OUT
-);
-
-always @ (posedge IN or posedge Reset)
- if (Reset)
- OUT <= 0;
- else
- OUT <= ~OUT;
-
-endmodule
diff --git a/eth/rtl/verilog/TECH/eth_clk_switch.v b/eth/rtl/verilog/TECH/eth_clk_switch.v deleted file mode 100644 index c5375743f..000000000 --- a/eth/rtl/verilog/TECH/eth_clk_switch.v +++ /dev/null @@ -1,81 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// eth_clk_switch.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
-//// ////
-//// Author(s): ////
-//// - Jon Gao (gaojon@yahoo.com) ////
-//// ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: CLK_SWITCH.v,v $
-// Revision 1.3 2006/01/19 14:07:56 maverickist
-// verification is complete.
-//
-// Revision 1.2 2005/12/16 06:44:20 Administrator
-// replaced tab with space.
-// passed 9.6k length frame test.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-
-`include "header.vh"
-
-//////////////////////////////////////////////////////////////////////
-// This file can only used for simulation .
-// You need to replace it with your own element according to technology
-//////////////////////////////////////////////////////////////////////
-module eth_clk_switch (
- input IN_0,
- input IN_1,
- input SW,
- output OUT
-);
-
-`ifdef MAC_TARGET_XILINX
-
- BUFGMUX U_BUFGMUX (
- .O ( OUT ),
- .I0( IN_0 ),
- .I1( IN_1 ),
- .S ( SW )
- );
-
-`else
-
- assign OUT = SW ? IN_1 : IN_0;
-
-`endif
-
-endmodule
diff --git a/eth/rtl/verilog/TECH/xilinx/BUFGMUX.v b/eth/rtl/verilog/TECH/xilinx/BUFGMUX.v deleted file mode 100644 index f5bb4a74a..000000000 --- a/eth/rtl/verilog/TECH/xilinx/BUFGMUX.v +++ /dev/null @@ -1,64 +0,0 @@ -// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/unisims/BUFGMUX.v,v 1.9.34.2 2005/10/21 20:45:30 wloo Exp $ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 1995/2004 Xilinx, Inc. -// All Right Reserved. -/////////////////////////////////////////////////////////////////////////////// -// ____ ____ -// / /\/ / -// /___/ \ / Vendor : Xilinx -// \ \ \/ Version : 7.1i (H.19) -// \ \ Description : Xilinx Functional Simulation Library Component -// / / Global Clock Mux Buffer with Output State 0 -// /___/ /\ Filename : BUFGMUX.v -// \ \ / \ Timestamp : Thu Mar 25 16:42:14 PST 2004 -// \___\/\___\ -// -// Revision: -// 03/23/04 - Initial version. - -`timescale 100 ps / 10 ps - -module BUFGMUX (O, I0, I1, S); - - output O; - - input I0, I1, S; - - reg q0, q1; - reg q0_enable, q1_enable; - - tri0 GSR = glbl.GSR; - - bufif1 B0 (O, I0, q0); - bufif1 B1 (O, I1, q1); - pulldown P1 (O); - - always @(GSR or I0 or S or q0_enable) - if (GSR) - q0 <= 1; - else if (!I0) - q0 <= !S && q0_enable; - - always @(GSR or I1 or S or q1_enable) - if (GSR) - q1 <= 0; - else if (!I1) - q1 <= S && q1_enable; - - always @(GSR or q1 or I0) - if (GSR) - q0_enable <= 1; - else if (q1) - q0_enable <= 0; - else if (I0) - q0_enable <= !q1; - - always @(GSR or q0 or I1) - if (GSR) - q1_enable <= 0; - else if (q0) - q1_enable <= 0; - else if (I1) - q1_enable <= !q0; - -endmodule diff --git a/eth/rtl/verilog/TECH/xilinx/RAMB16_S36_S36.v b/eth/rtl/verilog/TECH/xilinx/RAMB16_S36_S36.v deleted file mode 100644 index 80545a9b8..000000000 --- a/eth/rtl/verilog/TECH/xilinx/RAMB16_S36_S36.v +++ /dev/null @@ -1,2204 +0,0 @@ -// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/unisims/RAMB16_S36_S36.v,v 1.9 2005/03/14 22:54:41 wloo Exp $ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 1995/2005 Xilinx, Inc. -// All Right Reserved. -/////////////////////////////////////////////////////////////////////////////// -// ____ ____ -// / /\/ / -// /___/ \ / Vendor : Xilinx -// \ \ \/ Version : 8.1i (I.13) -// \ \ Description : Xilinx Functional Simulation Library Component -// / / 16K-Bit Data and 2K-Bit Parity Dual Port Block RAM -// /___/ /\ Filename : RAMB16_S36_S36.v -// \ \ / \ Timestamp : Thu Mar 10 16:43:36 PST 2005 -// \___\/\___\ -// -// Revision: -// 03/23/04 - Initial version. -// End Revision - -`ifdef legacy_model - -`timescale 1 ps / 1 ps - -module RAMB16_S36_S36 (DOA, DOB, DOPA, DOPB, ADDRA, ADDRB, CLKA, CLKB, DIA, DIB, DIPA, DIPB, ENA, ENB, SSRA, SSRB, WEA, WEB); - - parameter INIT_A = 36'h0; - parameter INIT_B = 36'h0; - parameter SRVAL_A = 36'h0; - parameter SRVAL_B = 36'h0; - parameter WRITE_MODE_A = "WRITE_FIRST"; - parameter WRITE_MODE_B = "WRITE_FIRST"; - parameter SIM_COLLISION_CHECK = "ALL"; - localparam SETUP_ALL = 1000; - localparam SETUP_READ_FIRST = 3000; - - parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - - output [31:0] DOA; - output [3:0] DOPA; - reg [31:0] doa_out; - reg [3:0] dopa_out; - wire doa_out0, doa_out1, doa_out2, doa_out3, doa_out4, doa_out5, doa_out6, doa_out7, doa_out8, doa_out9, doa_out10, doa_out11, doa_out12, doa_out13, doa_out14, doa_out15, doa_out16, doa_out17, doa_out18, doa_out19, doa_out20, doa_out21, doa_out22, doa_out23, doa_out24, doa_out25, doa_out26, doa_out27, doa_out28, doa_out29, doa_out30, doa_out31; - wire dopa0_out, dopa1_out, dopa2_out, dopa3_out; - - input [8:0] ADDRA; - input [31:0] DIA; - input [3:0] DIPA; - input ENA, CLKA, WEA, SSRA; - - output [31:0] DOB; - output [3:0] DOPB; - reg [31:0] dob_out; - reg [3:0] dopb_out; - wire dob_out0, dob_out1, dob_out2, dob_out3, dob_out4, dob_out5, dob_out6, dob_out7, dob_out8, dob_out9, dob_out10, dob_out11, dob_out12, dob_out13, dob_out14, dob_out15, dob_out16, dob_out17, dob_out18, dob_out19, dob_out20, dob_out21, dob_out22, dob_out23, dob_out24, dob_out25, dob_out26, dob_out27, dob_out28, dob_out29, dob_out30, dob_out31; - wire dopb0_out, dopb1_out, dopb2_out, dopb3_out; - - input [8:0] ADDRB; - input [31:0] DIB; - input [3:0] DIPB; - input ENB, CLKB, WEB, SSRB; - - reg [18431:0] mem; - reg [8:0] count; - reg [1:0] wr_mode_a, wr_mode_b; - - reg [5:0] dmi, dbi; - reg [5:0] pmi, pbi; - - wire [8:0] addra_int; - reg [8:0] addra_reg; - wire [31:0] dia_int; - wire [3:0] dipa_int; - wire ena_int, clka_int, wea_int, ssra_int; - reg ena_reg, wea_reg, ssra_reg; - wire [8:0] addrb_int; - reg [8:0] addrb_reg; - wire [31:0] dib_int; - wire [3:0] dipb_int; - wire enb_int, clkb_int, web_int, ssrb_int; - reg display_flag; - reg enb_reg, web_reg, ssrb_reg; - - time time_clka, time_clkb; - time time_clka_clkb; - time time_clkb_clka; - - reg setup_all_a_b; - reg setup_all_b_a; - reg setup_zero; - reg setup_rf_a_b; - reg setup_rf_b_a; - reg [1:0] data_collision, data_collision_a_b, data_collision_b_a; - reg memory_collision, memory_collision_a_b, memory_collision_b_a; - reg address_collision, address_collision_a_b, address_collision_b_a; - reg change_clka; - reg change_clkb; - - wire [14:0] data_addra_int; - wire [14:0] data_addra_reg; - wire [14:0] data_addrb_int; - wire [14:0] data_addrb_reg; - wire [15:0] parity_addra_int; - wire [15:0] parity_addra_reg; - wire [15:0] parity_addrb_int; - wire [15:0] parity_addrb_reg; - - tri0 GSR = glbl.GSR; - - always @(GSR) - if (GSR) begin - assign doa_out = INIT_A[31:0]; - assign dopa_out = INIT_A[35:32]; - assign dob_out = INIT_B[31:0]; - assign dopb_out = INIT_B[35:32]; - end - else begin - deassign doa_out; - deassign dopa_out; - deassign dob_out; - deassign dopb_out; - end - - buf b_doa_out0 (doa_out0, doa_out[0]); - buf b_doa_out1 (doa_out1, doa_out[1]); - buf b_doa_out2 (doa_out2, doa_out[2]); - buf b_doa_out3 (doa_out3, doa_out[3]); - buf b_doa_out4 (doa_out4, doa_out[4]); - buf b_doa_out5 (doa_out5, doa_out[5]); - buf b_doa_out6 (doa_out6, doa_out[6]); - buf b_doa_out7 (doa_out7, doa_out[7]); - buf b_doa_out8 (doa_out8, doa_out[8]); - buf b_doa_out9 (doa_out9, doa_out[9]); - buf b_doa_out10 (doa_out10, doa_out[10]); - buf b_doa_out11 (doa_out11, doa_out[11]); - buf b_doa_out12 (doa_out12, doa_out[12]); - buf b_doa_out13 (doa_out13, doa_out[13]); - buf b_doa_out14 (doa_out14, doa_out[14]); - buf b_doa_out15 (doa_out15, doa_out[15]); - buf b_doa_out16 (doa_out16, doa_out[16]); - buf b_doa_out17 (doa_out17, doa_out[17]); - buf b_doa_out18 (doa_out18, doa_out[18]); - buf b_doa_out19 (doa_out19, doa_out[19]); - buf b_doa_out20 (doa_out20, doa_out[20]); - buf b_doa_out21 (doa_out21, doa_out[21]); - buf b_doa_out22 (doa_out22, doa_out[22]); - buf b_doa_out23 (doa_out23, doa_out[23]); - buf b_doa_out24 (doa_out24, doa_out[24]); - buf b_doa_out25 (doa_out25, doa_out[25]); - buf b_doa_out26 (doa_out26, doa_out[26]); - buf b_doa_out27 (doa_out27, doa_out[27]); - buf b_doa_out28 (doa_out28, doa_out[28]); - buf b_doa_out29 (doa_out29, doa_out[29]); - buf b_doa_out30 (doa_out30, doa_out[30]); - buf b_doa_out31 (doa_out31, doa_out[31]); - buf b_dopa_out0 (dopa_out0, dopa_out[0]); - buf b_dopa_out1 (dopa_out1, dopa_out[1]); - buf b_dopa_out2 (dopa_out2, dopa_out[2]); - buf b_dopa_out3 (dopa_out3, dopa_out[3]); - buf b_dob_out0 (dob_out0, dob_out[0]); - buf b_dob_out1 (dob_out1, dob_out[1]); - buf b_dob_out2 (dob_out2, dob_out[2]); - buf b_dob_out3 (dob_out3, dob_out[3]); - buf b_dob_out4 (dob_out4, dob_out[4]); - buf b_dob_out5 (dob_out5, dob_out[5]); - buf b_dob_out6 (dob_out6, dob_out[6]); - buf b_dob_out7 (dob_out7, dob_out[7]); - buf b_dob_out8 (dob_out8, dob_out[8]); - buf b_dob_out9 (dob_out9, dob_out[9]); - buf b_dob_out10 (dob_out10, dob_out[10]); - buf b_dob_out11 (dob_out11, dob_out[11]); - buf b_dob_out12 (dob_out12, dob_out[12]); - buf b_dob_out13 (dob_out13, dob_out[13]); - buf b_dob_out14 (dob_out14, dob_out[14]); - buf b_dob_out15 (dob_out15, dob_out[15]); - buf b_dob_out16 (dob_out16, dob_out[16]); - buf b_dob_out17 (dob_out17, dob_out[17]); - buf b_dob_out18 (dob_out18, dob_out[18]); - buf b_dob_out19 (dob_out19, dob_out[19]); - buf b_dob_out20 (dob_out20, dob_out[20]); - buf b_dob_out21 (dob_out21, dob_out[21]); - buf b_dob_out22 (dob_out22, dob_out[22]); - buf b_dob_out23 (dob_out23, dob_out[23]); - buf b_dob_out24 (dob_out24, dob_out[24]); - buf b_dob_out25 (dob_out25, dob_out[25]); - buf b_dob_out26 (dob_out26, dob_out[26]); - buf b_dob_out27 (dob_out27, dob_out[27]); - buf b_dob_out28 (dob_out28, dob_out[28]); - buf b_dob_out29 (dob_out29, dob_out[29]); - buf b_dob_out30 (dob_out30, dob_out[30]); - buf b_dob_out31 (dob_out31, dob_out[31]); - buf b_dopb_out0 (dopb_out0, dopb_out[0]); - buf b_dopb_out1 (dopb_out1, dopb_out[1]); - buf b_dopb_out2 (dopb_out2, dopb_out[2]); - buf b_dopb_out3 (dopb_out3, dopb_out[3]); - - buf b_doa0 (DOA[0], doa_out0); - buf b_doa1 (DOA[1], doa_out1); - buf b_doa2 (DOA[2], doa_out2); - buf b_doa3 (DOA[3], doa_out3); - buf b_doa4 (DOA[4], doa_out4); - buf b_doa5 (DOA[5], doa_out5); - buf b_doa6 (DOA[6], doa_out6); - buf b_doa7 (DOA[7], doa_out7); - buf b_doa8 (DOA[8], doa_out8); - buf b_doa9 (DOA[9], doa_out9); - buf b_doa10 (DOA[10], doa_out10); - buf b_doa11 (DOA[11], doa_out11); - buf b_doa12 (DOA[12], doa_out12); - buf b_doa13 (DOA[13], doa_out13); - buf b_doa14 (DOA[14], doa_out14); - buf b_doa15 (DOA[15], doa_out15); - buf b_doa16 (DOA[16], doa_out16); - buf b_doa17 (DOA[17], doa_out17); - buf b_doa18 (DOA[18], doa_out18); - buf b_doa19 (DOA[19], doa_out19); - buf b_doa20 (DOA[20], doa_out20); - buf b_doa21 (DOA[21], doa_out21); - buf b_doa22 (DOA[22], doa_out22); - buf b_doa23 (DOA[23], doa_out23); - buf b_doa24 (DOA[24], doa_out24); - buf b_doa25 (DOA[25], doa_out25); - buf b_doa26 (DOA[26], doa_out26); - buf b_doa27 (DOA[27], doa_out27); - buf b_doa28 (DOA[28], doa_out28); - buf b_doa29 (DOA[29], doa_out29); - buf b_doa30 (DOA[30], doa_out30); - buf b_doa31 (DOA[31], doa_out31); - buf b_dopa0 (DOPA[0], dopa_out0); - buf b_dopa1 (DOPA[1], dopa_out1); - buf b_dopa2 (DOPA[2], dopa_out2); - buf b_dopa3 (DOPA[3], dopa_out3); - buf b_dob0 (DOB[0], dob_out0); - buf b_dob1 (DOB[1], dob_out1); - buf b_dob2 (DOB[2], dob_out2); - buf b_dob3 (DOB[3], dob_out3); - buf b_dob4 (DOB[4], dob_out4); - buf b_dob5 (DOB[5], dob_out5); - buf b_dob6 (DOB[6], dob_out6); - buf b_dob7 (DOB[7], dob_out7); - buf b_dob8 (DOB[8], dob_out8); - buf b_dob9 (DOB[9], dob_out9); - buf b_dob10 (DOB[10], dob_out10); - buf b_dob11 (DOB[11], dob_out11); - buf b_dob12 (DOB[12], dob_out12); - buf b_dob13 (DOB[13], dob_out13); - buf b_dob14 (DOB[14], dob_out14); - buf b_dob15 (DOB[15], dob_out15); - buf b_dob16 (DOB[16], dob_out16); - buf b_dob17 (DOB[17], dob_out17); - buf b_dob18 (DOB[18], dob_out18); - buf b_dob19 (DOB[19], dob_out19); - buf b_dob20 (DOB[20], dob_out20); - buf b_dob21 (DOB[21], dob_out21); - buf b_dob22 (DOB[22], dob_out22); - buf b_dob23 (DOB[23], dob_out23); - buf b_dob24 (DOB[24], dob_out24); - buf b_dob25 (DOB[25], dob_out25); - buf b_dob26 (DOB[26], dob_out26); - buf b_dob27 (DOB[27], dob_out27); - buf b_dob28 (DOB[28], dob_out28); - buf b_dob29 (DOB[29], dob_out29); - buf b_dob30 (DOB[30], dob_out30); - buf b_dob31 (DOB[31], dob_out31); - buf b_dopb0 (DOPB[0], dopb_out0); - buf b_dopb1 (DOPB[1], dopb_out1); - buf b_dopb2 (DOPB[2], dopb_out2); - buf b_dopb3 (DOPB[3], dopb_out3); - - buf b_addra_0 (addra_int[0], ADDRA[0]); - buf b_addra_1 (addra_int[1], ADDRA[1]); - buf b_addra_2 (addra_int[2], ADDRA[2]); - buf b_addra_3 (addra_int[3], ADDRA[3]); - buf b_addra_4 (addra_int[4], ADDRA[4]); - buf b_addra_5 (addra_int[5], ADDRA[5]); - buf b_addra_6 (addra_int[6], ADDRA[6]); - buf b_addra_7 (addra_int[7], ADDRA[7]); - buf b_addra_8 (addra_int[8], ADDRA[8]); - buf b_dia_0 (dia_int[0], DIA[0]); - buf b_dia_1 (dia_int[1], DIA[1]); - buf b_dia_2 (dia_int[2], DIA[2]); - buf b_dia_3 (dia_int[3], DIA[3]); - buf b_dia_4 (dia_int[4], DIA[4]); - buf b_dia_5 (dia_int[5], DIA[5]); - buf b_dia_6 (dia_int[6], DIA[6]); - buf b_dia_7 (dia_int[7], DIA[7]); - buf b_dia_8 (dia_int[8], DIA[8]); - buf b_dia_9 (dia_int[9], DIA[9]); - buf b_dia_10 (dia_int[10], DIA[10]); - buf b_dia_11 (dia_int[11], DIA[11]); - buf b_dia_12 (dia_int[12], DIA[12]); - buf b_dia_13 (dia_int[13], DIA[13]); - buf b_dia_14 (dia_int[14], DIA[14]); - buf b_dia_15 (dia_int[15], DIA[15]); - buf b_dia_16 (dia_int[16], DIA[16]); - buf b_dia_17 (dia_int[17], DIA[17]); - buf b_dia_18 (dia_int[18], DIA[18]); - buf b_dia_19 (dia_int[19], DIA[19]); - buf b_dia_20 (dia_int[20], DIA[20]); - buf b_dia_21 (dia_int[21], DIA[21]); - buf b_dia_22 (dia_int[22], DIA[22]); - buf b_dia_23 (dia_int[23], DIA[23]); - buf b_dia_24 (dia_int[24], DIA[24]); - buf b_dia_25 (dia_int[25], DIA[25]); - buf b_dia_26 (dia_int[26], DIA[26]); - buf b_dia_27 (dia_int[27], DIA[27]); - buf b_dia_28 (dia_int[28], DIA[28]); - buf b_dia_29 (dia_int[29], DIA[29]); - buf b_dia_30 (dia_int[30], DIA[30]); - buf b_dia_31 (dia_int[31], DIA[31]); - buf b_dipa_0 (dipa_int[0], DIPA[0]); - buf b_dipa_1 (dipa_int[1], DIPA[1]); - buf b_dipa_2 (dipa_int[2], DIPA[2]); - buf b_dipa_3 (dipa_int[3], DIPA[3]); - buf b_ena (ena_int, ENA); - buf b_clka (clka_int, CLKA); - buf b_ssra (ssra_int, SSRA); - buf b_wea (wea_int, WEA); - buf b_addrb_0 (addrb_int[0], ADDRB[0]); - buf b_addrb_1 (addrb_int[1], ADDRB[1]); - buf b_addrb_2 (addrb_int[2], ADDRB[2]); - buf b_addrb_3 (addrb_int[3], ADDRB[3]); - buf b_addrb_4 (addrb_int[4], ADDRB[4]); - buf b_addrb_5 (addrb_int[5], ADDRB[5]); - buf b_addrb_6 (addrb_int[6], ADDRB[6]); - buf b_addrb_7 (addrb_int[7], ADDRB[7]); - buf b_addrb_8 (addrb_int[8], ADDRB[8]); - buf b_dib_0 (dib_int[0], DIB[0]); - buf b_dib_1 (dib_int[1], DIB[1]); - buf b_dib_2 (dib_int[2], DIB[2]); - buf b_dib_3 (dib_int[3], DIB[3]); - buf b_dib_4 (dib_int[4], DIB[4]); - buf b_dib_5 (dib_int[5], DIB[5]); - buf b_dib_6 (dib_int[6], DIB[6]); - buf b_dib_7 (dib_int[7], DIB[7]); - buf b_dib_8 (dib_int[8], DIB[8]); - buf b_dib_9 (dib_int[9], DIB[9]); - buf b_dib_10 (dib_int[10], DIB[10]); - buf b_dib_11 (dib_int[11], DIB[11]); - buf b_dib_12 (dib_int[12], DIB[12]); - buf b_dib_13 (dib_int[13], DIB[13]); - buf b_dib_14 (dib_int[14], DIB[14]); - buf b_dib_15 (dib_int[15], DIB[15]); - buf b_dib_16 (dib_int[16], DIB[16]); - buf b_dib_17 (dib_int[17], DIB[17]); - buf b_dib_18 (dib_int[18], DIB[18]); - buf b_dib_19 (dib_int[19], DIB[19]); - buf b_dib_20 (dib_int[20], DIB[20]); - buf b_dib_21 (dib_int[21], DIB[21]); - buf b_dib_22 (dib_int[22], DIB[22]); - buf b_dib_23 (dib_int[23], DIB[23]); - buf b_dib_24 (dib_int[24], DIB[24]); - buf b_dib_25 (dib_int[25], DIB[25]); - buf b_dib_26 (dib_int[26], DIB[26]); - buf b_dib_27 (dib_int[27], DIB[27]); - buf b_dib_28 (dib_int[28], DIB[28]); - buf b_dib_29 (dib_int[29], DIB[29]); - buf b_dib_30 (dib_int[30], DIB[30]); - buf b_dib_31 (dib_int[31], DIB[31]); - buf b_dipb_0 (dipb_int[0], DIPB[0]); - buf b_dipb_1 (dipb_int[1], DIPB[1]); - buf b_dipb_2 (dipb_int[2], DIPB[2]); - buf b_dipb_3 (dipb_int[3], DIPB[3]); - buf b_enb (enb_int, ENB); - buf b_clkb (clkb_int, CLKB); - buf b_ssrb (ssrb_int, SSRB); - buf b_web (web_int, WEB); - - initial begin - for (count = 0; count < 256; count = count + 1) begin - mem[count] <= INIT_00[count]; - mem[256 * 1 + count] <= INIT_01[count]; - mem[256 * 2 + count] <= INIT_02[count]; - mem[256 * 3 + count] <= INIT_03[count]; - mem[256 * 4 + count] <= INIT_04[count]; - mem[256 * 5 + count] <= INIT_05[count]; - mem[256 * 6 + count] <= INIT_06[count]; - mem[256 * 7 + count] <= INIT_07[count]; - mem[256 * 8 + count] <= INIT_08[count]; - mem[256 * 9 + count] <= INIT_09[count]; - mem[256 * 10 + count] <= INIT_0A[count]; - mem[256 * 11 + count] <= INIT_0B[count]; - mem[256 * 12 + count] <= INIT_0C[count]; - mem[256 * 13 + count] <= INIT_0D[count]; - mem[256 * 14 + count] <= INIT_0E[count]; - mem[256 * 15 + count] <= INIT_0F[count]; - mem[256 * 16 + count] <= INIT_10[count]; - mem[256 * 17 + count] <= INIT_11[count]; - mem[256 * 18 + count] <= INIT_12[count]; - mem[256 * 19 + count] <= INIT_13[count]; - mem[256 * 20 + count] <= INIT_14[count]; - mem[256 * 21 + count] <= INIT_15[count]; - mem[256 * 22 + count] <= INIT_16[count]; - mem[256 * 23 + count] <= INIT_17[count]; - mem[256 * 24 + count] <= INIT_18[count]; - mem[256 * 25 + count] <= INIT_19[count]; - mem[256 * 26 + count] <= INIT_1A[count]; - mem[256 * 27 + count] <= INIT_1B[count]; - mem[256 * 28 + count] <= INIT_1C[count]; - mem[256 * 29 + count] <= INIT_1D[count]; - mem[256 * 30 + count] <= INIT_1E[count]; - mem[256 * 31 + count] <= INIT_1F[count]; - mem[256 * 32 + count] <= INIT_20[count]; - mem[256 * 33 + count] <= INIT_21[count]; - mem[256 * 34 + count] <= INIT_22[count]; - mem[256 * 35 + count] <= INIT_23[count]; - mem[256 * 36 + count] <= INIT_24[count]; - mem[256 * 37 + count] <= INIT_25[count]; - mem[256 * 38 + count] <= INIT_26[count]; - mem[256 * 39 + count] <= INIT_27[count]; - mem[256 * 40 + count] <= INIT_28[count]; - mem[256 * 41 + count] <= INIT_29[count]; - mem[256 * 42 + count] <= INIT_2A[count]; - mem[256 * 43 + count] <= INIT_2B[count]; - mem[256 * 44 + count] <= INIT_2C[count]; - mem[256 * 45 + count] <= INIT_2D[count]; - mem[256 * 46 + count] <= INIT_2E[count]; - mem[256 * 47 + count] <= INIT_2F[count]; - mem[256 * 48 + count] <= INIT_30[count]; - mem[256 * 49 + count] <= INIT_31[count]; - mem[256 * 50 + count] <= INIT_32[count]; - mem[256 * 51 + count] <= INIT_33[count]; - mem[256 * 52 + count] <= INIT_34[count]; - mem[256 * 53 + count] <= INIT_35[count]; - mem[256 * 54 + count] <= INIT_36[count]; - mem[256 * 55 + count] <= INIT_37[count]; - mem[256 * 56 + count] <= INIT_38[count]; - mem[256 * 57 + count] <= INIT_39[count]; - mem[256 * 58 + count] <= INIT_3A[count]; - mem[256 * 59 + count] <= INIT_3B[count]; - mem[256 * 60 + count] <= INIT_3C[count]; - mem[256 * 61 + count] <= INIT_3D[count]; - mem[256 * 62 + count] <= INIT_3E[count]; - mem[256 * 63 + count] <= INIT_3F[count]; - mem[256 * 64 + count] <= INITP_00[count]; - mem[256 * 65 + count] <= INITP_01[count]; - mem[256 * 66 + count] <= INITP_02[count]; - mem[256 * 67 + count] <= INITP_03[count]; - mem[256 * 68 + count] <= INITP_04[count]; - mem[256 * 69 + count] <= INITP_05[count]; - mem[256 * 70 + count] <= INITP_06[count]; - mem[256 * 71 + count] <= INITP_07[count]; - end - address_collision <= 0; - address_collision_a_b <= 0; - address_collision_b_a <= 0; - change_clka <= 0; - change_clkb <= 0; - data_collision <= 0; - data_collision_a_b <= 0; - data_collision_b_a <= 0; - memory_collision <= 0; - memory_collision_a_b <= 0; - memory_collision_b_a <= 0; - setup_all_a_b <= 0; - setup_all_b_a <= 0; - setup_zero <= 0; - setup_rf_a_b <= 0; - setup_rf_b_a <= 0; - end - - assign data_addra_int = addra_int * 32; - assign data_addra_reg = addra_reg * 32; - assign data_addrb_int = addrb_int * 32; - assign data_addrb_reg = addrb_reg * 32; - assign parity_addra_int = 16384 + addra_int * 4; - assign parity_addra_reg = 16384 + addra_reg * 4; - assign parity_addrb_int = 16384 + addrb_int * 4; - assign parity_addrb_reg = 16384 + addrb_reg * 4; - - - initial begin - - display_flag = 1; - - case (SIM_COLLISION_CHECK) - - "NONE" : begin - assign setup_all_a_b = 1'b0; - assign setup_all_b_a = 1'b0; - assign setup_zero = 1'b0; - assign setup_rf_a_b = 1'b0; - assign setup_rf_b_a = 1'b0; - assign display_flag = 0; - end - "WARNING_ONLY" : begin - assign data_collision = 2'b00; - assign data_collision_a_b = 2'b00; - assign data_collision_b_a = 2'b00; - assign memory_collision = 1'b0; - assign memory_collision_a_b = 1'b0; - assign memory_collision_b_a = 1'b0; - end - "GENERATE_X_ONLY" : begin - assign display_flag = 0; - end - "ALL" : ; - default : begin - $display("Attribute Syntax Error : The Attribute SIM_COLLISION_CHECK on RAMB16_S36_S36 instance %m is set to %s. Legal values for this attribute are ALL, NONE, WARNING_ONLY or GENERATE_X_ONLY.", SIM_COLLISION_CHECK); - $finish; - end - - endcase // case(SIM_COLLISION_CHECK) - - end // initial begin - - - always @(posedge clka_int) begin - time_clka = $time; - #0 time_clkb_clka = time_clka - time_clkb; - change_clka = ~change_clka; - end - - always @(posedge clkb_int) begin - time_clkb = $time; - #0 time_clka_clkb = time_clkb - time_clka; - change_clkb = ~change_clkb; - end - - always @(change_clkb) begin - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_ALL)) - setup_all_a_b = 1; - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_READ_FIRST)) - setup_rf_a_b = 1; - end - - always @(change_clka) begin - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_ALL)) - setup_all_b_a = 1; - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_READ_FIRST)) - setup_rf_b_a = 1; - end - - always @(change_clkb or change_clka) begin - if ((time_clkb_clka == 0) && (time_clka_clkb == 0)) - setup_zero = 1; - end - - always @(posedge setup_zero) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_int[14:5] == data_addrb_int[14:5])) - memory_collision <= 1; - end - - always @(posedge setup_all_a_b or posedge setup_rf_a_b) begin - if ((ena_reg == 1) && (wea_reg == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_reg[14:5] == data_addrb_int[14:5])) - memory_collision_a_b <= 1; - end - - always @(posedge setup_all_b_a or posedge setup_rf_b_a) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_reg == 1) && (web_reg == 1) && - (data_addra_int[14:5] == data_addrb_reg[14:5])) - memory_collision_b_a <= 1; - end - - always @(posedge setup_all_a_b) begin - if (data_addra_reg[14:5] == data_addrb_int[14:5]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) - 6'b000011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b010011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b010111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b011011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b100011 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_a_b <= 0; - end - - - always @(posedge setup_all_b_a) begin - if (data_addra_int[14:5] == data_addrb_reg[14:5]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) - 6'b000011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b000111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b001011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b010111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b011011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b001001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b011001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b101001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_b_a <= 0; - end - - - always @(posedge setup_zero) begin - if (data_addra_int[14:5] == data_addrb_int[14:5]) begin - if ((ena_int == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_int}) - 6'b000011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision <= 2'b01; display_wa_rb; end - endcase - end - end - setup_zero <= 0; - end - - task display_ra_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S36_S36:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port A while a write was requested to the same address on Port B. The write will be successful however the read value on Port A is unknown until the next CLKA cycle.", $time/1000.0, addra_int); - end - endtask - - task display_wa_rb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S36_S36:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port B while a write was requested to the same address on Port A. The write will be successful however the read value on Port B is unknown until the next CLKB cycle.", $time/1000.0, addrb_int); - end - endtask - - task display_wa_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S36_S36:%m at simulation time %.3f ns\nA write was requested to the same address simultaneously at both Port A and Port B of the RAM. The contents written to the RAM at address location %h (hex) of Port A and address location %h (hex) of Port B are unknown.", $time/1000.0, addra_int, addrb_int); - end - endtask - - - always @(posedge setup_rf_a_b) begin - if (data_addra_reg[14:5] == data_addrb_int[14:5]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) -// 6'b000011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b001011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b010011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b100011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b100111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b101011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b001001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b011001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b101001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b010010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b010110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b011010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b100010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_a_b <= 0; - end - - - always @(posedge setup_rf_b_a) begin - if (data_addra_int[14:5] == data_addrb_reg[14:5]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) -// 6'b000011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b000111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b001011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b010011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b010111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b011011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b100011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end -// 6'b101011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b001001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b011001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b101001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_b_a <= 0; - end - - - always @(posedge clka_int) begin - addra_reg <= addra_int; - ena_reg <= ena_int; - ssra_reg <= ssra_int; - wea_reg <= wea_int; - end - - always @(posedge clkb_int) begin - addrb_reg <= addrb_int; - enb_reg <= enb_int; - ssrb_reg <= ssrb_int; - web_reg <= web_int; - end - - // Data - always @(posedge memory_collision) begin - for (dmi = 0; dmi < 32; dmi = dmi + 1) begin - mem[data_addra_int + dmi] <= 1'bX; - end - memory_collision <= 0; - end - - always @(posedge memory_collision_a_b) begin - for (dmi = 0; dmi < 32; dmi = dmi + 1) begin - mem[data_addra_reg + dmi] <= 1'bX; - end - memory_collision_a_b <= 0; - end - - always @(posedge memory_collision_b_a) begin - for (dmi = 0; dmi < 32; dmi = dmi + 1) begin - mem[data_addra_int + dmi] <= 1'bX; - end - memory_collision_b_a <= 0; - end - - always @(posedge data_collision[1]) begin - if (ssra_int == 0) begin - doa_out <= 32'bX; - end - data_collision[1] <= 0; - end - - always @(posedge data_collision[0]) begin - if (ssrb_int == 0) begin - dob_out <= 32'bX; - end - data_collision[0] <= 0; - end - - always @(posedge data_collision_a_b[1]) begin - if (ssra_reg == 0) begin - doa_out <= 32'bX; - end - data_collision_a_b[1] <= 0; - end - - always @(posedge data_collision_a_b[0]) begin - if (ssrb_int == 0) begin - dob_out <= 32'bX; - end - data_collision_a_b[0] <= 0; - end - - always @(posedge data_collision_b_a[1]) begin - if (ssra_int == 0) begin - doa_out <= 32'bX; - end - data_collision_b_a[1] <= 0; - end - - always @(posedge data_collision_b_a[0]) begin - if (ssrb_reg == 0) begin - dob_out <= 32'bX; - end - data_collision_b_a[0] <= 0; - end - - - // Parity - always @(posedge memory_collision) begin - for (pmi = 0; pmi < 4; pmi = pmi + 1) begin - mem[parity_addra_int + pmi] <= 1'bX; - end - end - - always @(posedge memory_collision_a_b) begin - for (pmi = 0; pmi < 4; pmi = pmi + 1) begin - mem[parity_addra_reg + pmi] <= 1'bX; - end - end - - always @(posedge memory_collision_b_a) begin - for (pmi = 0; pmi < 4; pmi = pmi + 1) begin - mem[parity_addra_int + pmi] <= 1'bX; - end - end - - always @(posedge data_collision[1]) begin - if (ssra_int == 0) begin - dopa_out <= 4'bX; - end - end - - always @(posedge data_collision[0]) begin - if (ssrb_int == 0) begin - dopb_out <= 4'bX; - end - end - - always @(posedge data_collision_a_b[1]) begin - if (ssra_reg == 0) begin - dopa_out <= 4'bX; - end - end - - always @(posedge data_collision_a_b[0]) begin - if (ssrb_int == 0) begin - dopb_out <= 4'bX; - end - end - - always @(posedge data_collision_b_a[1]) begin - if (ssra_int == 0) begin - dopa_out <= 4'bX; - end - end - - always @(posedge data_collision_b_a[0]) begin - if (ssrb_reg == 0) begin - dopb_out <= 4'bX; - end - end - - - initial begin - case (WRITE_MODE_A) - "WRITE_FIRST" : wr_mode_a <= 2'b00; - "READ_FIRST" : wr_mode_a <= 2'b01; - "NO_CHANGE" : wr_mode_a <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_A on RAMB16_S36_S36 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_A); - $finish; - end - endcase - end - - initial begin - case (WRITE_MODE_B) - "WRITE_FIRST" : wr_mode_b <= 2'b00; - "READ_FIRST" : wr_mode_b <= 2'b01; - "NO_CHANGE" : wr_mode_b <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_B on RAMB16_S36_S36 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_B); - $finish; - end - endcase - end - - // Port A - always @(posedge clka_int) begin - if (ena_int == 1'b1) begin - if (ssra_int == 1'b1) begin - doa_out[0] <= SRVAL_A[0]; - doa_out[1] <= SRVAL_A[1]; - doa_out[2] <= SRVAL_A[2]; - doa_out[3] <= SRVAL_A[3]; - doa_out[4] <= SRVAL_A[4]; - doa_out[5] <= SRVAL_A[5]; - doa_out[6] <= SRVAL_A[6]; - doa_out[7] <= SRVAL_A[7]; - doa_out[8] <= SRVAL_A[8]; - doa_out[9] <= SRVAL_A[9]; - doa_out[10] <= SRVAL_A[10]; - doa_out[11] <= SRVAL_A[11]; - doa_out[12] <= SRVAL_A[12]; - doa_out[13] <= SRVAL_A[13]; - doa_out[14] <= SRVAL_A[14]; - doa_out[15] <= SRVAL_A[15]; - doa_out[16] <= SRVAL_A[16]; - doa_out[17] <= SRVAL_A[17]; - doa_out[18] <= SRVAL_A[18]; - doa_out[19] <= SRVAL_A[19]; - doa_out[20] <= SRVAL_A[20]; - doa_out[21] <= SRVAL_A[21]; - doa_out[22] <= SRVAL_A[22]; - doa_out[23] <= SRVAL_A[23]; - doa_out[24] <= SRVAL_A[24]; - doa_out[25] <= SRVAL_A[25]; - doa_out[26] <= SRVAL_A[26]; - doa_out[27] <= SRVAL_A[27]; - doa_out[28] <= SRVAL_A[28]; - doa_out[29] <= SRVAL_A[29]; - doa_out[30] <= SRVAL_A[30]; - doa_out[31] <= SRVAL_A[31]; - dopa_out[0] <= SRVAL_A[32]; - dopa_out[1] <= SRVAL_A[33]; - dopa_out[2] <= SRVAL_A[34]; - dopa_out[3] <= SRVAL_A[35]; - end - else begin - if (wea_int == 1'b1) begin - if (wr_mode_a == 2'b00) begin - doa_out <= dia_int; - dopa_out <= dipa_int; - end - else if (wr_mode_a == 2'b01) begin - doa_out[0] <= mem[data_addra_int + 0]; - doa_out[1] <= mem[data_addra_int + 1]; - doa_out[2] <= mem[data_addra_int + 2]; - doa_out[3] <= mem[data_addra_int + 3]; - doa_out[4] <= mem[data_addra_int + 4]; - doa_out[5] <= mem[data_addra_int + 5]; - doa_out[6] <= mem[data_addra_int + 6]; - doa_out[7] <= mem[data_addra_int + 7]; - doa_out[8] <= mem[data_addra_int + 8]; - doa_out[9] <= mem[data_addra_int + 9]; - doa_out[10] <= mem[data_addra_int + 10]; - doa_out[11] <= mem[data_addra_int + 11]; - doa_out[12] <= mem[data_addra_int + 12]; - doa_out[13] <= mem[data_addra_int + 13]; - doa_out[14] <= mem[data_addra_int + 14]; - doa_out[15] <= mem[data_addra_int + 15]; - doa_out[16] <= mem[data_addra_int + 16]; - doa_out[17] <= mem[data_addra_int + 17]; - doa_out[18] <= mem[data_addra_int + 18]; - doa_out[19] <= mem[data_addra_int + 19]; - doa_out[20] <= mem[data_addra_int + 20]; - doa_out[21] <= mem[data_addra_int + 21]; - doa_out[22] <= mem[data_addra_int + 22]; - doa_out[23] <= mem[data_addra_int + 23]; - doa_out[24] <= mem[data_addra_int + 24]; - doa_out[25] <= mem[data_addra_int + 25]; - doa_out[26] <= mem[data_addra_int + 26]; - doa_out[27] <= mem[data_addra_int + 27]; - doa_out[28] <= mem[data_addra_int + 28]; - doa_out[29] <= mem[data_addra_int + 29]; - doa_out[30] <= mem[data_addra_int + 30]; - doa_out[31] <= mem[data_addra_int + 31]; - dopa_out[0] <= mem[parity_addra_int + 0]; - dopa_out[1] <= mem[parity_addra_int + 1]; - dopa_out[2] <= mem[parity_addra_int + 2]; - dopa_out[3] <= mem[parity_addra_int + 3]; - end - end - else begin - doa_out[0] <= mem[data_addra_int + 0]; - doa_out[1] <= mem[data_addra_int + 1]; - doa_out[2] <= mem[data_addra_int + 2]; - doa_out[3] <= mem[data_addra_int + 3]; - doa_out[4] <= mem[data_addra_int + 4]; - doa_out[5] <= mem[data_addra_int + 5]; - doa_out[6] <= mem[data_addra_int + 6]; - doa_out[7] <= mem[data_addra_int + 7]; - doa_out[8] <= mem[data_addra_int + 8]; - doa_out[9] <= mem[data_addra_int + 9]; - doa_out[10] <= mem[data_addra_int + 10]; - doa_out[11] <= mem[data_addra_int + 11]; - doa_out[12] <= mem[data_addra_int + 12]; - doa_out[13] <= mem[data_addra_int + 13]; - doa_out[14] <= mem[data_addra_int + 14]; - doa_out[15] <= mem[data_addra_int + 15]; - doa_out[16] <= mem[data_addra_int + 16]; - doa_out[17] <= mem[data_addra_int + 17]; - doa_out[18] <= mem[data_addra_int + 18]; - doa_out[19] <= mem[data_addra_int + 19]; - doa_out[20] <= mem[data_addra_int + 20]; - doa_out[21] <= mem[data_addra_int + 21]; - doa_out[22] <= mem[data_addra_int + 22]; - doa_out[23] <= mem[data_addra_int + 23]; - doa_out[24] <= mem[data_addra_int + 24]; - doa_out[25] <= mem[data_addra_int + 25]; - doa_out[26] <= mem[data_addra_int + 26]; - doa_out[27] <= mem[data_addra_int + 27]; - doa_out[28] <= mem[data_addra_int + 28]; - doa_out[29] <= mem[data_addra_int + 29]; - doa_out[30] <= mem[data_addra_int + 30]; - doa_out[31] <= mem[data_addra_int + 31]; - dopa_out[0] <= mem[parity_addra_int + 0]; - dopa_out[1] <= mem[parity_addra_int + 1]; - dopa_out[2] <= mem[parity_addra_int + 2]; - dopa_out[3] <= mem[parity_addra_int + 3]; - end - end - end - end - - always @(posedge clka_int) begin - if (ena_int == 1'b1 && wea_int == 1'b1) begin - mem[data_addra_int + 0] <= dia_int[0]; - mem[data_addra_int + 1] <= dia_int[1]; - mem[data_addra_int + 2] <= dia_int[2]; - mem[data_addra_int + 3] <= dia_int[3]; - mem[data_addra_int + 4] <= dia_int[4]; - mem[data_addra_int + 5] <= dia_int[5]; - mem[data_addra_int + 6] <= dia_int[6]; - mem[data_addra_int + 7] <= dia_int[7]; - mem[data_addra_int + 8] <= dia_int[8]; - mem[data_addra_int + 9] <= dia_int[9]; - mem[data_addra_int + 10] <= dia_int[10]; - mem[data_addra_int + 11] <= dia_int[11]; - mem[data_addra_int + 12] <= dia_int[12]; - mem[data_addra_int + 13] <= dia_int[13]; - mem[data_addra_int + 14] <= dia_int[14]; - mem[data_addra_int + 15] <= dia_int[15]; - mem[data_addra_int + 16] <= dia_int[16]; - mem[data_addra_int + 17] <= dia_int[17]; - mem[data_addra_int + 18] <= dia_int[18]; - mem[data_addra_int + 19] <= dia_int[19]; - mem[data_addra_int + 20] <= dia_int[20]; - mem[data_addra_int + 21] <= dia_int[21]; - mem[data_addra_int + 22] <= dia_int[22]; - mem[data_addra_int + 23] <= dia_int[23]; - mem[data_addra_int + 24] <= dia_int[24]; - mem[data_addra_int + 25] <= dia_int[25]; - mem[data_addra_int + 26] <= dia_int[26]; - mem[data_addra_int + 27] <= dia_int[27]; - mem[data_addra_int + 28] <= dia_int[28]; - mem[data_addra_int + 29] <= dia_int[29]; - mem[data_addra_int + 30] <= dia_int[30]; - mem[data_addra_int + 31] <= dia_int[31]; - mem[parity_addra_int + 0] <= dipa_int[0]; - mem[parity_addra_int + 1] <= dipa_int[1]; - mem[parity_addra_int + 2] <= dipa_int[2]; - mem[parity_addra_int + 3] <= dipa_int[3]; - end - end - - // Port B - always @(posedge clkb_int) begin - if (enb_int == 1'b1) begin - if (ssrb_int == 1'b1) begin - dob_out[0] <= SRVAL_B[0]; - dob_out[1] <= SRVAL_B[1]; - dob_out[2] <= SRVAL_B[2]; - dob_out[3] <= SRVAL_B[3]; - dob_out[4] <= SRVAL_B[4]; - dob_out[5] <= SRVAL_B[5]; - dob_out[6] <= SRVAL_B[6]; - dob_out[7] <= SRVAL_B[7]; - dob_out[8] <= SRVAL_B[8]; - dob_out[9] <= SRVAL_B[9]; - dob_out[10] <= SRVAL_B[10]; - dob_out[11] <= SRVAL_B[11]; - dob_out[12] <= SRVAL_B[12]; - dob_out[13] <= SRVAL_B[13]; - dob_out[14] <= SRVAL_B[14]; - dob_out[15] <= SRVAL_B[15]; - dob_out[16] <= SRVAL_B[16]; - dob_out[17] <= SRVAL_B[17]; - dob_out[18] <= SRVAL_B[18]; - dob_out[19] <= SRVAL_B[19]; - dob_out[20] <= SRVAL_B[20]; - dob_out[21] <= SRVAL_B[21]; - dob_out[22] <= SRVAL_B[22]; - dob_out[23] <= SRVAL_B[23]; - dob_out[24] <= SRVAL_B[24]; - dob_out[25] <= SRVAL_B[25]; - dob_out[26] <= SRVAL_B[26]; - dob_out[27] <= SRVAL_B[27]; - dob_out[28] <= SRVAL_B[28]; - dob_out[29] <= SRVAL_B[29]; - dob_out[30] <= SRVAL_B[30]; - dob_out[31] <= SRVAL_B[31]; - dopb_out[0] <= SRVAL_B[32]; - dopb_out[1] <= SRVAL_B[33]; - dopb_out[2] <= SRVAL_B[34]; - dopb_out[3] <= SRVAL_B[35]; - end - else begin - if (web_int == 1'b1) begin - if (wr_mode_b == 2'b00) begin - dob_out <= dib_int; - dopb_out <= dipb_int; - end - else if (wr_mode_b == 2'b01) begin - dob_out[0] <= mem[data_addrb_int + 0]; - dob_out[1] <= mem[data_addrb_int + 1]; - dob_out[2] <= mem[data_addrb_int + 2]; - dob_out[3] <= mem[data_addrb_int + 3]; - dob_out[4] <= mem[data_addrb_int + 4]; - dob_out[5] <= mem[data_addrb_int + 5]; - dob_out[6] <= mem[data_addrb_int + 6]; - dob_out[7] <= mem[data_addrb_int + 7]; - dob_out[8] <= mem[data_addrb_int + 8]; - dob_out[9] <= mem[data_addrb_int + 9]; - dob_out[10] <= mem[data_addrb_int + 10]; - dob_out[11] <= mem[data_addrb_int + 11]; - dob_out[12] <= mem[data_addrb_int + 12]; - dob_out[13] <= mem[data_addrb_int + 13]; - dob_out[14] <= mem[data_addrb_int + 14]; - dob_out[15] <= mem[data_addrb_int + 15]; - dob_out[16] <= mem[data_addrb_int + 16]; - dob_out[17] <= mem[data_addrb_int + 17]; - dob_out[18] <= mem[data_addrb_int + 18]; - dob_out[19] <= mem[data_addrb_int + 19]; - dob_out[20] <= mem[data_addrb_int + 20]; - dob_out[21] <= mem[data_addrb_int + 21]; - dob_out[22] <= mem[data_addrb_int + 22]; - dob_out[23] <= mem[data_addrb_int + 23]; - dob_out[24] <= mem[data_addrb_int + 24]; - dob_out[25] <= mem[data_addrb_int + 25]; - dob_out[26] <= mem[data_addrb_int + 26]; - dob_out[27] <= mem[data_addrb_int + 27]; - dob_out[28] <= mem[data_addrb_int + 28]; - dob_out[29] <= mem[data_addrb_int + 29]; - dob_out[30] <= mem[data_addrb_int + 30]; - dob_out[31] <= mem[data_addrb_int + 31]; - dopb_out[0] <= mem[parity_addrb_int + 0]; - dopb_out[1] <= mem[parity_addrb_int + 1]; - dopb_out[2] <= mem[parity_addrb_int + 2]; - dopb_out[3] <= mem[parity_addrb_int + 3]; - end - end - else begin - dob_out[0] <= mem[data_addrb_int + 0]; - dob_out[1] <= mem[data_addrb_int + 1]; - dob_out[2] <= mem[data_addrb_int + 2]; - dob_out[3] <= mem[data_addrb_int + 3]; - dob_out[4] <= mem[data_addrb_int + 4]; - dob_out[5] <= mem[data_addrb_int + 5]; - dob_out[6] <= mem[data_addrb_int + 6]; - dob_out[7] <= mem[data_addrb_int + 7]; - dob_out[8] <= mem[data_addrb_int + 8]; - dob_out[9] <= mem[data_addrb_int + 9]; - dob_out[10] <= mem[data_addrb_int + 10]; - dob_out[11] <= mem[data_addrb_int + 11]; - dob_out[12] <= mem[data_addrb_int + 12]; - dob_out[13] <= mem[data_addrb_int + 13]; - dob_out[14] <= mem[data_addrb_int + 14]; - dob_out[15] <= mem[data_addrb_int + 15]; - dob_out[16] <= mem[data_addrb_int + 16]; - dob_out[17] <= mem[data_addrb_int + 17]; - dob_out[18] <= mem[data_addrb_int + 18]; - dob_out[19] <= mem[data_addrb_int + 19]; - dob_out[20] <= mem[data_addrb_int + 20]; - dob_out[21] <= mem[data_addrb_int + 21]; - dob_out[22] <= mem[data_addrb_int + 22]; - dob_out[23] <= mem[data_addrb_int + 23]; - dob_out[24] <= mem[data_addrb_int + 24]; - dob_out[25] <= mem[data_addrb_int + 25]; - dob_out[26] <= mem[data_addrb_int + 26]; - dob_out[27] <= mem[data_addrb_int + 27]; - dob_out[28] <= mem[data_addrb_int + 28]; - dob_out[29] <= mem[data_addrb_int + 29]; - dob_out[30] <= mem[data_addrb_int + 30]; - dob_out[31] <= mem[data_addrb_int + 31]; - dopb_out[0] <= mem[parity_addrb_int + 0]; - dopb_out[1] <= mem[parity_addrb_int + 1]; - dopb_out[2] <= mem[parity_addrb_int + 2]; - dopb_out[3] <= mem[parity_addrb_int + 3]; - end - end - end - end - - always @(posedge clkb_int) begin - if (enb_int == 1'b1 && web_int == 1'b1) begin - mem[data_addrb_int + 0] <= dib_int[0]; - mem[data_addrb_int + 1] <= dib_int[1]; - mem[data_addrb_int + 2] <= dib_int[2]; - mem[data_addrb_int + 3] <= dib_int[3]; - mem[data_addrb_int + 4] <= dib_int[4]; - mem[data_addrb_int + 5] <= dib_int[5]; - mem[data_addrb_int + 6] <= dib_int[6]; - mem[data_addrb_int + 7] <= dib_int[7]; - mem[data_addrb_int + 8] <= dib_int[8]; - mem[data_addrb_int + 9] <= dib_int[9]; - mem[data_addrb_int + 10] <= dib_int[10]; - mem[data_addrb_int + 11] <= dib_int[11]; - mem[data_addrb_int + 12] <= dib_int[12]; - mem[data_addrb_int + 13] <= dib_int[13]; - mem[data_addrb_int + 14] <= dib_int[14]; - mem[data_addrb_int + 15] <= dib_int[15]; - mem[data_addrb_int + 16] <= dib_int[16]; - mem[data_addrb_int + 17] <= dib_int[17]; - mem[data_addrb_int + 18] <= dib_int[18]; - mem[data_addrb_int + 19] <= dib_int[19]; - mem[data_addrb_int + 20] <= dib_int[20]; - mem[data_addrb_int + 21] <= dib_int[21]; - mem[data_addrb_int + 22] <= dib_int[22]; - mem[data_addrb_int + 23] <= dib_int[23]; - mem[data_addrb_int + 24] <= dib_int[24]; - mem[data_addrb_int + 25] <= dib_int[25]; - mem[data_addrb_int + 26] <= dib_int[26]; - mem[data_addrb_int + 27] <= dib_int[27]; - mem[data_addrb_int + 28] <= dib_int[28]; - mem[data_addrb_int + 29] <= dib_int[29]; - mem[data_addrb_int + 30] <= dib_int[30]; - mem[data_addrb_int + 31] <= dib_int[31]; - mem[parity_addrb_int + 0] <= dipb_int[0]; - mem[parity_addrb_int + 1] <= dipb_int[1]; - mem[parity_addrb_int + 2] <= dipb_int[2]; - mem[parity_addrb_int + 3] <= dipb_int[3]; - end - end - - specify - (CLKA *> DOA) = (100, 100); - (CLKA *> DOPA) = (100, 100); - (CLKB *> DOB) = (100, 100); - (CLKB *> DOPB) = (100, 100); - endspecify - -endmodule - -`else - -// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/unisims/RAMB16_S36_S36.v,v 1.9 2005/03/14 22:54:41 wloo Exp $ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 1995/2005 Xilinx, Inc. -// All Right Reserved. -/////////////////////////////////////////////////////////////////////////////// -// ____ ____ -// / /\/ / -// /___/ \ / Vendor : Xilinx -// \ \ \/ Version : 8.1i (I.13) -// \ \ Description : Xilinx Timing Simulation Library Component -// / / 16K-Bit Data and 2K-Bit Parity Dual Port Block RAM -// /___/ /\ Filename : RAMB16_S36_S36.v -// \ \ / \ Timestamp : Thu Mar 10 16:44:01 PST 2005 -// \___\/\___\ -// -// Revision: -// 03/23/04 - Initial version. -// 03/10/05 - Initialized outputs. -// End Revision - -`timescale 1 ps/1 ps - -module RAMB16_S36_S36 (DOA, DOB, DOPA, DOPB, ADDRA, ADDRB, CLKA, CLKB, DIA, DIB, DIPA, DIPB, ENA, ENB, SSRA, SSRB, WEA, WEB); - - parameter INIT_A = 36'h0; - parameter INIT_B = 36'h0; - parameter SRVAL_A = 36'h0; - parameter SRVAL_B = 36'h0; - parameter WRITE_MODE_A = "WRITE_FIRST"; - parameter WRITE_MODE_B = "WRITE_FIRST"; - parameter SIM_COLLISION_CHECK = "ALL"; - localparam SETUP_ALL = 1000; - localparam SETUP_READ_FIRST = 3000; - - parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; - - output [31:0] DOA; - output [3:0] DOPA; - output [31:0] DOB; - output [3:0] DOPB; - - input [8:0] ADDRA; - input [31:0] DIA; - input [3:0] DIPA; - input ENA, CLKA, WEA, SSRA; - input [8:0] ADDRB; - input [31:0] DIB; - input [3:0] DIPB; - input ENB, CLKB, WEB, SSRB; - - reg [31:0] doa_out = INIT_A[31:0]; - reg [3:0] dopa_out = INIT_A[35:32]; - reg [31:0] dob_out = INIT_B[31:0]; - reg [3:0] dopb_out = INIT_B[35:32]; - - reg [31:0] mem [511:0]; - reg [3:0] memp [511:0]; - - reg [8:0] count, countp; - reg [1:0] wr_mode_a, wr_mode_b; - - reg [5:0] dmi, dbi; - reg [5:0] pmi, pbi; - - wire [8:0] addra_int; - reg [8:0] addra_reg; - wire [31:0] dia_int; - wire [3:0] dipa_int; - wire ena_int, clka_int, wea_int, ssra_int; - reg ena_reg, wea_reg, ssra_reg; - wire [8:0] addrb_int; - reg [8:0] addrb_reg; - wire [31:0] dib_int; - wire [3:0] dipb_int; - wire enb_int, clkb_int, web_int, ssrb_int; - reg display_flag, output_flag; - reg enb_reg, web_reg, ssrb_reg; - - time time_clka, time_clkb; - time time_clka_clkb; - time time_clkb_clka; - - reg setup_all_a_b; - reg setup_all_b_a; - reg setup_zero; - reg setup_rf_a_b; - reg setup_rf_b_a; - reg [1:0] data_collision, data_collision_a_b, data_collision_b_a; - reg memory_collision, memory_collision_a_b, memory_collision_b_a; - reg change_clka; - reg change_clkb; - - wire [14:0] data_addra_int; - wire [14:0] data_addra_reg; - wire [14:0] data_addrb_int; - wire [14:0] data_addrb_reg; - - wire dia_enable = ena_int && wea_int; - wire dib_enable = enb_int && web_int; - - tri0 GSR = glbl.GSR; - wire gsr_int; - - buf b_gsr (gsr_int, GSR); - - buf b_doa [31:0] (DOA, doa_out); - buf b_dopa [3:0] (DOPA, dopa_out); - buf b_addra [8:0] (addra_int, ADDRA); - buf b_dia [31:0] (dia_int, DIA); - buf b_dipa [3:0] (dipa_int, DIPA); - buf b_ena (ena_int, ENA); - buf b_clka (clka_int, CLKA); - buf b_ssra (ssra_int, SSRA); - buf b_wea (wea_int, WEA); - - buf b_dob [31:0] (DOB, dob_out); - buf b_dopb [3:0] (DOPB, dopb_out); - buf b_addrb [8:0] (addrb_int, ADDRB); - buf b_dib [31:0] (dib_int, DIB); - buf b_dipb [3:0] (dipb_int, DIPB); - buf b_enb (enb_int, ENB); - buf b_clkb (clkb_int, CLKB); - buf b_ssrb (ssrb_int, SSRB); - buf b_web (web_int, WEB); - - - always @(gsr_int) - if (gsr_int) begin - assign {dopa_out, doa_out} = INIT_A; - assign {dopb_out, dob_out} = INIT_B; - end - else begin - deassign doa_out; - deassign dopa_out; - deassign dob_out; - deassign dopb_out; - end - - initial begin : initialize_mems - -`ifdef UNDEFINED - for (count = 0; count < 8; count = count + 1) begin - mem[count] = INIT_00[(count * 32) +: 32]; - mem[8 * 1 + count] = INIT_01[(count * 32) +: 32]; - mem[8 * 2 + count] = INIT_02[(count * 32) +: 32]; - mem[8 * 3 + count] = INIT_03[(count * 32) +: 32]; - mem[8 * 4 + count] = INIT_04[(count * 32) +: 32]; - mem[8 * 5 + count] = INIT_05[(count * 32) +: 32]; - mem[8 * 6 + count] = INIT_06[(count * 32) +: 32]; - mem[8 * 7 + count] = INIT_07[(count * 32) +: 32]; - mem[8 * 8 + count] = INIT_08[(count * 32) +: 32]; - mem[8 * 9 + count] = INIT_09[(count * 32) +: 32]; - mem[8 * 10 + count] = INIT_0A[(count * 32) +: 32]; - mem[8 * 11 + count] = INIT_0B[(count * 32) +: 32]; - mem[8 * 12 + count] = INIT_0C[(count * 32) +: 32]; - mem[8 * 13 + count] = INIT_0D[(count * 32) +: 32]; - mem[8 * 14 + count] = INIT_0E[(count * 32) +: 32]; - mem[8 * 15 + count] = INIT_0F[(count * 32) +: 32]; - mem[8 * 16 + count] = INIT_10[(count * 32) +: 32]; - mem[8 * 17 + count] = INIT_11[(count * 32) +: 32]; - mem[8 * 18 + count] = INIT_12[(count * 32) +: 32]; - mem[8 * 19 + count] = INIT_13[(count * 32) +: 32]; - mem[8 * 20 + count] = INIT_14[(count * 32) +: 32]; - mem[8 * 21 + count] = INIT_15[(count * 32) +: 32]; - mem[8 * 22 + count] = INIT_16[(count * 32) +: 32]; - mem[8 * 23 + count] = INIT_17[(count * 32) +: 32]; - mem[8 * 24 + count] = INIT_18[(count * 32) +: 32]; - mem[8 * 25 + count] = INIT_19[(count * 32) +: 32]; - mem[8 * 26 + count] = INIT_1A[(count * 32) +: 32]; - mem[8 * 27 + count] = INIT_1B[(count * 32) +: 32]; - mem[8 * 28 + count] = INIT_1C[(count * 32) +: 32]; - mem[8 * 29 + count] = INIT_1D[(count * 32) +: 32]; - mem[8 * 30 + count] = INIT_1E[(count * 32) +: 32]; - mem[8 * 31 + count] = INIT_1F[(count * 32) +: 32]; - mem[8 * 32 + count] = INIT_20[(count * 32) +: 32]; - mem[8 * 33 + count] = INIT_21[(count * 32) +: 32]; - mem[8 * 34 + count] = INIT_22[(count * 32) +: 32]; - mem[8 * 35 + count] = INIT_23[(count * 32) +: 32]; - mem[8 * 36 + count] = INIT_24[(count * 32) +: 32]; - mem[8 * 37 + count] = INIT_25[(count * 32) +: 32]; - mem[8 * 38 + count] = INIT_26[(count * 32) +: 32]; - mem[8 * 39 + count] = INIT_27[(count * 32) +: 32]; - mem[8 * 40 + count] = INIT_28[(count * 32) +: 32]; - mem[8 * 41 + count] = INIT_29[(count * 32) +: 32]; - mem[8 * 42 + count] = INIT_2A[(count * 32) +: 32]; - mem[8 * 43 + count] = INIT_2B[(count * 32) +: 32]; - mem[8 * 44 + count] = INIT_2C[(count * 32) +: 32]; - mem[8 * 45 + count] = INIT_2D[(count * 32) +: 32]; - mem[8 * 46 + count] = INIT_2E[(count * 32) +: 32]; - mem[8 * 47 + count] = INIT_2F[(count * 32) +: 32]; - mem[8 * 48 + count] = INIT_30[(count * 32) +: 32]; - mem[8 * 49 + count] = INIT_31[(count * 32) +: 32]; - mem[8 * 50 + count] = INIT_32[(count * 32) +: 32]; - mem[8 * 51 + count] = INIT_33[(count * 32) +: 32]; - mem[8 * 52 + count] = INIT_34[(count * 32) +: 32]; - mem[8 * 53 + count] = INIT_35[(count * 32) +: 32]; - mem[8 * 54 + count] = INIT_36[(count * 32) +: 32]; - mem[8 * 55 + count] = INIT_37[(count * 32) +: 32]; - mem[8 * 56 + count] = INIT_38[(count * 32) +: 32]; - mem[8 * 57 + count] = INIT_39[(count * 32) +: 32]; - mem[8 * 58 + count] = INIT_3A[(count * 32) +: 32]; - mem[8 * 59 + count] = INIT_3B[(count * 32) +: 32]; - mem[8 * 60 + count] = INIT_3C[(count * 32) +: 32]; - mem[8 * 61 + count] = INIT_3D[(count * 32) +: 32]; - mem[8 * 62 + count] = INIT_3E[(count * 32) +: 32]; - mem[8 * 63 + count] = INIT_3F[(count * 32) +: 32]; - end -`else - integer i; - for (i = 0; i < 512; i = i + 1) - begin - mem[i] = 0; - memp[i] = 0; - end - -`endif - -// initiate parity start -`ifdef UNDEFINED - for (countp = 0; countp < 64; countp = countp + 1) begin - memp[countp] = INITP_00[(countp * 4) +: 4]; - memp[64 * 1 + countp] = INITP_01[(countp * 4) +: 4]; - memp[64 * 2 + countp] = INITP_02[(countp * 4) +: 4]; - memp[64 * 3 + countp] = INITP_03[(countp * 4) +: 4]; - memp[64 * 4 + countp] = INITP_04[(countp * 4) +: 4]; - memp[64 * 5 + countp] = INITP_05[(countp * 4) +: 4]; - memp[64 * 6 + countp] = INITP_06[(countp * 4) +: 4]; - memp[64 * 7 + countp] = INITP_07[(countp * 4) +: 4]; - end -`endif -// initiate parity end - - change_clka <= 0; - change_clkb <= 0; - data_collision <= 0; - data_collision_a_b <= 0; - data_collision_b_a <= 0; - memory_collision <= 0; - memory_collision_a_b <= 0; - memory_collision_b_a <= 0; - setup_all_a_b <= 0; - setup_all_b_a <= 0; - setup_zero <= 0; - setup_rf_a_b <= 0; - setup_rf_b_a <= 0; - end - - assign data_addra_int = addra_int * 32; - assign data_addra_reg = addra_reg * 32; - assign data_addrb_int = addrb_int * 32; - assign data_addrb_reg = addrb_reg * 32; - - - initial begin - - display_flag = 1; - output_flag = 1; - - case (SIM_COLLISION_CHECK) - - "NONE" : begin - output_flag = 0; - display_flag = 0; - end - "WARNING_ONLY" : output_flag = 0; - "GENERATE_ONLY" : display_flag = 0; - "ALL" : ; - - default : begin - $display("Attribute Syntax Error : The Attribute SIM_COLLISION_CHECK on RAMB16_S36_S36 instance %m is set to %s. Legal values for this attribute are ALL, NONE, WARNING_ONLY or GENERATE_ONLY.", SIM_COLLISION_CHECK); - $finish; - end - - endcase // case(SIM_COLLISION_CHECK) - - end // initial begin - - - always @(posedge clka_int) begin - if ((output_flag || display_flag)) begin - time_clka = $time; - #0 time_clkb_clka = time_clka - time_clkb; - change_clka = ~change_clka; - end - end - - always @(posedge clkb_int) begin - if ((output_flag || display_flag)) begin - time_clkb = $time; - #0 time_clka_clkb = time_clkb - time_clka; - change_clkb = ~change_clkb; - end - end - - always @(change_clkb) begin - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_ALL)) - setup_all_a_b = 1; - if ((0 < time_clka_clkb) && (time_clka_clkb < SETUP_READ_FIRST)) - setup_rf_a_b = 1; - end - - always @(change_clka) begin - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_ALL)) - setup_all_b_a = 1; - if ((0 < time_clkb_clka) && (time_clkb_clka < SETUP_READ_FIRST)) - setup_rf_b_a = 1; - end - - always @(change_clkb or change_clka) begin - if ((time_clkb_clka == 0) && (time_clka_clkb == 0)) - setup_zero = 1; - end - - always @(posedge setup_zero) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_int[14:5] == data_addrb_int[14:5])) - memory_collision <= 1; - end - - always @(posedge setup_all_a_b or posedge setup_rf_a_b) begin - if ((ena_reg == 1) && (wea_reg == 1) && - (enb_int == 1) && (web_int == 1) && - (data_addra_reg[14:5] == data_addrb_int[14:5])) - memory_collision_a_b <= 1; - end - - always @(posedge setup_all_b_a or posedge setup_rf_b_a) begin - if ((ena_int == 1) && (wea_int == 1) && - (enb_reg == 1) && (web_reg == 1) && - (data_addra_int[14:5] == data_addrb_reg[14:5])) - memory_collision_b_a <= 1; - end - - always @(posedge setup_all_a_b) begin - if (data_addra_reg[14:5] == data_addrb_int[14:5]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) - 6'b000011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b010011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b010111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b011011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b100011 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_a_b <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision_a_b <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_a_b <= 0; - end - - - always @(posedge setup_all_b_a) begin - if (data_addra_int[14:5] == data_addrb_reg[14:5]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) - 6'b000011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b000111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b001011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b010111 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b011011 : begin data_collision_b_a <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b001001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b011001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b101001 : begin data_collision_b_a <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision_b_a <= 2'b01; display_wa_rb; end - endcase - end - end - setup_all_b_a <= 0; - end - - - always @(posedge setup_zero) begin - if (data_addra_int[14:5] == data_addrb_int[14:5]) begin - if ((ena_int == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_int}) - 6'b000011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b000111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b001011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b010011 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision <= 2'b10; display_wa_wb; end - 6'b100011 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b100111 : begin data_collision <= 2'b01; display_wa_wb; end - 6'b101011 : begin display_wa_wb; end - 6'b000001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b000101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b001001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b010001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b010101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b011001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b100001 : begin data_collision <= 2'b10; display_ra_wb; end -// 6'b100101 : begin data_collision <= 2'b00; display_ra_wb; end - 6'b101001 : begin data_collision <= 2'b10; display_ra_wb; end - 6'b000010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b000110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b001010 : begin data_collision <= 2'b01; display_wa_rb; end -// 6'b010010 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision <= 2'b00; display_wa_rb; end - 6'b100010 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b100110 : begin data_collision <= 2'b01; display_wa_rb; end - 6'b101010 : begin data_collision <= 2'b01; display_wa_rb; end - endcase - end - end - setup_zero <= 0; - end - - task display_ra_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S36_S36:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port A while a write was requested to the same address on Port B. The write will be successful however the read value on Port A is unknown until the next CLKA cycle.", $time/1000.0, addra_int); - end - endtask - - task display_wa_rb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S36_S36:%m at simulation time %.3f ns\nA read was performed on address %h (hex) of Port B while a write was requested to the same address on Port A. The write will be successful however the read value on Port B is unknown until the next CLKB cycle.", $time/1000.0, addrb_int); - end - endtask - - task display_wa_wb; - begin - if (display_flag) - $display("Memory Collision Error on RAMB16_S36_S36:%m at simulation time %.3f ns\nA write was requested to the same address simultaneously at both Port A and Port B of the RAM. The contents written to the RAM at address location %h (hex) of Port A and address location %h (hex) of Port B are unknown.", $time/1000.0, addra_int, addrb_int); - end - endtask - - - always @(posedge setup_rf_a_b) begin - if (data_addra_reg[14:5] == data_addrb_int[14:5]) begin - if ((ena_reg == 1) && (enb_int == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_reg, web_int}) -// 6'b000011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b001011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end - 6'b010011 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b010111 : begin data_collision_a_b <= 2'b11; display_wa_wb; end - 6'b011011 : begin data_collision_a_b <= 2'b10; display_wa_wb; end -// 6'b100011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b100111 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b101011 : begin data_collision_a_b <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b001001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b010101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b011001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b100101 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b101001 : begin data_collision_a_b <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - 6'b010010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b010110 : begin data_collision_a_b <= 2'b01; display_wa_rb; end - 6'b011010 : begin data_collision_a_b <= 2'b01; display_wa_rb; end -// 6'b100010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_a_b <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_a_b <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_a_b <= 0; - end - - - always @(posedge setup_rf_b_a) begin - if (data_addra_int[14:5] == data_addrb_reg[14:5]) begin - if ((ena_int == 1) && (enb_reg == 1)) begin - case ({wr_mode_a, wr_mode_b, wea_int, web_reg}) -// 6'b000011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b000111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b001011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b010011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b010111 : begin data_collision_b_a <= 2'b11; display_wa_wb; end -// 6'b011011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b100011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end - 6'b100111 : begin data_collision_b_a <= 2'b01; display_wa_wb; end -// 6'b101011 : begin data_collision_b_a <= 2'b00; display_wa_wb; end -// 6'b000001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b000101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b001001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b010001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b010101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b011001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b100001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end - 6'b100101 : begin data_collision_b_a <= 2'b10; display_ra_wb; end -// 6'b101001 : begin data_collision_b_a <= 2'b00; display_ra_wb; end -// 6'b000010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b000110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b001010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b010110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b011010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b100110 : begin data_collision_b_a <= 2'b00; display_wa_rb; end -// 6'b101010 : begin data_collision_b_a <= 2'b00; display_wa_rb; end - endcase - end - end - setup_rf_b_a <= 0; - end - - - always @(posedge clka_int) begin - if ((output_flag || display_flag)) begin - addra_reg <= addra_int; - ena_reg <= ena_int; - ssra_reg <= ssra_int; - wea_reg <= wea_int; - end - end - - always @(posedge clkb_int) begin - if ((output_flag || display_flag)) begin - addrb_reg <= addrb_int; - enb_reg <= enb_int; - ssrb_reg <= ssrb_int; - web_reg <= web_int; - end - end - - - // Data - always @(posedge memory_collision) begin - if ((output_flag || display_flag)) begin - mem[addra_int] <= 32'bx; - memory_collision <= 0; - end - - end - - always @(posedge memory_collision_a_b) begin - if ((output_flag || display_flag)) begin - mem[addra_reg] <= 32'bx; - memory_collision_a_b <= 0; - end - end - - always @(posedge memory_collision_b_a) begin - if ((output_flag || display_flag)) begin - mem[addra_int] <= 32'bx; - memory_collision_b_a <= 0; - end - end - - always @(posedge data_collision[1]) begin - if (ssra_int == 0 && output_flag) begin - doa_out <= #100 32'bX; - end - data_collision[1] <= 0; - end - - always @(posedge data_collision[0]) begin - if (ssrb_int == 0 && output_flag) begin - dob_out <= #100 32'bX; - end - data_collision[0] <= 0; - end - - always @(posedge data_collision_a_b[1]) begin - if (ssra_reg == 0 && output_flag) begin - doa_out <= #100 32'bX; - end - data_collision_a_b[1] <= 0; - end - - always @(posedge data_collision_a_b[0]) begin - if (ssrb_int == 0 && output_flag) begin - dob_out <= #100 32'bX; - end - data_collision_a_b[0] <= 0; - end - - always @(posedge data_collision_b_a[1]) begin - if (ssra_int == 0 && output_flag) begin - doa_out <= #100 32'bX; - end - data_collision_b_a[1] <= 0; - end - - always @(posedge data_collision_b_a[0]) begin - if (ssrb_reg == 0 && output_flag) begin - dob_out <= #100 32'bX; - end - data_collision_b_a[0] <= 0; - end - -// x parity start - always @(posedge memory_collision) begin - if ((output_flag || display_flag)) - memp[addra_int] <= 4'bx; - end - - always @(posedge memory_collision_a_b) begin - if ((output_flag || display_flag)) - memp[addra_reg] <= 4'bx; - end - - always @(posedge memory_collision_b_a) begin - if ((output_flag || display_flag)) - memp[addra_int] <= 4'bx; - end - - always @(posedge data_collision[1]) begin - if (ssra_int == 0 && output_flag) begin - dopa_out <= #100 4'bX; - end - end - - always @(posedge data_collision_a_b[1]) begin - if (ssra_reg == 0 && output_flag) begin - dopa_out <= #100 4'bX; - end - end - - - always @(posedge data_collision_b_a[1]) begin - if (ssra_int == 0 && output_flag) begin - dopa_out <= #100 4'bX; - end - end - - always @(posedge data_collision[0]) begin - if (ssrb_int == 0 && output_flag) begin - dopb_out <= #100 4'bx; - end - end - - always @(posedge data_collision_a_b[0]) begin - if (ssrb_int == 0 && output_flag) begin - dopb_out <= #100 4'bx; - end - end - - always @(posedge data_collision_b_a[0]) begin - if (ssrb_reg == 0 && output_flag) begin - dopb_out <= #100 4'bx; - end - end -// x parity end - - initial begin - case (WRITE_MODE_A) - "WRITE_FIRST" : wr_mode_a <= 2'b00; - "READ_FIRST" : wr_mode_a <= 2'b01; - "NO_CHANGE" : wr_mode_a <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_A on RAMB16_S36_S36 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_A); - $finish; - end - endcase - end - - initial begin - case (WRITE_MODE_B) - "WRITE_FIRST" : wr_mode_b <= 2'b00; - "READ_FIRST" : wr_mode_b <= 2'b01; - "NO_CHANGE" : wr_mode_b <= 2'b10; - default : begin - $display("Attribute Syntax Error : The Attribute WRITE_MODE_B on RAMB16_S36_S36 instance %m is set to %s. Legal values for this attribute are WRITE_FIRST, READ_FIRST or NO_CHANGE.", WRITE_MODE_B); - $finish; - end - endcase - end - - - // Port A - always @(posedge clka_int) begin - - if (ena_int == 1'b1) begin - - if (ssra_int == 1'b1) begin - {dopa_out, doa_out} <= #100 SRVAL_A; - end - else begin - if (wea_int == 1'b1) begin - if (wr_mode_a == 2'b00) begin - doa_out <= #100 dia_int; - dopa_out <= #100 dipa_int; - end - else if (wr_mode_a == 2'b01) begin - - doa_out <= #100 mem[addra_int]; - dopa_out <= #100 memp[addra_int]; - - end - end - else begin - - doa_out <= #100 mem[addra_int]; - dopa_out <= #100 memp[addra_int]; - - end - end - - // memory - if (wea_int == 1'b1) begin - mem[addra_int] <= dia_int; - memp[addra_int] <= dipa_int; - end - - end - end - - - // Port B - always @(posedge clkb_int) begin - - if (enb_int == 1'b1) begin - - if (ssrb_int == 1'b1) begin - {dopb_out, dob_out} <= #100 SRVAL_B; - end - else begin - if (web_int == 1'b1) begin - if (wr_mode_b == 2'b00) begin - dob_out <= #100 dib_int; - dopb_out <= #100 dipb_int; - end - else if (wr_mode_b == 2'b01) begin - dob_out <= #100 mem[addrb_int]; - dopb_out <= #100 memp[addrb_int]; - end - end - else begin - dob_out <= #100 mem[addrb_int]; - dopb_out <= #100 memp[addrb_int]; - end - end - - // memory - if (web_int == 1'b1) begin - mem[addrb_int] <= dib_int; - memp[addrb_int] <= dipb_int; - end - - end - end - - -endmodule - -`endif diff --git a/eth/rtl/verilog/elastic_buffer.v b/eth/rtl/verilog/elastic_buffer.v deleted file mode 100644 index 56c821b7e..000000000 --- a/eth/rtl/verilog/elastic_buffer.v +++ /dev/null @@ -1,93 +0,0 @@ - - -module elastic_buffer - ( input rx_clk, - input tx_clk, - input rst, - - input [7:0] rxd, - input rx_dv, - input rx_er, - input crs, - input col, - - output [7:0] rxd_ret, - output rx_dv_ret, - output rx_er_ret, - output crs_ret, - output col_ret ); - - reg [3:0] addr_wr,addr_wr_gray,awg_d1,awg_d2,addr_wr_gray_ret,awgr_d1,addr_wr_ungray,addr_rd; - - reg [11:0] buffer [0:15]; - integer i; - initial - for(i=0;i<16;i=i+1) - buffer[i] <= 0; - - reg [7:0] rxd_d1, rxd_d2; - reg rx_dv_d1,rx_er_d1,crs_d1,col_d1, rx_dv_d2,rx_er_d2,crs_d2,col_d2; - wire rx_dv_ret_adv; - reg rx_dv_ontime; - - always @(posedge rx_clk) - {col_d1,crs_d1,rx_er_d1,rx_dv_d1,rxd_d1} <= {col,crs,rx_er,rx_dv,rxd}; - - always @(posedge rx_clk) - {col_d2,crs_d2,rx_er_d2,rx_dv_d2,rxd_d2} <= {col_d1,crs_d1,rx_er_d1,rx_dv_d1,rxd_d1}; - - always @(posedge rx_clk) - buffer[addr_wr] <= {col_d2,crs_d2,rx_er_d2,rx_dv_d1,rxd_d2}; - - always @(posedge rx_clk or posedge rst) - if(rst) addr_wr <= 0; - else addr_wr <= addr_wr + 1; - - always @(posedge rx_clk) - begin - addr_wr_gray <= {addr_wr[3],^addr_wr[3:2],^addr_wr[2:1],^addr_wr[1:0]}; - awg_d1 <= addr_wr_gray; - awg_d2 <= awg_d1; - end - - always @(posedge tx_clk) - begin - addr_wr_gray_ret <= awg_d2; - awgr_d1 <= addr_wr_gray_ret; - addr_wr_ungray <= {awgr_d1[3],^awgr_d1[3:2],^awgr_d1[3:1],^awgr_d1[3:0]}; - end - - wire [3:0] addr_delta = addr_rd-addr_wr_ungray; - reg [1:0] direction; - localparam retard = 2'd0; - localparam good = 2'd1; - localparam advance = 2'd2; - localparam wayoff = 2'd3; - - always @* - case(addr_delta) - 4'd1, 4'd2, 4'd3, 4'd4, 4'd5 : direction <= retard; - 4'd15, 4'd14, 4'd13, 4'd12, 4'd11 : direction <= advance; - 4'd0 : direction <= good; - default : direction <= wayoff; - endcase // case(addr_delta) - - always @(posedge tx_clk or posedge rst) - if(rst) - addr_rd <= 0; - else if(rx_dv_ret_adv | rx_dv_ontime) - addr_rd <= addr_rd + 1; - else - case(direction) - retard : addr_rd <= addr_rd; - advance : addr_rd <= addr_rd + 2; - good : addr_rd <= addr_rd + 1; - wayoff : addr_rd <= addr_wr_ungray; - endcase // case(direction) - - assign {col_ret,crs_ret,rx_er_ret,rx_dv_ret_adv,rxd_ret} = buffer[addr_rd]; - always @(posedge tx_clk) - rx_dv_ontime <= rx_dv_ret_adv; - - assign rx_dv_ret = rx_dv_ontime; -endmodule // elastic_buffer diff --git a/eth/rtl/verilog/elastic_buffer_tb.v b/eth/rtl/verilog/elastic_buffer_tb.v deleted file mode 100644 index 757049ec4..000000000 --- a/eth/rtl/verilog/elastic_buffer_tb.v +++ /dev/null @@ -1,66 +0,0 @@ - -module elastic_buffer_tb; - - reg rx_clk = 0, tx_clk = 0, rst = 1; - - reg [7:0] rxd; - wire [7:0] rxd_ret; - reg rx_dv, rx_er, crs, col; - wire rx_dv_ret, rx_er_ret, crs_ret, col_ret; - - elastic_buffer elastic_buffer - (.rx_clk(rx_clk),.tx_clk(tx_clk),.rst(rst), - .rxd(rxd),.rx_dv(rx_dv),.rx_er(rx_er),.crs(crs),.col(col), - .rxd_ret(rxd_ret),.rx_dv_ret(rx_dv_ret),.rx_er_ret(rx_er_ret), - .crs_ret(crs_ret),.col_ret(col_ret) ); - - always #100 rx_clk = ~rx_clk; - always #101 tx_clk = ~tx_clk; - initial #950 rst = 0; - - initial - begin - {col,crs,rx_er,rx_dv,rxd} <= 0; - @(negedge rst); - @(posedge rx_clk); - - repeat (13) - begin - repeat (284) - @(posedge rx_clk); - SendPKT; - end - repeat (100) - @(posedge rx_clk); - $finish; - end // initial begin - - reg [7:0] rxd_ret_d1; - always @(posedge tx_clk) - rxd_ret_d1 <= rxd_ret; - - wire [7:0] diff = rxd_ret_d1 - rxd_ret; - - wire error = rx_dv_ret && (diff != 8'hFF); - - task SendPKT; - begin - {col,crs,rx_er,rx_dv,rxd} <= 0; - @(posedge rx_clk); - {col,crs,rx_er,rx_dv,rxd} <= {4'hF,8'd1}; - @(posedge rx_clk); - repeat (250) - begin - rxd <= rxd + 1; - @(posedge rx_clk); - end - {col,crs,rx_er,rx_dv,rxd} <= 0; - @(posedge rx_clk); - end - endtask // SendPKT - - initial begin - $dumpfile("elastic_buffer_tb.vcd"); - $dumpvars(0,elastic_buffer_tb); - end -endmodule // elastic_buffer_tb diff --git a/eth/rtl/verilog/eth_miim.v b/eth/rtl/verilog/eth_miim.v deleted file mode 100644 index a15c94205..000000000 --- a/eth/rtl/verilog/eth_miim.v +++ /dev/null @@ -1,470 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// eth_miim.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects/ethmac/ ////
-//// ////
-//// Author(s): ////
-//// - Igor Mohor (igorM@opencores.org) ////
-//// ////
-//// All additional information is avaliable in the Readme.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: eth_miim.v,v $
-// Revision 1.3 2006/01/19 14:07:53 maverickist
-// verification is complete.
-//
-// Revision 1.1.1.1 2005/12/13 01:51:44 Administrator
-// no message
-//
-// Revision 1.4 2005/08/16 12:07:57 Administrator
-// no message
-//
-// Revision 1.3 2005/05/19 07:04:29 Administrator
-// no message
-//
-// Revision 1.2 2005/04/27 15:58:46 Administrator
-// no message
-//
-// Revision 1.1.1.1 2004/12/15 06:38:54 Administrator
-// no message
-//
-// Revision 1.5 2003/05/16 10:08:27 mohor
-// Busy was set 2 cycles too late. Reported by Dennis Scott.
-//
-// Revision 1.4 2002/08/14 18:32:10 mohor
-// - Busy signal was not set on time when scan status operation was performed
-// and clock was divided with more than 2.
-// - Nvalid remains valid two more clocks (was previously cleared too soon).
-//
-// Revision 1.3 2002/01/23 10:28:16 mohor
-// Link in the header changed.
-//
-// Revision 1.2 2001/10/19 08:43:51 mohor
-// eth_timescale.v changed to timescale.v This is done because of the
-// simulation of the few cores in a one joined project.
-//
-// Revision 1.1 2001/08/06 14:44:29 mohor
-// A define FPGA added to select between Artisan RAM (for ASIC) and Block Ram (For Virtex).
-// Include files fixed to contain no path.
-// File names and module names changed ta have a eth_ prologue in the name.
-// File eth_timescale.v is used to define timescale
-// All pin names on the top module are changed to contain _I, _O or _OE at the end.
-// Bidirectional signal MDIO is changed to three signals (Mdc_O, Mdi_I, Mdo_O
-// and Mdo_OE. The bidirectional signal must be created on the top level. This
-// is done due to the ASIC tools.
-//
-// Revision 1.2 2001/08/02 09:25:31 mohor
-// Unconnected signals are now connected.
-//
-// Revision 1.1 2001/07/30 21:23:42 mohor
-// Directory structure changed. Files checked and joind together.
-//
-// Revision 1.3 2001/06/01 22:28:56 mohor
-// This files (MIIM) are fully working. They were thoroughly tested. The testbench is not updated.
-//
-//
-
-module eth_miim
-(
- Clk,
- Reset,
- Divider,
- NoPre,
- CtrlData,
- Rgad,
- Fiad,
- WCtrlData,
- RStat,
- ScanStat,
- Mdio,
- Mdc,
- Busy,
- Prsd,
- LinkFail,
- Nvalid,
- WCtrlDataStart,
- RStatStart,
- UpdateMIIRX_DATAReg
-);
-
-input Clk; // Host Clock
-input Reset; // General Reset
-input [7:0] Divider; // Divider for the host clock
-input [15:0] CtrlData; // Control Data (to be written to the PHY reg.)
-input [4:0] Rgad; // Register Address (within the PHY)
-input [4:0] Fiad; // PHY Address
-input NoPre; // No Preamble (no 32-bit preamble)
-input WCtrlData; // Write Control Data operation
-input RStat; // Read Status operation
-input ScanStat; // Scan Status operation
-inout Mdio; // MII Management Data In
-
-output Mdc; // MII Management Data Clock
-
-output Busy; // Busy Signal
-output LinkFail; // Link Integrity Signal
-output Nvalid; // Invalid Status (qualifier for the valid scan result)
-
-output [15:0] Prsd; // Read Status Data (data read from the PHY)
-
-output WCtrlDataStart; // This signals resets the WCTRLDATA bit in the MIIM Command register
-output RStatStart; // This signal resets the RSTAT BIT in the MIIM Command register
-output UpdateMIIRX_DATAReg;// Updates MII RX_DATA register with read data
-
-//parameter Tp = 1;
-
-
-reg Nvalid;
-reg EndBusy_d; // Pre-end Busy signal
-reg EndBusy; // End Busy signal (stops the operation in progress)
-
-reg WCtrlData_q1; // Write Control Data operation delayed 1 Clk cycle
-reg WCtrlData_q2; // Write Control Data operation delayed 2 Clk cycles
-reg WCtrlData_q3; // Write Control Data operation delayed 3 Clk cycles
-reg WCtrlDataStart; // Start Write Control Data Command (positive edge detected)
-reg WCtrlDataStart_q;
-reg WCtrlDataStart_q1; // Start Write Control Data Command delayed 1 Mdc cycle
-reg WCtrlDataStart_q2; // Start Write Control Data Command delayed 2 Mdc cycles
-
-reg RStat_q1; // Read Status operation delayed 1 Clk cycle
-reg RStat_q2; // Read Status operation delayed 2 Clk cycles
-reg RStat_q3; // Read Status operation delayed 3 Clk cycles
-reg RStatStart; // Start Read Status Command (positive edge detected)
-reg RStatStart_q1; // Start Read Status Command delayed 1 Mdc cycle
-reg RStatStart_q2; // Start Read Status Command delayed 2 Mdc cycles
-
-reg ScanStat_q1; // Scan Status operation delayed 1 cycle
-reg ScanStat_q2; // Scan Status operation delayed 2 cycles
-reg SyncStatMdcEn; // Scan Status operation delayed at least cycles and synchronized to MdcEn
-
-wire WriteDataOp; // Write Data Operation (positive edge detected)
-wire ReadStatusOp; // Read Status Operation (positive edge detected)
-wire ScanStatusOp; // Scan Status Operation (positive edge detected)
-wire StartOp; // Start Operation (start of any of the preceding operations)
-wire EndOp; // End of Operation
-
-reg InProgress; // Operation in progress
-reg InProgress_q1; // Operation in progress delayed 1 Mdc cycle
-reg InProgress_q2; // Operation in progress delayed 2 Mdc cycles
-reg InProgress_q3; // Operation in progress delayed 3 Mdc cycles
-
-reg WriteOp; // Write Operation Latch (When asserted, write operation is in progress)
-reg [6:0] BitCounter; // Bit Counter
-
-
-wire [3:0] ByteSelect; // Byte Select defines which byte (preamble, data, operation, etc.) is loaded and shifted through the shift register.
-wire MdcEn; // MII Management Data Clock Enable signal is asserted for one Clk period before Mdc rises.
-wire ShiftedBit; // This bit is output of the shift register and is connected to the Mdo signal
-
-
-wire LatchByte1_d2;
-wire LatchByte0_d2;
-reg LatchByte1_d;
-reg LatchByte0_d;
-reg [1:0] LatchByte; // Latch Byte selects which part of Read Status Data is updated from the shift register
-
-reg UpdateMIIRX_DATAReg;// Updates MII RX_DATA register with read data
-
-wire Mdo; // MII Management Data Output
-wire MdoEn; // MII Management Data Output Enable
-wire Mdi;
-
-assign Mdi=Mdio;
-assign Mdio=MdoEn?Mdo:1'bz;
-
-
-
-// Generation of the EndBusy signal. It is used for ending the MII Management operation.
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- EndBusy_d <= 1'b0;
- EndBusy <= 1'b0;
- end
- else
- begin
- EndBusy_d <= ~InProgress_q2 & InProgress_q3;
- EndBusy <= EndBusy_d;
- end
-end
-
-
-// Update MII RX_DATA register
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- UpdateMIIRX_DATAReg <= 0;
- else
- if(EndBusy & ~WCtrlDataStart_q)
- UpdateMIIRX_DATAReg <= 1;
- else
- UpdateMIIRX_DATAReg <= 0;
-end
-
-
-
-// Generation of the delayed signals used for positive edge triggering.
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- WCtrlData_q1 <= 1'b0;
- WCtrlData_q2 <= 1'b0;
- WCtrlData_q3 <= 1'b0;
-
- RStat_q1 <= 1'b0;
- RStat_q2 <= 1'b0;
- RStat_q3 <= 1'b0;
-
- ScanStat_q1 <= 1'b0;
- ScanStat_q2 <= 1'b0;
- SyncStatMdcEn <= 1'b0;
- end
- else
- begin
- WCtrlData_q1 <= WCtrlData;
- WCtrlData_q2 <= WCtrlData_q1;
- WCtrlData_q3 <= WCtrlData_q2;
-
- RStat_q1 <= RStat;
- RStat_q2 <= RStat_q1;
- RStat_q3 <= RStat_q2;
-
- ScanStat_q1 <= ScanStat;
- ScanStat_q2 <= ScanStat_q1;
- if(MdcEn)
- SyncStatMdcEn <= ScanStat_q2;
- end
-end
-
-
-// Generation of the Start Commands (Write Control Data or Read Status)
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- WCtrlDataStart <= 1'b0;
- WCtrlDataStart_q <= 1'b0;
- RStatStart <= 1'b0;
- end
- else
- begin
- if(EndBusy)
- begin
- WCtrlDataStart <= 1'b0;
- RStatStart <= 1'b0;
- end
- else
- begin
- if(WCtrlData_q2 & ~WCtrlData_q3)
- WCtrlDataStart <= 1'b1;
- if(RStat_q2 & ~RStat_q3)
- RStatStart <= 1'b1;
- WCtrlDataStart_q <= WCtrlDataStart;
- end
- end
-end
-
-
-// Generation of the Nvalid signal (indicates when the status is invalid)
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- Nvalid <= 1'b0;
- else
- begin
- if(~InProgress_q2 & InProgress_q3)
- begin
- Nvalid <= 1'b0;
- end
- else
- begin
- if(ScanStat_q2 & ~SyncStatMdcEn)
- Nvalid <= 1'b1;
- end
- end
-end
-
-// Signals used for the generation of the Operation signals (positive edge)
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- WCtrlDataStart_q1 <= 1'b0;
- WCtrlDataStart_q2 <= 1'b0;
-
- RStatStart_q1 <= 1'b0;
- RStatStart_q2 <= 1'b0;
-
- InProgress_q1 <= 1'b0;
- InProgress_q2 <= 1'b0;
- InProgress_q3 <= 1'b0;
-
- LatchByte0_d <= 1'b0;
- LatchByte1_d <= 1'b0;
-
- LatchByte <= 2'b00;
- end
- else
- begin
- if(MdcEn)
- begin
- WCtrlDataStart_q1 <= WCtrlDataStart;
- WCtrlDataStart_q2 <= WCtrlDataStart_q1;
-
- RStatStart_q1 <= RStatStart;
- RStatStart_q2 <= RStatStart_q1;
-
- LatchByte[0] <= LatchByte0_d;
- LatchByte[1] <= LatchByte1_d;
-
- LatchByte0_d <= LatchByte0_d2;
- LatchByte1_d <= LatchByte1_d2;
-
- InProgress_q1 <= InProgress;
- InProgress_q2 <= InProgress_q1;
- InProgress_q3 <= InProgress_q2;
- end
- end
-end
-
-
-// Generation of the Operation signals
-assign WriteDataOp = WCtrlDataStart_q1 & ~WCtrlDataStart_q2;
-assign ReadStatusOp = RStatStart_q1 & ~RStatStart_q2;
-assign ScanStatusOp = SyncStatMdcEn & ~InProgress & ~InProgress_q1 & ~InProgress_q2;
-assign StartOp = WriteDataOp | ReadStatusOp | ScanStatusOp;
-
-// Busy
-reg Busy;
-always @ (posedge Clk or posedge Reset)
- if (Reset)
- Busy <=0;
- else if(WCtrlData | WCtrlDataStart | RStat | RStatStart | SyncStatMdcEn | EndBusy | InProgress | InProgress_q3 | Nvalid)
- Busy <=1;
- else
- Busy <=0;
-
-//assign Busy = WCtrlData | WCtrlDataStart | RStat | RStatStart | SyncStatMdcEn | EndBusy | InProgress | InProgress_q3 | Nvalid;
-
-
-// Generation of the InProgress signal (indicates when an operation is in progress)
-// Generation of the WriteOp signal (indicates when a write is in progress)
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- InProgress <= 1'b0;
- WriteOp <= 1'b0;
- end
- else
- begin
- if(MdcEn)
- begin
- if(StartOp)
- begin
- if(~InProgress)
- WriteOp <= WriteDataOp;
- InProgress <= 1'b1;
- end
- else
- begin
- if(EndOp)
- begin
- InProgress <= 1'b0;
- WriteOp <= 1'b0;
- end
- end
- end
- end
-end
-
-
-
-// Bit Counter counts from 0 to 63 (from 32 to 63 when NoPre is asserted)
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- BitCounter[6:0] <= 7'h0;
- else
- begin
- if(MdcEn)
- begin
- if(InProgress)
- begin
- if(NoPre & ( BitCounter == 7'h0 ))
- BitCounter[6:0] <= 7'h21;
- else
- BitCounter[6:0] <= BitCounter[6:0] + 1'b1;
- end
- else
- BitCounter[6:0] <= 7'h0;
- end
- end
-end
-
-
-// Operation ends when the Bit Counter reaches 63
-assign EndOp = BitCounter==63;
-
-assign ByteSelect[0] = InProgress & ((NoPre & (BitCounter == 7'h0)) | (~NoPre & (BitCounter == 7'h20)));
-assign ByteSelect[1] = InProgress & (BitCounter == 7'h28);
-assign ByteSelect[2] = InProgress & WriteOp & (BitCounter == 7'h30);
-assign ByteSelect[3] = InProgress & WriteOp & (BitCounter == 7'h38);
-
-
-// Latch Byte selects which part of Read Status Data is updated from the shift register
-assign LatchByte1_d2 = InProgress & ~WriteOp & BitCounter == 7'h37;
-assign LatchByte0_d2 = InProgress & ~WriteOp & BitCounter == 7'h3F;
-
-wire MdcEn_n;
-
-// Connecting the Clock Generator Module
-eth_clockgen clkgen(.Clk(Clk), .Reset(Reset), .Divider(Divider[7:0]), .MdcEn(MdcEn), .MdcEn_n(MdcEn_n), .Mdc(Mdc)
- );
-
-// Connecting the Shift Register Module
-eth_shiftreg shftrg(.Clk(Clk), .Reset(Reset), .MdcEn_n(MdcEn_n), .Mdi(Mdi), .Fiad(Fiad), .Rgad(Rgad),
- .CtrlData(CtrlData), .WriteOp(WriteOp), .ByteSelect(ByteSelect), .LatchByte(LatchByte),
- .ShiftedBit(ShiftedBit), .Prsd(Prsd), .LinkFail(LinkFail)
- );
-
-// Connecting the Output Control Module
-eth_outputcontrol outctrl(.Clk(Clk), .Reset(Reset), .MdcEn_n(MdcEn_n), .InProgress(InProgress),
- .ShiftedBit(ShiftedBit), .BitCounter(BitCounter), .WriteOp(WriteOp), .NoPre(NoPre),
- .Mdo(Mdo), .MdoEn(MdoEn)
- );
-
-endmodule
diff --git a/eth/rtl/verilog/flow_ctrl_rx.v b/eth/rtl/verilog/flow_ctrl_rx.v deleted file mode 100644 index 6654c626b..000000000 --- a/eth/rtl/verilog/flow_ctrl_rx.v +++ /dev/null @@ -1,86 +0,0 @@ -
-// RX side of flow control -- when we are running out of RX space, send a PAUSE
-
-module flow_ctrl_rx
- (input rst,
- //host processor
- input pause_frame_send_en,
- input [15:0] pause_quanta_set,
- input [15:0] fc_hwmark,
- input [15:0] fc_lwmark,
- input [15:0] fc_padtime,
- // From MAC_rx_ctrl
- input rx_clk,
- input [15:0] rx_fifo_space,
- // MAC_tx_ctrl
- input tx_clk,
- output reg xoff_gen,
- output reg xon_gen,
- input xoff_gen_complete,
- input xon_gen_complete
- );
-
- // ******************************************************************************
- // Force our TX to send a PAUSE frame because our RX is nearly full
- // ******************************************************************************
-
- reg xon_int, xoff_int;
- reg [21:0] countdown;
-
- always @(posedge rx_clk or posedge rst)
- if(rst)
- begin
- xon_int <= 0;
- xoff_int <= 0;
- end
- else
- begin
- xon_int <= 0;
- xoff_int <= 0;
- if(pause_frame_send_en)
- if(countdown == 0)
- if(rx_fifo_space < fc_lwmark)
- xoff_int <= 1;
- else
- ;
- else
- if(rx_fifo_space > fc_hwmark)
- xon_int <= 1;
- end // else: !if(rst)
-
- reg xoff_int_d1, xon_int_d1;
-
- always @(posedge rx_clk)
- xon_int_d1 <= xon_int;
- always @(posedge rx_clk)
- xoff_int_d1 <= xoff_int;
-
- always @ (posedge tx_clk or posedge rst)
- if (rst)
- xoff_gen <=0;
- else if (xoff_gen_complete)
- xoff_gen <=0;
- else if (xoff_int | xoff_int_d1)
- xoff_gen <=1;
-
- always @ (posedge tx_clk or posedge rst)
- if (rst)
- xon_gen <=0;
- else if (xon_gen_complete)
- xon_gen <=0;
- else if (xon_int | xon_int_d1)
- xon_gen <=1;
-
- wire [21:0] pq_reduced = {pause_quanta_set,6'd0} - {6'd0,fc_padtime};
-
- always @(posedge tx_clk or posedge rst)
- if(rst)
- countdown <= 0;
- else if(xoff_gen)
- countdown <= pq_reduced;
- else if(xon_gen)
- countdown <= 0;
- else if(countdown != 0)
- countdown <= countdown - 1;
-
-endmodule // flow_ctrl
diff --git a/eth/rtl/verilog/flow_ctrl_tx.v b/eth/rtl/verilog/flow_ctrl_tx.v deleted file mode 100644 index 9f7556de4..000000000 --- a/eth/rtl/verilog/flow_ctrl_tx.v +++ /dev/null @@ -1,36 +0,0 @@ -
-// TX side of flow control -- when other side sends PAUSE, we wait
-
-module flow_ctrl_tx
- (input rst,
- input tx_clk,
- //host processor
- input tx_pause_en,
- // From MAC_rx_ctrl
- input [15:0] pause_quanta,
- input pause_quanta_val,
- // MAC_tx_ctrl
- output pause_apply,
- input pause_quanta_sub);
-
- // ******************************************************************************
- // Inhibit our TX from transmitting because they sent us a PAUSE frame
- // ******************************************************************************
-
- reg [15:0] pause_quanta_counter;
- reg pqval_d1, pqval_d2;
-
- always @(posedge tx_clk) pqval_d1 <= pause_quanta_val;
- always @(posedge tx_clk) pqval_d2 <= pqval_d1;
-
- always @ (posedge tx_clk or posedge rst)
- if (rst)
- pause_quanta_counter <= 0;
- else if (pqval_d1 & ~pqval_d2)
- pause_quanta_counter <= pause_quanta;
- else if((pause_quanta_counter!=0) & pause_quanta_sub)
- pause_quanta_counter <= pause_quanta_counter - 1;
-
- assign pause_apply = tx_pause_en & (pause_quanta_counter != 0);
-
-endmodule // flow_ctrl
diff --git a/eth/rtl/verilog/header.vh b/eth/rtl/verilog/header.vh deleted file mode 100644 index ca0b580e4..000000000 --- a/eth/rtl/verilog/header.vh +++ /dev/null @@ -1,7 +0,0 @@ -`define MAC_SOURCE_REPLACE_EN 1
-`define MAC_TARGET_CHECK_EN 1
-`define MAC_BROADCAST_FILTER_EN 1
-`define MAC_TX_FF_DEPTH 9
-`define MAC_RX_FF_DEPTH 9
-`define MAC_TARGET_XILINX 1
-// `define MAC_TARGET_ALTERA 1
diff --git a/eth/rtl/verilog/miim/eth_clockgen.v b/eth/rtl/verilog/miim/eth_clockgen.v deleted file mode 100644 index 9da732f7f..000000000 --- a/eth/rtl/verilog/miim/eth_clockgen.v +++ /dev/null @@ -1,141 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// eth_clockgen.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects/ethmac/ ////
-//// ////
-//// Author(s): ////
-//// - Igor Mohor (igorM@opencores.org) ////
-//// ////
-//// All additional information is avaliable in the Readme.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: eth_clockgen.v,v $
-// Revision 1.2 2005/12/13 12:54:49 maverickist
-// first simulation passed
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-// Revision 1.2 2005/04/27 15:58:45 Administrator
-// no message
-//
-// Revision 1.1.1.1 2004/12/15 06:38:54 Administrator
-// no message
-//
-// Revision 1.3 2002/01/23 10:28:16 mohor
-// Link in the header changed.
-//
-// Revision 1.2 2001/10/19 08:43:51 mohor
-// eth_timescale.v changed to timescale.v This is done because of the
-// simulation of the few cores in a one joined project.
-//
-// Revision 1.1 2001/08/06 14:44:29 mohor
-// A define FPGA added to select between Artisan RAM (for ASIC) and Block Ram (For Virtex).
-// Include files fixed to contain no path.
-// File names and module names changed ta have a eth_ prologue in the name.
-// File eth_timescale.v is used to define timescale
-// All pin names on the top module are changed to contain _I, _O or _OE at the end.
-// Bidirectional signal MDIO is changed to three signals (Mdc_O, Mdi_I, Mdo_O
-// and Mdo_OE. The bidirectional signal must be created on the top level. This
-// is done due to the ASIC tools.
-//
-// Revision 1.1 2001/07/30 21:23:42 mohor
-// Directory structure changed. Files checked and joind together.
-//
-// Revision 1.3 2001/06/01 22:28:55 mohor
-// This files (MIIM) are fully working. They were thoroughly tested. The testbench is not updated.
-//
-//
-
-module eth_clockgen(Clk, Reset, Divider, MdcEn, MdcEn_n, Mdc);
-
-//parameter Tp=1;
-
-input Clk; // Input clock (Host clock)
-input Reset; // Reset signal
-input [7:0] Divider; // Divider (input clock will be divided by the Divider[7:0])
-
-output Mdc; // Output clock
-output MdcEn; // Enable signal is asserted for one Clk period before Mdc rises.
-output MdcEn_n; // Enable signal is asserted for one Clk period before Mdc falls.
-
-reg Mdc;
-reg [7:0] Counter;
-
-wire CountEq0;
-wire [7:0] CounterPreset;
-wire [7:0] TempDivider;
-
-
-assign TempDivider[7:0] = (Divider[7:0]<2)? 8'h02 : Divider[7:0]; // If smaller than 2
-assign CounterPreset[7:0] = (TempDivider[7:0]>>1) -1; // We are counting half of period
-
-
-// Counter counts half period
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- Counter[7:0] <= 8'h1;
- else
- begin
- if(CountEq0)
- begin
- Counter[7:0] <= CounterPreset[7:0];
- end
- else
- Counter[7:0] <= Counter - 8'h1;
- end
-end
-
-
-// Mdc is asserted every other half period
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- Mdc <= 1'b0;
- else
- begin
- if(CountEq0)
- Mdc <= ~Mdc;
- end
-end
-
-
-assign CountEq0 = Counter == 8'h0;
-assign MdcEn = CountEq0 & ~Mdc;
-assign MdcEn_n = CountEq0 & Mdc;
-
-endmodule
-
-
diff --git a/eth/rtl/verilog/miim/eth_outputcontrol.v b/eth/rtl/verilog/miim/eth_outputcontrol.v deleted file mode 100644 index 3df6c560a..000000000 --- a/eth/rtl/verilog/miim/eth_outputcontrol.v +++ /dev/null @@ -1,158 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// eth_outputcontrol.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects/ethmac/ ////
-//// ////
-//// Author(s): ////
-//// - Igor Mohor (igorM@opencores.org) ////
-//// ////
-//// All additional information is avaliable in the Readme.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: eth_outputcontrol.v,v $
-// Revision 1.2 2005/12/13 12:54:49 maverickist
-// first simulation passed
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-// Revision 1.2 2005/04/27 15:58:46 Administrator
-// no message
-//
-// Revision 1.1.1.1 2004/12/15 06:38:54 Administrator
-// no message
-//
-// Revision 1.4 2002/07/09 20:11:59 mohor
-// Comment removed.
-//
-// Revision 1.3 2002/01/23 10:28:16 mohor
-// Link in the header changed.
-//
-// Revision 1.2 2001/10/19 08:43:51 mohor
-// eth_timescale.v changed to timescale.v This is done because of the
-// simulation of the few cores in a one joined project.
-//
-// Revision 1.1 2001/08/06 14:44:29 mohor
-// A define FPGA added to select between Artisan RAM (for ASIC) and Block Ram (For Virtex).
-// Include files fixed to contain no path.
-// File names and module names changed ta have a eth_ prologue in the name.
-// File eth_timescale.v is used to define timescale
-// All pin names on the top module are changed to contain _I, _O or _OE at the end.
-// Bidirectional signal MDIO is changed to three signals (Mdc_O, Mdi_I, Mdo_O
-// and Mdo_OE. The bidirectional signal must be created on the top level. This
-// is done due to the ASIC tools.
-//
-// Revision 1.1 2001/07/30 21:23:42 mohor
-// Directory structure changed. Files checked and joind together.
-//
-// Revision 1.3 2001/06/01 22:28:56 mohor
-// This files (MIIM) are fully working. They were thoroughly tested. The testbench is not updated.
-//
-//
-
-module eth_outputcontrol(Clk, Reset, InProgress, ShiftedBit, BitCounter, WriteOp, NoPre, MdcEn_n, Mdo, MdoEn);
-
-input Clk; // Host Clock
-input Reset; // General Reset
-input WriteOp; // Write Operation Latch (When asserted, write operation is in progress)
-input NoPre; // No Preamble (no 32-bit preamble)
-input InProgress; // Operation in progress
-input ShiftedBit; // This bit is output of the shift register and is connected to the Mdo signal
-input [6:0] BitCounter; // Bit Counter
-input MdcEn_n; // MII Management Data Clock Enable signal is asserted for one Clk period before Mdc falls.
-
-output Mdo; // MII Management Data Output
-output MdoEn; // MII Management Data Output Enable
-
-wire SerialEn;
-
-reg MdoEn_2d;
-reg MdoEn_d;
-reg MdoEn;
-
-reg Mdo_2d;
-reg Mdo_d;
-reg Mdo; // MII Management Data Output
-
-
-
-// Generation of the Serial Enable signal (enables the serialization of the data)
-assign SerialEn = WriteOp & InProgress & ( BitCounter>31 | ( ( BitCounter == 0 ) & NoPre ) )
- | ~WriteOp & InProgress & (( BitCounter>31 & BitCounter<46 ) | ( ( BitCounter == 0 ) & NoPre ));
-
-
-// Generation of the MdoEn signal
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- MdoEn_2d <= 1'b0;
- MdoEn_d <= 1'b0;
- MdoEn <= 1'b0;
- end
- else
- begin
- if(MdcEn_n)
- begin
- MdoEn_2d <= SerialEn | InProgress & BitCounter<32;
- MdoEn_d <= MdoEn_2d;
- MdoEn <= MdoEn_d;
- end
- end
-end
-
-
-// Generation of the Mdo signal.
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- Mdo_2d <= 1'b0;
- Mdo_d <= 1'b0;
- Mdo <= 1'b0;
- end
- else
- begin
- if(MdcEn_n)
- begin
- Mdo_2d <= ~SerialEn & BitCounter<32;
- Mdo_d <= ShiftedBit | Mdo_2d;
- Mdo <= Mdo_d;
- end
- end
-end
-
-
-
-endmodule
diff --git a/eth/rtl/verilog/miim/eth_shiftreg.v b/eth/rtl/verilog/miim/eth_shiftreg.v deleted file mode 100644 index 0b97bb7bc..000000000 --- a/eth/rtl/verilog/miim/eth_shiftreg.v +++ /dev/null @@ -1,159 +0,0 @@ -//////////////////////////////////////////////////////////////////////
-//// ////
-//// eth_shiftreg.v ////
-//// ////
-//// This file is part of the Ethernet IP core project ////
-//// http://www.opencores.org/projects/ethmac/ ////
-//// ////
-//// Author(s): ////
-//// - Igor Mohor (igorM@opencores.org) ////
-//// ////
-//// All additional information is avaliable in the Readme.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: eth_shiftreg.v,v $
-// Revision 1.2 2005/12/13 12:54:49 maverickist
-// first simulation passed
-//
-// Revision 1.1.1.1 2005/12/13 01:51:45 Administrator
-// no message
-//
-// Revision 1.2 2005/04/27 15:58:47 Administrator
-// no message
-//
-// Revision 1.1.1.1 2004/12/15 06:38:54 Administrator
-// no message
-//
-// Revision 1.5 2002/08/14 18:16:59 mohor
-// LinkFail signal was not latching appropriate bit.
-//
-// Revision 1.4 2002/03/02 21:06:01 mohor
-// LinkFail signal was not latching appropriate bit.
-//
-// Revision 1.3 2002/01/23 10:28:16 mohor
-// Link in the header changed.
-//
-// Revision 1.2 2001/10/19 08:43:51 mohor
-// eth_timescale.v changed to timescale.v This is done because of the
-// simulation of the few cores in a one joined project.
-//
-// Revision 1.1 2001/08/06 14:44:29 mohor
-// A define FPGA added to select between Artisan RAM (for ASIC) and Block Ram (For Virtex).
-// Include files fixed to contain no path.
-// File names and module names changed ta have a eth_ prologue in the name.
-// File eth_timescale.v is used to define timescale
-// All pin names on the top module are changed to contain _I, _O or _OE at the end.
-// Bidirectional signal MDIO is changed to three signals (Mdc_O, Mdi_I, Mdo_O
-// and Mdo_OE. The bidirectional signal must be created on the top level. This
-// is done due to the ASIC tools.
-//
-// Revision 1.1 2001/07/30 21:23:42 mohor
-// Directory structure changed. Files checked and joind together.
-//
-// Revision 1.3 2001/06/01 22:28:56 mohor
-// This files (MIIM) are fully working. They were thoroughly tested. The testbench is not updated.
-//
-//
-
-module eth_shiftreg(Clk, Reset, MdcEn_n, Mdi, Fiad, Rgad, CtrlData, WriteOp, ByteSelect,
- LatchByte, ShiftedBit, Prsd, LinkFail);
-
-
-input Clk; // Input clock (Host clock)
-input Reset; // Reset signal
-input MdcEn_n; // Enable signal is asserted for one Clk period before Mdc falls.
-input Mdi; // MII input data
-input [4:0] Fiad; // PHY address
-input [4:0] Rgad; // Register address (within the selected PHY)
-input [15:0]CtrlData; // Control data (data to be written to the PHY)
-input WriteOp; // The current operation is a PHY register write operation
-input [3:0] ByteSelect; // Byte select
-input [1:0] LatchByte; // Byte select for latching (read operation)
-
-output ShiftedBit; // Bit shifted out of the shift register
-output[15:0]Prsd; // Read Status Data (data read from the PHY)
-output LinkFail; // Link Integrity Signal
-
-reg [7:0] ShiftReg; // Shift register for shifting the data in and out
-reg [15:0]Prsd;
-reg LinkFail;
-
-
-
-
-// ShiftReg[7:0] :: Shift Register Data
-always @ (posedge Clk or posedge Reset)
-begin
- if(Reset)
- begin
- ShiftReg[7:0] <= 8'h0;
- Prsd[15:0] <= 16'h0;
- LinkFail <= 1'b0;
- end
- else
- begin
- if(MdcEn_n)
- begin
- if(|ByteSelect)
- begin
- case (ByteSelect[3:0])
- 4'h1 : ShiftReg[7:0] <= {2'b01, ~WriteOp, WriteOp, Fiad[4:1]};
- 4'h2 : ShiftReg[7:0] <= {Fiad[0], Rgad[4:0], 2'b10};
- 4'h4 : ShiftReg[7:0] <= CtrlData[15:8];
- 4'h8 : ShiftReg[7:0] <= CtrlData[7:0];
- default : ShiftReg[7:0] <= 8'h0;
- endcase
- end
- else
- begin
- ShiftReg[7:0] <= {ShiftReg[6:0], Mdi};
- if(LatchByte[0])
- begin
- Prsd[7:0] <= {ShiftReg[6:0], Mdi};
- if(Rgad == 5'h01)
- LinkFail <= ~ShiftReg[1]; // this is bit [2], because it is not shifted yet
- end
- else
- begin
- if(LatchByte[1])
- Prsd[15:8] <= {ShiftReg[6:0], Mdi};
- end
- end
- end
- end
-end
-
-
-assign ShiftedBit = ShiftReg[7];
-
-
-endmodule
diff --git a/eth/rx_prot_engine.v b/eth/rx_prot_engine.v deleted file mode 100644 index d34f168d7..000000000 --- a/eth/rx_prot_engine.v +++ /dev/null @@ -1,156 +0,0 @@ - -module rx_prot_engine - #(parameter FIFO_SIZE=11) - (input clk, input rst, - - input Rx_mac_ra, - output Rx_mac_rd, - input [31:0] Rx_mac_data, - input [1:0] Rx_mac_BE, - input Rx_mac_pa, - input Rx_mac_sop, - input Rx_mac_eop, - input Rx_mac_err, - - output [31:0] wr_dat_o, - output wr_write_o, - output wr_done_o, - output wr_error_o, - input wr_ready_i, - input wr_full_i, - output wr_flag_o, - - input set_stb, - input [7:0] set_addr, - input [31:0] set_data, - - output [15:0] rx_fifo_status, - output reg [7:0] rx_seqnum, - output reg [7:0] rx_channel, - output [7:0] rx_flags - ); - - wire read, write, full, empty; - wire eop_i, err_i, eop_o, err_o, flag_i, sop_i, flag_o, sop_o; - wire [31:0] dat_i, dat_o; - reg xfer_active; - - wire [3:0] hdr_adr; - wire [31:0] hdr_dat; - - header_ram #(.REGNUM(48),.WIDTH(32)) rx_header_ram - (.clk(clk),.set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .addr(hdr_adr),.q(hdr_dat)); - - // Buffer interface side - always @(posedge clk) - if(rst) - xfer_active <= 0; - else if(wr_ready_i & ~empty) - xfer_active <= 1; - else if(eop_o | err_o | wr_full_i) - xfer_active <= 0; - - assign wr_done_o = eop_o & wr_write_o; - assign wr_error_o = err_o & wr_write_o; - assign wr_dat_o = dat_o; - assign wr_write_o = xfer_active & ~empty; - assign read = wr_write_o; - - // FIFO in the middle - cascadefifo2 #(.WIDTH(36),.SIZE(11)) rx_prot_fifo - (.clk(clk),.rst(rst), - .datain({flag_i,sop_i,eop_i,err_i,dat_i}),.write(write),.full(full), - .dataout({flag_o,sop_o,eop_o,err_o,dat_o}),.read(read),.empty(empty), - .clear(0),.fifo_space(rx_fifo_status)); - - // MAC side - localparam ETH_TYPE = 16'hBEEF; - - reg [2:0] prot_state; - localparam PROT_IDLE = 0; - localparam PROT_HDR1 = 1; - localparam PROT_HDR2 = 2; - localparam PROT_HDR3 = 3; - localparam PROT_HDR4 = 4; - localparam PROT_HDR5 = 5; - localparam PROT_PKT = 6; - - // Things to control: flag_i, sop_i, eop_i, err_i, dat_i, write, Rx_mac_rd - // Inputs to SM: Rx_mac_sop, Rx_mac_eop, Rx_mac_ra, Rx_mac_pa, - // Rx_mac_BE, Rx_mac_err, full - - reg flag; - assign dat_i = Rx_mac_data; - assign sop_i = Rx_mac_sop; - assign eop_i = Rx_mac_eop; - assign err_i = Rx_mac_err; - assign flag_i = flag; - assign wr_flag_o = flag_o; - assign Rx_mac_rd = (prot_state != PROT_IDLE) && (~full|~Rx_mac_pa); - assign write = (prot_state != PROT_IDLE) && ~full && Rx_mac_pa; - - assign hdr_adr = {1'b0,prot_state[2:0]}; - - wire [7:0] rx_seqnum_p1 = rx_seqnum + 1; - - always @(posedge clk) - if(rst) - begin - prot_state <= PROT_IDLE; - flag <= 0; - end - else if(prot_state == PROT_IDLE) - begin - flag <= 0; - if(Rx_mac_ra) - prot_state <= PROT_HDR1; - end - else if(write) - case(prot_state) - PROT_HDR1 : - begin - prot_state <= PROT_HDR2; - if(hdr_dat != Rx_mac_data) - flag <= 1; - end - PROT_HDR2 : - begin - prot_state <= PROT_HDR3; - if(hdr_dat != Rx_mac_data) - flag <= 1; - end - PROT_HDR3 : - begin - prot_state <= PROT_HDR4; - if(hdr_dat != Rx_mac_data) - flag <= 1; - end - PROT_HDR4 : - begin - prot_state <= PROT_HDR5; - if(hdr_dat[31:16] != Rx_mac_data[31:16]) - flag <= 1; - rx_channel <= hdr_dat[15:8]; - end - PROT_HDR5 : - begin - prot_state <= PROT_PKT; - if((rx_seqnum_p1) != Rx_mac_data[15:8]) - flag <= 1; - end - PROT_PKT : - if(Rx_mac_eop | Rx_mac_err) - prot_state <= PROT_IDLE; - endcase // case(prot_state) - - always @(posedge clk) - if(rst) - rx_seqnum <= 8'hFF; - else if(set_stb & (set_addr == 54)) - rx_seqnum <= set_data[7:0]; - else if(write & (prot_state == PROT_HDR5) & ((rx_seqnum_p1) == Rx_mac_data[15:8]) & ~flag) - rx_seqnum <= rx_seqnum + 1; - - // Error cases -- Rx_mac_error, BE != 0 -endmodule // rx_prot_engine diff --git a/eth/tx_prot_engine.v b/eth/tx_prot_engine.v deleted file mode 100644 index 894d74a11..000000000 --- a/eth/tx_prot_engine.v +++ /dev/null @@ -1,144 +0,0 @@ - -module tx_prot_engine - (input clk, input rst, - - // To MAC - input Tx_mac_wa, - output Tx_mac_wr, - output [31:0] Tx_mac_data, - output [1:0] Tx_mac_BE, - output Tx_mac_sop, - output Tx_mac_eop, - - // To buffer interface - input [31:0] rd_dat_i, - output rd_read_o, - output rd_done_o, - output rd_error_o, - input rd_sop_i, - input rd_eop_i, - - // To control - input set_stb, - input [7:0] set_addr, - input [31:0] set_data, - - // Protocol Stuff - input [15:0] rx_fifo_status, - input [7:0] rx_seqnum - //input [7:0] tx_channel, - //input [7:0] tx_flags - ); - - wire [3:0] hdr_adr; - wire [31:0] hdr_dat; - wire [7:0] tx_channel; - - header_ram #(.REGNUM(32),.WIDTH(32)) tx_header_ram - (.clk(clk),.set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .addr(hdr_adr),.q(hdr_dat)); - - setting_reg #(.my_addr(32)) sr_channel - (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr),.in(set_data), - .out(tx_channel),.changed()); - - // Might as well use a shortfifo here since they are basically free - wire empty, full, sfifo_write, sfifo_read; - wire [33:0] sfifo_in, sfifo_out; - - shortfifo #(.WIDTH(34)) txmac_sfifo - (.clk(clk),.rst(rst),.clear(0), - .datain(sfifo_in),.write(sfifo_write),.full(full), - .dataout(sfifo_out),.read(sfifo_read),.empty(empty)); - - // MAC side signals - // Inputs -- Tx_mac_wa, sfifo_out, empty - // outputs -- sfifo_read, Tx_mac_data, Tx_mac_wr, Tx_mac_BE, Tx_mac_sop, Tx_mac_eop - - // We are allowed to do one more write after we are told the FIFO is full - // This allows us to register the _wa signal and speed up timing. - reg tx_mac_wa_d1; - always @(posedge clk) - tx_mac_wa_d1 <= Tx_mac_wa; - - reg [2:0] prot_state; - localparam PROT_IDLE = 0; - localparam PROT_HDR1 = 1; - localparam PROT_HDR2 = 2; - localparam PROT_HDR3 = 3; - localparam PROT_HDR4 = 4; - localparam PROT_HDR5 = 5; - localparam PROT_PKT = 6; - - reg [7:0] tx_seqnum; - reg all_match; - always @(posedge clk) - if(rst) - tx_seqnum <= 0; - else if(set_stb & (set_addr == 36)) - tx_seqnum <= set_data[7:0]; - else if(tx_mac_wa_d1 & all_match & (prot_state == PROT_HDR5)) - tx_seqnum <= tx_seqnum + 1; - - always @(posedge clk) - if(rst) - prot_state <= PROT_IDLE; - else - if(tx_mac_wa_d1 & ~empty) - case(prot_state) - PROT_IDLE : - prot_state <= PROT_HDR1; - PROT_HDR1 : - prot_state <= PROT_HDR2; - PROT_HDR2 : - prot_state <= PROT_HDR3; - PROT_HDR3 : - prot_state <= PROT_HDR4; - PROT_HDR4 : - prot_state <= PROT_HDR5; - PROT_HDR5 : - prot_state <= PROT_PKT; - PROT_PKT : - if(sfifo_out[32] & ~empty) - prot_state <= PROT_IDLE; - default : - prot_state <= PROT_IDLE; - endcase // case(prot_state) - - assign hdr_adr = {1'b0,prot_state}; - wire match = (hdr_dat == sfifo_out[31:0]); - always @(posedge clk) - if(prot_state == PROT_IDLE) - all_match <= 1; - else if(tx_mac_wa_d1 & ~empty & - ((prot_state==PROT_HDR1)|(prot_state==PROT_HDR2)|(prot_state==PROT_HDR3))) - all_match <= all_match & match; - - localparam ETH_TYPE = 16'hBEEF; - assign Tx_mac_data = - ((prot_state == PROT_HDR5) & all_match) ? {rx_fifo_status,tx_seqnum,rx_seqnum} : - sfifo_out[31:0]; - assign sfifo_read = (prot_state != PROT_IDLE) & ~empty & tx_mac_wa_d1; - assign Tx_mac_wr = sfifo_read; - assign Tx_mac_BE = 0; // Since we only deal with packets that are multiples of 32 bits long - assign Tx_mac_sop = sfifo_out[33]; - assign Tx_mac_eop = sfifo_out[32]; - - // BUFFER side signals - reg xfer_active; - always @(posedge clk) - if(rst) - xfer_active <= 0; - else if(rd_eop_i & ~full) - xfer_active <= 0; - else if(rd_sop_i) - xfer_active <= 1; - - assign sfifo_in = {rd_sop_i, rd_eop_i, rd_dat_i}; - assign sfifo_write = xfer_active & ~full; - - assign rd_read_o = sfifo_write; - assign rd_done_o = 0; // Always send everything we're given? - assign rd_error_o = 0; // No possible error situations? - -endmodule // tx_prot_engine diff --git a/models/adc_model.v b/models/adc_model.v index 247472c35..e5a3ee0d8 100644 --- a/models/adc_model.v +++ b/models/adc_model.v @@ -22,10 +22,9 @@ module adc_model assign adc_ovf_b = adc_oe_b ? 1'b0 : 1'bz; real phase = 0; - real sample_rate = 100000000; - real freq = 330000/sample_rate; // 330 kHz + real freq = 330000/100000000; - real scale = math.pow(2,13)-2; + real scale = 8190; // math.pow(2,13)-2; always @(posedge clk) if(rst) begin diff --git a/sdr_lib/rx_control.v b/sdr_lib/rx_control.v index d41a28bcf..0adeb0794 100644 --- a/sdr_lib/rx_control.v +++ b/sdr_lib/rx_control.v @@ -9,15 +9,12 @@ module rx_control input [31:0] master_time, output overrun, - // To Buffer interface + // To FIFO interface of Buffer Pool output [31:0] wr_dat_o, - output wr_write_o, - output wr_done_o, - output wr_error_o, - + output [3:0] wr_flags_o, input wr_ready_i, - input wr_full_i, - + output wr_ready_o, + // From DSP Core input [31:0] sample, output run, @@ -66,47 +63,17 @@ module rx_control .read(read_ctrl), .empty(empty_ctrl) ); // Buffer interface to internal FIFO - wire write, full, read, empty; - wire sop_o, eop_o; - - reg xfer_state; - localparam XFER_IDLE = 1'b0; - localparam XFER_GO = 1'b1; - - always @(posedge clk) - if(rst) - xfer_state <= XFER_IDLE; - else - if(clear_overrun) - xfer_state <= XFER_IDLE; - else - case(xfer_state) - XFER_IDLE : - if(wr_ready_i) - xfer_state <= XFER_GO; - XFER_GO : - if((eop_o | wr_full_i) & wr_write_o) - xfer_state <= XFER_IDLE; - default : - xfer_state <= XFER_IDLE; - endcase // case(xfer_state) - - assign wr_write_o = (xfer_state == XFER_GO) & ~empty; - assign wr_done_o = (eop_o & wr_write_o); - assign wr_error_o = 0; // FIXME add check here for eop if we have wr_full_i once we have IBS - - assign read = wr_write_o | (~empty & ~sop_o); // FIXME what if there is junk between packets? - - wire [33:0] fifo_line; + wire have_space, write; + wire [35:0] fifo_line; // Internal FIFO, size 9 is 2K, size 10 is 4K - cascadefifo2 #(.WIDTH(34),.SIZE(FIFOSIZE)) rxfifo - (.clk(clk),.rst(rst),.clear(clear_overrun), - .datain(fifo_line), .write(write), .full(full), - .dataout({sop_o,eop_o,wr_dat_o}), .read(read), .empty(empty), + fifo_cascade #(.WIDTH(36),.SIZE(FIFOSIZE)) rxfifo + (.clk(clk),.reset(rst),.clear(clear_overrun), + .datain(fifo_line), .src_rdy_i(write), .dst_rdy_o(have_space), + .dataout({wr_flags_o,wr_dat_o}), .src_rdy_o(wr_ready_o), .dst_rdy_i(wr_ready_i), .space(),.occupied(fifo_occupied) ); - assign fifo_full = full; - assign fifo_empty = empty; + assign fifo_full = ~have_space; + assign fifo_empty = ~wr_ready_o; // Internal FIFO to DSP interface reg [22:0] lines_left; @@ -161,13 +128,13 @@ module rx_control else if(too_late) ibs_state <= IBS_OVERRUN; IBS_FIRSTLINE : - if(full | strobe) + if(~have_space | strobe) ibs_state <= IBS_OVERRUN; else ibs_state <= IBS_RUNNING; IBS_RUNNING : if(strobe) - if(full) + if(~have_space) ibs_state <= IBS_OVERRUN; else begin @@ -193,21 +160,21 @@ module rx_control end else lines_left_frame <= lines_left_frame - 1; - end // else: !if(full) + end // else: !if(~have_space) endcase // case(ibs_state) - assign fifo_line = (ibs_state == IBS_FIRSTLINE) ? {1'b1,1'b0,master_time} : - {1'b0,((lines_left==1)|(lines_left_frame==1)),sample}; + assign fifo_line = (ibs_state == IBS_FIRSTLINE) ? {2'b0,1'b0,1'b1,master_time} : + {2'b0,((lines_left==1)|(lines_left_frame==1)),1'b0,sample}; - assign write = ((ibs_state == IBS_FIRSTLINE) | strobe) & ~full; // & (ibs_state == IBS_RUNNING) should strobe only when running + assign write = ((ibs_state == IBS_FIRSTLINE) | strobe) & have_space; // & (ibs_state == IBS_RUNNING) should strobe only when running assign overrun = (ibs_state == IBS_OVERRUN); assign run = (ibs_state == IBS_RUNNING) | (ibs_state == IBS_FIRSTLINE); assign read_ctrl = ( (ibs_state == IBS_IDLE) | - ((ibs_state == IBS_RUNNING) & strobe & ~full & (lines_left==1) & chain) ) + ((ibs_state == IBS_RUNNING) & strobe & have_space & (lines_left==1) & chain) ) & ~empty_ctrl; - assign debug_rx = { 6'd0,send_imm,chain, - wr_write_o, wr_done_o, wr_ready_i, wr_full_i,xfer_state,eop_o, sop_o, run, - write,full,read,empty,write_ctrl,full_ctrl,read_ctrl,empty_ctrl, + assign debug_rx = { 8'd0, + 1'd0, send_imm, chain, wr_ready_i,wr_ready_o, 2'b0, run, + write,have_space,wr_flags_o[1:0],write_ctrl,full_ctrl,read_ctrl,empty_ctrl, sc_pre1, clear_overrun, go_now, too_late, overrun, ibs_state[2:0] }; endmodule // rx_control diff --git a/sdr_lib/tx_control.v b/sdr_lib/tx_control.v index 0c4ab1a52..e5fed0b93 100644 --- a/sdr_lib/tx_control.v +++ b/sdr_lib/tx_control.v @@ -9,13 +9,11 @@ module tx_control input [31:0] master_time, output underrun, - // To Buffer interface + // To FIFO interface from Buffer Pool input [31:0] rd_dat_i, - input rd_sop_i, - input rd_eop_i, - output rd_read_o, - output rd_done_o, - output rd_error_o, + input [3:0] rd_flags_i, + input rd_ready_i, + output rd_ready_o, // To DSP Core output [31:0] sample, @@ -31,6 +29,10 @@ module tx_control output [31:0] debug ); + wire rd_sop_i = rd_flags_i[0]; // Unused + wire rd_eop_i = rd_flags_i[1]; + wire rd_occ_i = rd_flags_i[3:2]; // Unused, should always be 0 + // Buffer interface to internal FIFO wire write_data, write_ctrl, full_data, full_ctrl; wire read_data, read_ctrl, empty_data, empty_ctrl; @@ -39,57 +41,63 @@ module tx_control reg [2:0] held_flags; localparam XFER_IDLE = 0; - localparam XFER_1 = 1; - localparam XFER_2 = 2; - localparam XFER_DATA = 3; + localparam XFER_CTRL = 1; + localparam XFER_PKT = 2; + // Add underrun state? always @(posedge clk) if(rst) xfer_state <= XFER_IDLE; + else if(clear_state) + xfer_state <= XFER_IDLE; else - if(clear_state) - xfer_state <= XFER_IDLE; - else + if(rd_ready_i & rd_ready_o) case(xfer_state) XFER_IDLE : - if(rd_sop_i) - xfer_state <= XFER_1; - XFER_1 : begin - xfer_state <= XFER_2; + xfer_state <= XFER_CTRL; held_flags <= rd_dat_i[2:0]; end - XFER_2 : - if(~full_ctrl) - xfer_state <= XFER_DATA; - XFER_DATA : - if(rd_eop_i & ~full_data) + XFER_CTRL : + xfer_state <= XFER_PKT; + XFER_PKT : + if(rd_eop_i) xfer_state <= XFER_IDLE; endcase // case(xfer_state) + + wire have_data_space; + assign full_data = ~have_data_space; - assign write_data = (xfer_state == XFER_DATA) & ~full_data; - assign write_ctrl = (xfer_state == XFER_2) & ~full_ctrl; + assign write_data = (xfer_state == XFER_PKT) & rd_ready_i & rd_ready_o; + assign write_ctrl = (xfer_state == XFER_CTRL) & rd_ready_i & rd_ready_o; - assign rd_read_o = (xfer_state == XFER_1) | write_data | write_ctrl; - assign rd_done_o = 0; // Always take everything we're given - assign rd_error_o = 0; // Should we indicate overruns here? + assign rd_ready_o = ~full_data & ~full_ctrl; wire [31:0] data_o; - wire sop_o, eop_o, eob, sob, send_imm; + wire eop_o, eob, sob, send_imm; wire [31:0] sendtime; wire [4:0] occ_ctrl; - - cascadefifo2 #(.WIDTH(34),.SIZE(FIFOSIZE)) txctrlfifo +/* + cascadefifo2 #(.WIDTH(33),.SIZE(FIFOSIZE)) txctrlfifo (.clk(clk),.rst(rst),.clear(clear_state), - .datain({rd_sop_i,rd_eop_i,rd_dat_i}), .write(write_data), .full(full_data), - .dataout({sop_o,eop_o,data_o}), .read(read_data), .empty(empty_data), + .datain({rd_eop_i,rd_dat_i[31:0]}), .write(write_data), .full(full_data), + .dataout({eop_o,data_o}), .read(read_data), .empty(empty_data), + .space(), .occupied(fifo_occupied) ); +*/ + wire have_data; + assign empty_data = ~have_data; + + fifo_cascade #(.WIDTH(33),.SIZE(FIFOSIZE)) txctrlfifo + (.clk(clk),.reset(rst),.clear(clear_state), + .datain({rd_eop_i,rd_dat_i[31:0]}), .src_rdy_i(write_data), .dst_rdy_o(have_data_space), + .dataout({eop_o,data_o}), .src_rdy_o(have_data), .dst_rdy_i(read_data), .space(), .occupied(fifo_occupied) ); assign fifo_full = full_data; assign fifo_empty = empty_data; shortfifo #(.WIDTH(35)) ctrlfifo (.clk(clk),.rst(rst),.clear(clear_state), - .datain({held_flags[2:0],rd_dat_i}), .write(write_ctrl), .full(full_ctrl), + .datain({held_flags[2:0],rd_dat_i[31:0]}), .write(write_ctrl), .full(full_ctrl), .dataout({send_imm,sob,eob,sendtime}), .read(read_ctrl), .empty(empty_ctrl), .space(), .occupied(occ_ctrl) ); diff --git a/serdes/serdes.v b/serdes/serdes.v index 8429b8fd9..17049bfe6 100644 --- a/serdes/serdes.v +++ b/serdes/serdes.v @@ -7,12 +7,10 @@ module serdes (input clk, input rst, // TX side output ser_tx_clk, output [15:0] ser_t, output ser_tklsb, output ser_tkmsb, - input [31:0] rd_dat_i, output rd_read_o, output rd_done_o, output rd_error_o, - input rd_sop_i, input rd_eop_i, + input [31:0] rd_dat_i, input [3:0] rd_flags_i, output rd_ready_o, input rd_ready_i, // RX side input ser_rx_clk, input [15:0] ser_r, input ser_rklsb, input ser_rkmsb, - output [31:0] wr_dat_o, output wr_write_o, output wr_done_o, output wr_error_o, - input wr_ready_i, input wr_full_i, + output [31:0] wr_dat_o, output [3:0] wr_flags_o, output wr_ready_o, input wr_ready_i, output [15:0] tx_occupied, output tx_full, output tx_empty, output [15:0] rx_occupied, output rx_full, output rx_empty, @@ -29,8 +27,7 @@ module serdes serdes_tx #(.FIFOSIZE(TXFIFOSIZE)) serdes_tx (.clk(clk),.rst(rst), .ser_tx_clk(ser_tx_clk),.ser_t(ser_t),.ser_tklsb(ser_tklsb),.ser_tkmsb(ser_tkmsb), - .rd_dat_i(rd_dat_i),.rd_read_o(rd_read_o),.rd_done_o(rd_done_o),.rd_error_o(rd_error_o), - .rd_sop_i(rd_sop_i),.rd_eop_i(rd_eop_i), + .rd_dat_i(rd_dat_i),.rd_flags_i(rd_flags_i),.rd_ready_o(rd_ready_o),.rd_ready_i(rd_ready_i), .inhibit_tx(inhibit_tx), .send_xon(send_xon), .send_xoff(send_xoff), .sent(sent), .fifo_occupied(tx_occupied),.fifo_full(tx_full),.fifo_empty(tx_empty), .debug(debug_tx) ); @@ -38,8 +35,7 @@ module serdes serdes_rx #(.FIFOSIZE(RXFIFOSIZE)) serdes_rx (.clk(clk),.rst(rst), .ser_rx_clk(ser_rx_clk),.ser_r(ser_r),.ser_rklsb(ser_rklsb),.ser_rkmsb(ser_rkmsb), - .wr_dat_o(wr_dat_o),.wr_write_o(wr_write_o),.wr_done_o(wr_done_o),.wr_error_o(wr_error_o), - .wr_ready_i(wr_ready_i),.wr_full_i(wr_full_i), + .wr_dat_o(wr_dat_o),.wr_flags_o(wr_flags_o),.wr_ready_o(wr_ready_o),.wr_ready_i(wr_ready_i), .fifo_space(fifo_space), .xon_rcvd(xon_rcvd), .xoff_rcvd(xoff_rcvd), .fifo_occupied(rx_occupied),.fifo_full(rx_full),.fifo_empty(rx_empty), .serdes_link_up(serdes_link_up), .debug(debug_rx) ); @@ -55,13 +51,13 @@ module serdes //assign debug = { fifo_space, send_xon, send_xoff, debug_rx[13:0] }; //assign debug = debug_rx; - assign debug0 = { { debug_tx[3:0] /* xfer_active,state[2:0] */, rd_read_o, rd_done_o, rd_sop_i, rd_eop_i }, + assign debug0 = { { 2'b00, rd_ready_o, rd_ready_i, rd_flags_i[3:0]}, { debug_tx[5:4] /* full,empty */ , inhibit_tx, send_xon, send_xoff, sent, ser_tkmsb, ser_tklsb}, { ser_t[15:8] }, { ser_t[7:0] } }; assign debug1 = { { debug_rx[7:0] }, /* odd,xfer_active,sop_i,eop_i,error_i,state[2:0] */ - { wr_write_o, wr_error_o, wr_ready_i, wr_done_o, xon_rcvd, xoff_rcvd, ser_rkmsb, ser_rklsb }, + { wr_flags_o[1:0], wr_ready_i, wr_ready_o, xon_rcvd, xoff_rcvd, ser_rkmsb, ser_rklsb }, { ser_r[15:8] }, { ser_r[7:0] } }; endmodule // serdes diff --git a/serdes/serdes_rx.v b/serdes/serdes_rx.v index 8c488d7d7..afefccaa1 100644 --- a/serdes/serdes_rx.v +++ b/serdes/serdes_rx.v @@ -32,12 +32,10 @@ module serdes_rx input ser_rkmsb, output [31:0] wr_dat_o, - output wr_write_o, - output wr_done_o, - output wr_error_o, + output [3:0] wr_flags_o, input wr_ready_i, - input wr_full_i, - + output wr_ready_o, + output [15:0] fifo_space, output xon_rcvd, output xoff_rcvd, @@ -72,7 +70,7 @@ module serdes_rx reg [31:0] line_i; reg sop_i, eop_i, error_i; - wire error_o, sop_o, eop_o, write, read, empty, full; + wire error_o, sop_o, eop_o, write; reg [15:0] halfline; reg [8:0] holder; wire [31:0] line_o; @@ -83,14 +81,11 @@ module serdes_rx wire [15:0] nextCRC; reg write_d; + wire rst_rxclk; + wire have_space; + oneshot_2clk rst_1s(.clk_in(clk),.in(rst),.clk_out(ser_rx_clk),.out(rst_rxclk)); - /* - ss_rcvr #(.WIDTH(18)) ss_rcvr - (.rxclk(ser_rx_clk),.sysclk(clk),.rst(rst), - .data_in({ser_rkmsb,ser_rklsb,ser_r}),.data_out(even_data), - .clock_present()); - */ assign even_data = {ser_rkmsb,ser_rklsb,ser_r}; always @(posedge ser_rx_clk) @@ -172,7 +167,7 @@ module serdes_rx if(chosen_data[17:16] == 0) begin line_i <= {chosen_data[15:0],halfline}; - if(full) // No space to write to! Should have been avoided by flow control + if(~have_space) // No space to write to! Should have been avoided by flow control state <= ERROR; else begin @@ -205,7 +200,7 @@ module serdes_rx if(chosen_data[17:16] == 0) begin line_i <= {1'b0,1'b0,1'b0,chosen_data[15:0],halfline}; - if(full) // No space to write to! + if(~have_space) // No space to write to! state <= ERROR; else begin @@ -221,7 +216,7 @@ module serdes_rx CRC_CHECK : if(chosen_data[17:0] == {2'b00,CRC}) begin - if(full) + if(~have_space) state <= ERROR; else begin @@ -237,7 +232,7 @@ module serdes_rx ERROR : begin error_i <= 1; - if(~full) + if(have_space) state <= IDLE; end DONE : @@ -264,81 +259,25 @@ module serdes_rx else write_d <= write_pre; // Internal FIFO, size 9 is 2K, size 10 is 4K Bytes - assign write = eop_i | (error_i & ~full) | (write_d & (state != CRC_CHECK)); - + assign write = eop_i | (error_i & have_space) | (write_d & (state != CRC_CHECK)); -//`define CASC 1 -`define MYFIFO 1 -//`define XILFIFO 1 - -`ifdef CASC - cascadefifo2 #(.WIDTH(35),.SIZE(FIFOSIZE)) serdes_rx_fifo - (.clk(clk),.rst(rst),.clear(0), - .datain({error_i,sop_i,eop_i,line_i}), .write(write), .full(full), - .dataout({error_o,sop_o,eop_o,line_o}), .read(read), .empty(empty), - .space(fifo_space),.occupied(fifo_occupied) ); - assign fifo_full = full; - assign fifo_empty = empty; -`endif - -`ifdef MYFIFO - wire [FIFOSIZE-1:0] level; - fifo_2clock_casc #(.DWIDTH(35),.AWIDTH(FIFOSIZE)) serdes_rx_fifo + fifo_2clock_cascade #(.WIDTH(35),.SIZE(FIFOSIZE)) serdes_rx_fifo (.arst(rst), - .wclk(ser_rx_clk),.datain({error_i,sop_i,eop_i,line_i}), .write(write), .full(full), - .rclk(clk),.dataout({error_o,sop_o,eop_o,line_o}), .read(read), .empty(empty), - .level_rclk(level) ); - assign fifo_space = {{(16-FIFOSIZE){1'b0}},{FIFOSIZE{1'b1}}} - - {{(16-FIFOSIZE){1'b0}},level}; - assign fifo_occupied = { {(16-FIFOSIZE){1'b0}} ,level}; - assign fifo_full = full; // Note -- fifo_full is in the wrong clock domain - assign fifo_empty = empty; -`endif + .wclk(ser_rx_clk),.datain({error_i,sop_i,eop_i,line_i}), + .src_rdy_i(write), .dst_rdy_o(have_space), .space(fifo_space), + .rclk(clk),.dataout({error_o,sop_o,eop_o,line_o}), + .src_rdy_o(wr_ready_o), .dst_rdy_i(wr_ready_i), .occupied(fifo_occupied) ); -`ifdef XILFIFO - wire [FIFOSIZE-1:0] level; - fifo_generator_v4_1 ser_rx_fifo - (.din({error_i,sop_i,eop_i,line_i}), - .rd_clk(clk), - .rd_en(read), - .rst(rst), - .wr_clk(ser_rx_clk), - .wr_en(write), - .dout({error_o,sop_o,eop_o,line_o}), - .empty(empty), - .full(full), - .rd_data_count(level), - .wr_data_count() ); - assign fifo_space = {{(16-FIFOSIZE){1'b0}},{FIFOSIZE{1'b1}}} - - {{(16-FIFOSIZE){1'b0}},level}; - assign fifo_occupied = { {(16-FIFOSIZE){1'b0}}, level }; - assign fifo_full = full; // Note -- fifo_full is in the wrong clock domain - assign fifo_empty = empty; -`endif // `ifdef XILFIFO - + assign fifo_full = ~have_space; // Note -- in the wrong clock domain + assign fifo_empty = ~wr_ready_o; // Internal FIFO to Buffer interface - reg xfer_active; - - always @(posedge clk) - if(rst) - xfer_active <= 0; - else if(xfer_active & ~empty & (eop_o | wr_full_i | error_o)) - xfer_active <= 0; - else if(wr_ready_i & sop_o) - xfer_active <= 1; - - assign read = (xfer_active | ~sop_o) & ~empty; - - assign wr_write_o = xfer_active & ~empty; - assign wr_done_o = eop_o & ~empty & xfer_active; - //assign wr_error_o = xfer_active & ((wr_full_i & ~eop_o & ~empty)|error_o); - assign wr_error_o = xfer_active & ~empty & error_o; - - assign wr_dat_o = line_o; - - wire slu = ~(({2'b11,K_ERROR,K_ERROR}=={ser_rkmsb,ser_rklsb,ser_r}) || + assign wr_dat_o = line_o; + assign wr_flags_o = { 2'b00, eop_o | error_o, sop_o | error_o }; + + wire slu = ~(({2'b11,K_ERROR,K_ERROR}=={ser_rkmsb,ser_rklsb,ser_r}) || ({2'b11,K_LOS,K_LOS}=={ser_rkmsb,ser_rklsb,ser_r})); + reg [3:0] slu_reg; always @(posedge clk) @@ -348,6 +287,6 @@ module serdes_rx always @(posedge clk) serdes_link_up <= &slu_reg[3:1]; - assign debug = { full, empty, odd, xfer_active, sop_i, eop_i, error_i, state[2:0] }; + assign debug = { have_space, wr_ready_o, odd, sop_i, eop_i, error_i, state[2:0] }; endmodule // serdes_rx diff --git a/serdes/serdes_tx.v b/serdes/serdes_tx.v index fa4abe5df..c74414e92 100644 --- a/serdes/serdes_tx.v +++ b/serdes/serdes_tx.v @@ -33,11 +33,9 @@ module serdes_tx // TX Stream Interface input [31:0] rd_dat_i, - output rd_read_o, - output rd_done_o, - output rd_error_o, - input rd_sop_i, - input rd_eop_i, + input [3:0] rd_flags_i, + output rd_ready_o, + input rd_ready_i, // Flow control interface input inhibit_tx, @@ -79,36 +77,25 @@ module serdes_tx reg [3:0] wait_count; // Internal FIFO, size 9 is 2K, size 10 is 4K bytes - wire sop_o, eop_o, write, full, read, empty; + wire sop_o, eop_o; wire [31:0] data_o; - reg xfer_active; - - cascadefifo2 #(.WIDTH(34),.SIZE(FIFOSIZE)) serdes_tx_fifo - (.clk(clk),.rst(rst),.clear(0), - .datain({rd_sop_i,rd_eop_i,rd_dat_i}), .write(write), .full(full), - .dataout({sop_o,eop_o,data_o}), .read(read), .empty(empty), + + wire rd_sop_i = rd_flags_i[0]; + wire rd_eop_i = rd_flags_i[1]; + wire [1:0] rd_occ_i = rd_flags_i[3:2]; // Unused + + wire have_data, empty; + fifo_cascade #(.WIDTH(34),.SIZE(FIFOSIZE)) serdes_tx_fifo + (.clk(clk),.reset(rst),.clear(0), + .datain({rd_sop_i,rd_eop_i,rd_dat_i}), .src_rdy_i(rd_ready_i), .dst_rdy_o(rd_ready_o), + .dataout({sop_o,eop_o,data_o}), .dst_rdy_i(read), .src_rdy_o(have_data), .space(), .occupied(fifo_occupied) ); - assign fifo_full = full; - assign fifo_empty = empty; - - // Buffer interface to internal FIFO - always @(posedge clk) - if(rst) - xfer_active <= 0; - else if(rd_eop_i & ~full) // In case we can't store last line right away - xfer_active <= 0; - else if(rd_sop_i) - xfer_active <= 1; - - assign write = xfer_active & ~full; - - assign rd_read_o = write; - assign rd_done_o = 0; // Always take everything we're given - assign rd_error_o = 0; // No chance for errors anticipated - - // FIXME Implement flow control + assign fifo_full = ~rd_ready_o; + assign empty = ~have_data; + assign fifo_empty = empty; + // FIXME Implement flow control reg [15:0] second_word; reg [33:0] pipeline; @@ -193,7 +180,7 @@ module serdes_tx CRC16_D16 crc_blk( (state==RUN1) ? data_o[15:0] : data_o[31:16], CRC, nextCRC); - assign debug = { 26'd0, full, empty, xfer_active, state[2:0] }; + assign debug = { 28'd0, state[2:0] }; endmodule // serdes_tx diff --git a/simple_gemac/.gitignore b/simple_gemac/.gitignore index 61e120cff..17f35e962 100644 --- a/simple_gemac/.gitignore +++ b/simple_gemac/.gitignore @@ -1,3 +1,4 @@ /a.out -/*~ /*.vcd +simple_gemac_wrapper_tb + diff --git a/simple_gemac/delay_line.v b/simple_gemac/delay_line.v index 3d76c4928..d371bb9c5 100644 --- a/simple_gemac/delay_line.v +++ b/simple_gemac/delay_line.v @@ -7,7 +7,7 @@ module delay_line input [WIDTH-1:0] din, output [WIDTH-1:0] dout); - integer i; + genvar i; generate for (i=0;i<WIDTH;i=i+1) begin : gen_delay diff --git a/simple_gemac/eth_tasks_f36.v b/simple_gemac/eth_tasks_f36.v new file mode 100644 index 000000000..efd72778b --- /dev/null +++ b/simple_gemac/eth_tasks_f36.v @@ -0,0 +1,92 @@ + + +task SendFlowCtrl; + input [15:0] fc_len; + begin + $display("Sending Flow Control, quanta = %d, time = %d", fc_len,$time); + pause_time <= fc_len; + @(posedge eth_clk); + pause_req <= 1; + @(posedge eth_clk); + pause_req <= 0; + $display("Sent Flow Control"); + end +endtask // SendFlowCtrl + +task SendPacket_to_fifo36; + input [31:0] data_start; + input [15:0] data_len; + reg [15:0] count; + begin + $display("Sending Packet Len=%d, %d", data_len, $time); + count <= 2; + tx_f36_data <= {2'b0, 1'b0, 1'b1, data_start}; + tx_f36_src_rdy <= 1; + #1; + while(count < data_len) + begin + while(~tx_f36_dst_rdy) + @(posedge sys_clk); + @(posedge sys_clk); + tx_f36_data[31:0] = tx_f36_data[31:0] + 32'h0101_0101; + count = count + 4; + tx_f36_data[32] <= 0; + end + tx_f36_data[33] <= 1; + while(~tx_f36_dst_rdy) + @(posedge sys_clk); + @(posedge sys_clk); + tx_f36_src_rdy <= 0; + end +endtask // SendPacket_to_fifo36 + +/* +task Waiter; + input [31:0] wait_length; + begin + tx_ll_src_rdy2 <= 0; + repeat(wait_length) + @(posedge clk); + tx_ll_src_rdy2 <= 1; + end +endtask // Waiter +*/ + +/* +task SendPacketFromFile_f36; + input [31:0] data_len; + input [31:0] wait_length; + input [31:0] wait_time; + + integer count; + begin + $display("Sending Packet From File to LL8 Len=%d, %d",data_len,$time); + $readmemh("test_packet.mem",pkt_rom ); + + while(~tx_f36_dst_rdy) + @(posedge clk); + tx_f36_data <= pkt_rom[0]; + tx_f36_src_rdy <= 1; + tx_f36_eof <= 0; + @(posedge clk); + + for(i=1;i<data_len-1;i=i+1) + begin + while(~tx_ll_dst_rdy2) + @(posedge clk); + tx_ll_data2 <= pkt_rom[i]; + tx_ll_sof2 <= 0; + @(posedge clk); +// if(i==wait_time) +// Waiter(wait_length); + end + + while(~tx_ll_dst_rdy2) + @(posedge clk); + tx_ll_eof2 <= 1; + tx_ll_data2 <= pkt_rom[data_len-1]; + @(posedge clk); + tx_ll_src_rdy2 <= 0; + end +endtask +*/ diff --git a/simple_gemac/flow_ctrl_rx.v b/simple_gemac/flow_ctrl_rx.v index 7ded9e08b..b13334d0e 100644 --- a/simple_gemac/flow_ctrl_rx.v +++ b/simple_gemac/flow_ctrl_rx.v @@ -2,84 +2,59 @@ // RX side of flow control -- when we are running out of RX space, send a PAUSE
module flow_ctrl_rx
- (input rst,
- //host processor
- input pause_frame_send_en,
- input [15:0] pause_quanta_set,
- input [15:0] fc_hwmark,
- input [15:0] fc_lwmark,
- // From MAC_rx_ctrl
- input rx_clk,
- input [15:0] rx_fifo_space,
- // MAC_tx_ctrl
- input tx_clk,
- output reg xoff_gen,
- output reg xon_gen,
- input xoff_gen_complete,
- input xon_gen_complete
+ (input pause_request_en, input [15:0] pause_time, input [15:0] pause_thresh,
+ input rx_clk, input rx_reset, input [15:0] rx_fifo_space,
+ input tx_clk, input tx_reset, output reg pause_req, output reg [15:0] pause_time_req
);
// ******************************************************************************
// Force our TX to send a PAUSE frame because our RX is nearly full
// ******************************************************************************
- reg xon_int, xoff_int;
+ // RX Clock Domain
+ reg xon, xoff;
reg [21:0] countdown;
-
- always @(posedge rx_clk or posedge rst)
- if(rst)
- begin
- xon_int <= 0;
- xoff_int <= 0;
- end
- else
- begin
- xon_int <= 0;
- xoff_int <= 0;
- if(pause_frame_send_en)
- if(countdown == 0)
- if(rx_fifo_space < fc_lwmark)
- xoff_int <= 1;
- else
- ;
- else
- if(rx_fifo_space > fc_hwmark)
- xon_int <= 1;
- end // else: !if(rst)
-
- reg xoff_int_d1, xon_int_d1;
- always @(posedge rx_clk)
- xon_int_d1 <= xon_int;
- always @(posedge rx_clk)
- xoff_int_d1 <= xoff_int;
+ wire [15:0] pause_low_thresh = pause_thresh;
+ wire [15:0] pause_hi_thresh = 16'hFFFF;
+ wire [21:0] pq_reduced = {pause_time,6'd0} - 1700;
- always @ (posedge tx_clk or posedge rst)
- if (rst)
- xoff_gen <=0;
- else if (xoff_gen_complete)
- xoff_gen <=0;
- else if (xoff_int | xoff_int_d1)
- xoff_gen <=1;
+ always @(posedge rx_clk)
+ if(rx_reset)
+ xoff <= 0;
+ else
+ xoff <= (pause_request_en & (countdown==0) & (rx_fifo_space < pause_low_thresh));
- always @ (posedge tx_clk or posedge rst)
- if (rst)
- xon_gen <=0;
- else if (xon_gen_complete)
- xon_gen <=0;
- else if (xon_int | xon_int_d1)
- xon_gen <=1;
-
- wire [15:0] pq_reduced = pause_quanta_set - 2;
+ always @(posedge rx_clk)
+ if(rx_reset)
+ xon <= 0;
+ else
+ xon <= ((countdown!=0) & (rx_fifo_space > pause_hi_thresh));
- always @(posedge tx_clk or posedge rst)
- if(rst)
+ always @(posedge rx_clk)
+ if(rx_reset)
countdown <= 0;
- else if(xoff_gen)
- countdown <= {pq_reduced,6'd0};
- else if(xon_gen)
+ else if(xoff)
+ countdown <= pq_reduced;
+ else if(xon)
countdown <= 0;
else if(countdown != 0)
countdown <= countdown - 1;
+
+ // Cross clock domains
+ oneshot_2clk send_xon (.clk_in(rx_clk), .in(xon), .clk_out(tx_clk), .out(xon_tx));
+ oneshot_2clk send_xoff (.clk_in(rx_clk), .in(xoff), .clk_out(tx_clk), .out(xoff_tx));
+
+ always @(posedge tx_clk)
+ if(xoff_tx)
+ pause_time_req <= pause_time;
+ else if(xon_tx)
+ pause_time_req <= 0;
+
+ always @(posedge tx_clk)
+ if(tx_reset)
+ pause_req <= 0;
+ else
+ pause_req <= xon_tx | xoff_tx;
-endmodule // flow_ctrl
+endmodule // flow_ctrl_rx
diff --git a/simple_gemac/ll8_shortfifo.v b/simple_gemac/ll8_shortfifo.v index 39ada9a4f..e69de29bb 100644 --- a/simple_gemac/ll8_shortfifo.v +++ b/simple_gemac/ll8_shortfifo.v @@ -1,13 +0,0 @@ - - -module ll8_shortfifo - (input clk, input reset, input clear, - input [7:0] datain, input sof_i, input eof_i, input error_i, input src_rdy_i, output dst_rdy_o, - output [7:0] dataout, output sof_o, output eof_o, output error_o, output src_rdy_o, input dst_rdy_i); - - fifo_short #(.WIDTH(11)) fifo_short - (.clk(clk), .reset(reset), .clear(clear), - .datain({error_i,eof_i,sof_i,datain}), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), - .dataout({error_o,eof_o,sof_o,dataout}), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); - -endmodule // ll8_shortfifo diff --git a/simple_gemac/rxmac_to_ll8.v b/simple_gemac/rxmac_to_ll8.v index d4015716e..5ec233d95 100644 --- a/simple_gemac/rxmac_to_ll8.v +++ b/simple_gemac/rxmac_to_ll8.v @@ -6,6 +6,13 @@ module rxmac_to_ll8 reg [2:0] xfer_state; + localparam XFER_IDLE = 0; + localparam XFER_ACTIVE = 1; + localparam XFER_ERROR = 2; + localparam XFER_ERROR2 = 3; + localparam XFER_OVERRUN = 4; + localparam XFER_OVERRUN2 = 5; + assign ll_data = rx_data; assign ll_src_rdy = ((rx_valid & (xfer_state != XFER_OVERRUN2) ) | (xfer_state == XFER_ERROR) @@ -14,13 +21,6 @@ module rxmac_to_ll8 assign ll_eof = (rx_ack | (xfer_state==XFER_ERROR) | (xfer_state==XFER_OVERRUN)); assign ll_error = (xfer_state == XFER_ERROR)|(xfer_state==XFER_OVERRUN); - localparam XFER_IDLE = 0; - localparam XFER_ACTIVE = 1; - localparam XFER_ERROR = 2; - localparam XFER_ERROR2 = 3; - localparam XFER_OVERRUN = 4; - localparam XFER_OVERRUN2 = 5; - always @(posedge clk) if(reset | clear) xfer_state <= XFER_IDLE; diff --git a/simple_gemac/simple_gemac.v b/simple_gemac/simple_gemac.v index 5ec2fa2ba..868a66819 100644 --- a/simple_gemac/simple_gemac.v +++ b/simple_gemac/simple_gemac.v @@ -6,7 +6,7 @@ module simple_gemac input GMII_RX_CLK, input GMII_RX_DV, input GMII_RX_ER, input [7:0] GMII_RXD, // Flow Control Interface - input pause_req, input [15:0] pause_time, input pause_en, + input pause_req, input [15:0] pause_time_req, input pause_respect_en, // Settings input [47:0] ucast_addr, input [47:0] mcast_addr, @@ -33,7 +33,7 @@ module simple_gemac .GMII_TX_ER(GMII_TX_ER), .GMII_TXD(GMII_TXD), .tx_clk(tx_clk), .tx_data(tx_data), .tx_valid(tx_valid), .tx_error(tx_error), .tx_ack(tx_ack), .ifg(SGE_IFG), .mac_addr(ucast_addr), - .pause_req(pause_req), .pause_time(pause_time), // We request flow control + .pause_req(pause_req), .pause_time(pause_time_req), // We request flow control .pause_apply(pause_apply), .paused(paused) // We respect flow control ); @@ -50,7 +50,7 @@ module simple_gemac flow_ctrl_tx flow_ctrl_tx (.rst(rst_txclk), .tx_clk(tx_clk), - .tx_pause_en(pause_en), + .tx_pause_en(pause_respect_en), .pause_quanta(pause_quanta_rcvd), // 16 bit value .pause_quanta_val(pause_rcvd), .pause_apply(pause_apply), diff --git a/simple_gemac/simple_gemac_rx.v b/simple_gemac/simple_gemac_rx.v index 7daa9adad..bad43a607 100644 --- a/simple_gemac/simple_gemac_rx.v +++ b/simple_gemac/simple_gemac_rx.v @@ -1,14 +1,31 @@ module simple_gemac_rx - (input clk125, input reset, + (input reset, input GMII_RX_CLK, input GMII_RX_DV, input GMII_RX_ER, input [7:0] GMII_RXD, output rx_clk, output [7:0] rx_data, output reg rx_valid, output rx_error, output reg rx_ack, input [47:0] ucast_addr, input [47:0] mcast_addr, input pass_ucast, input pass_mcast, input pass_bcast, input pass_pause, input pass_all, output reg [15:0] pause_quanta_rcvd, output pause_rcvd ); - reg [7:0] rxd_d1; + localparam RX_IDLE = 0; + localparam RX_PREAMBLE = 1; + localparam RX_FRAME = 2; + localparam RX_GOODFRAME = 3; + localparam RX_DO_PAUSE = 4; + localparam RX_ERROR = 5; + localparam RX_DROP = 6; + + localparam RX_PAUSE = 16; + localparam RX_PAUSE_CHK88 = RX_PAUSE + 5; + localparam RX_PAUSE_CHK08 = RX_PAUSE_CHK88 + 1; + localparam RX_PAUSE_CHK00 = RX_PAUSE_CHK08 + 1; + localparam RX_PAUSE_CHK01 = RX_PAUSE_CHK00 + 1; + localparam RX_PAUSE_STORE_MSB = RX_PAUSE_CHK01 + 1; + localparam RX_PAUSE_STORE_LSB = RX_PAUSE_STORE_MSB + 1; + localparam RX_PAUSE_WAIT_CRC = RX_PAUSE_STORE_LSB + 1; + + reg [7:0] rxd_d1; reg rx_dv_d1, rx_er_d1; assign rx_clk = GMII_RX_CLK; @@ -19,10 +36,15 @@ module simple_gemac_rx rxd_d1 <= GMII_RXD; end + reg [7:0] rx_state; wire [7:0] rxd_del; wire rx_dv_del, rx_er_del; reg go_filt; + wire match_crc; + wire clear_crc = rx_state == RX_IDLE; + wire calc_crc = (rx_state == RX_FRAME) | rx_state[7:4]==4'h1; + localparam DELAY = 6; delay_line #(.WIDTH(10)) rx_delay (.clk(rx_clk), .delay(DELAY), .din({rx_dv_d1,rx_er_d1,rxd_d1}),.dout({rx_dv_del,rx_er_dl,rxd_del})); @@ -37,7 +59,6 @@ module simple_gemac_rx wire keep_packet = (pass_ucast & is_ucast) | (pass_mcast & is_mcast) | (pass_bcast & is_bcast) | (pass_pause & is_pause) | pass_all; - reg [7:0] rx_state; assign rx_data = rxd_del; assign rx_error = (rx_state == RX_ERROR); @@ -58,24 +79,6 @@ module simple_gemac_rx address_filter af_pause (.clk(rx_clk), .reset(reset), .go(go_filt), .data(rxd_d1), .address(48'h0180_c200_0001), .match(is_pause), .done()); - localparam RX_IDLE = 0; - localparam RX_PREAMBLE = 1; - localparam RX_FRAME = 2; - localparam RX_GOODFRAME = 3; - localparam RX_DO_PAUSE = 4; - localparam RX_ERROR = 5; - localparam RX_DROP = 6; - - localparam RX_PAUSE = 16; - localparam RX_PAUSE_CHK88 = RX_PAUSE + 5; - localparam RX_PAUSE_CHK08 = RX_PAUSE_CHK88 + 1; - localparam RX_PAUSE_CHK00 = RX_PAUSE_CHK08 + 1; - localparam RX_PAUSE_CHK01 = RX_PAUSE_CHK00 + 1; - localparam RX_PAUSE_STORE_MSB = RX_PAUSE_CHK01 + 1; - localparam RX_PAUSE_STORE_LSB = RX_PAUSE_STORE_MSB + 1; - localparam RX_PAUSE_WAIT_CRC = RX_PAUSE_STORE_LSB + 1; - - always @(posedge rx_clk) go_filt <= (rx_state==RX_PREAMBLE) & (rxd_d1 == 8'hD5); @@ -155,9 +158,6 @@ module simple_gemac_rx endcase // case (rx_state) assign pause_rcvd = (rx_state == RX_DO_PAUSE); - wire match_crc; - wire clear_crc = rx_state == RX_IDLE; - wire calc_crc = (rx_state == RX_FRAME) | rx_state[7:4]==4'h1; crc crc_check(.clk(rx_clk),.reset(reset),.clear(clear_crc), .data(rxd_d1),.calc(calc_crc),.crc_out(),.match(match_crc)); diff --git a/simple_gemac/simple_gemac_tx.v b/simple_gemac/simple_gemac_tx.v index 690fd5c37..dd870d04d 100644 --- a/simple_gemac/simple_gemac_tx.v +++ b/simple_gemac/simple_gemac_tx.v @@ -23,14 +23,6 @@ module simple_gemac_tx wire [31:0] crc_out; - localparam MIN_FRAME_LEN = 64 + 8 - 4; // Min frame length includes preamble but not CRC - localparam MAX_FRAME_LEN = 8192; // How big are the jumbo frames we want to handle? - always @(posedge tx_clk) - if(reset |(tx_state == TX_IDLE)) - frame_len_ctr <= 0; - else - frame_len_ctr <= frame_len_ctr + 1; - localparam TX_IDLE = 0; localparam TX_PREAMBLE = 1; localparam TX_SOF_DEL = TX_PREAMBLE + 7; @@ -48,6 +40,14 @@ module simple_gemac_tx localparam TX_PAUSE_FIRST = TX_PAUSE_SOF + 1; localparam TX_PAUSE_END = TX_PAUSE_SOF + 18; + localparam MIN_FRAME_LEN = 64 + 8 - 4; // Min frame length includes preamble but not CRC + localparam MAX_FRAME_LEN = 8192; // How big are the jumbo frames we want to handle? + always @(posedge tx_clk) + if(reset |(tx_state == TX_IDLE)) + frame_len_ctr <= 0; + else + frame_len_ctr <= frame_len_ctr + 1; + reg send_pause; reg [15:0] pause_time_held; diff --git a/simple_gemac/simple_gemac_wb.v b/simple_gemac/simple_gemac_wb.v index ca7d4a3fc..6df277e3e 100644 --- a/simple_gemac/simple_gemac_wb.v +++ b/simple_gemac/simple_gemac_wb.v @@ -24,7 +24,9 @@ module simple_gemac_wb inout mdio, output mdc, output [47:0] ucast_addr, output [47:0] mcast_addr, output pass_ucast, output pass_mcast, output pass_bcast, - output pass_pause, output pass_all, output pause_en ); + output pass_pause, output pass_all, + output pause_respect_en, output pause_request_en, + output [15:0] pause_time, output [15:0] pause_thresh ); wire acc = wb_cyc & wb_stb; wire wr_acc = wb_cyc & wb_stb & wb_we; @@ -36,10 +38,10 @@ module simple_gemac_wb else wb_ack <= acc & ~wb_ack; - wire [5:0] misc_settings; - assign {pass_ucast, pass_mcast, pass_bcast, pass_pause, pass_all, pause_en} = misc_settings; + wire [6:0] misc_settings; + assign {pause_request_en, pass_ucast, pass_mcast, pass_bcast, pass_pause, pass_all, pause_respect_en} = misc_settings; - wb_reg #(.ADDR(0),.DEFAULT(6'b111001)) + wb_reg #(.ADDR(0),.DEFAULT(7'b0111001)) wb_reg_settings (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .wr_acc(wr_acc), .dat_i(wb_dat_i), .dat_o(misc_settings) ); wb_reg #(.ADDR(1),.DEFAULT(0)) @@ -79,20 +81,23 @@ module simple_gemac_wb wire [2:0] MIISTATUS; wb_reg #(.ADDR(5),.DEFAULT(0)) - wb_reg_miimoder (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .dat_i(wb_dat_i), .dat_o({NoPre,Divider}) ); + wb_reg_miimoder (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .wr_acc(wr_acc), + .dat_i(wb_dat_i), .dat_o({NoPre,Divider}) ); wb_reg #(.ADDR(6),.DEFAULT(0)) - wb_reg_miiaddr (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .dat_i(wb_dat_i), .dat_o(MIIADDRESS) ); + wb_reg_miiaddr (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .wr_acc(wr_acc), + .dat_i(wb_dat_i), .dat_o(MIIADDRESS) ); wb_reg #(.ADDR(7),.DEFAULT(0)) - wb_reg_miidata (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .dat_i(wb_dat_i), .dat_o(CtrlData) ); + wb_reg_miidata (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .wr_acc(wr_acc), + .dat_i(wb_dat_i), .dat_o(CtrlData) ); // MIICOMMAND register - needs special treatment because of auto-resetting bits always @ (posedge wb_clk) if (wb_rst) MIICOMMAND <= 0; else - if (wr_acc & (wb_adr == 8'd8)) + if (wr_acc & (wb_adr[7:2] == 6'd8)) MIICOMMAND <= wb_dat_i; else begin @@ -128,8 +133,16 @@ module simple_gemac_wb .WCtrlDataStart(WCtrlDataStart), .RStatStart(RStatStart), .UpdateMIIRX_DATAReg(UpdateMIIRX_DATAReg) ); + wb_reg #(.ADDR(11),.DEFAULT(0)) + wb_reg_pausetime (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .wr_acc(wr_acc), + .dat_i(wb_dat_i), .dat_o(pause_time) ); + + wb_reg #(.ADDR(12),.DEFAULT(0)) + wb_reg_pausethresh (.clk(wb_clk), .rst(wb_rst), .adr(wb_adr[7:2]), .wr_acc(wr_acc), + .dat_i(wb_dat_i), .dat_o(pause_thresh) ); + always @(posedge wb_clk) - case(wb_adr) + case(wb_adr[7:2]) 0 : wb_dat_o <= misc_settings; 1 : wb_dat_o <= ucast_addr[47:32]; 2 : wb_dat_o <= ucast_addr[31:0]; @@ -141,6 +154,8 @@ module simple_gemac_wb 8 : wb_dat_o <= MIICOMMAND; 9 : wb_dat_o <= MIISTATUS; 10: wb_dat_o <= MIIRX_DATA; - endcase // case (wb_adr) + 11: wb_dat_o <= pause_time; + 12: wb_dat_o <= pause_thresh; + endcase // case (wb_adr[7:2]) endmodule // simple_gemac_wb diff --git a/simple_gemac/simple_gemac_wrapper.build b/simple_gemac/simple_gemac_wrapper.build new file mode 100755 index 000000000..30f65ab17 --- /dev/null +++ b/simple_gemac/simple_gemac_wrapper.build @@ -0,0 +1 @@ +iverilog -Wimplict -Wportbind -y ../control_lib/newfifo/ -y ../models/ -y . -y miim -y ../coregen/ -y ../control_lib/ -o simple_gemac_wrapper_tb simple_gemac_wrapper_tb.v diff --git a/simple_gemac/simple_gemac_wrapper.v b/simple_gemac/simple_gemac_wrapper.v index cd586ae5d..71ad0cf0f 100644 --- a/simple_gemac/simple_gemac_wrapper.v +++ b/simple_gemac/simple_gemac_wrapper.v @@ -1,46 +1,46 @@ module simple_gemac_wrapper - (input clk125, input reset, - // GMII - output GMII_GTX_CLK, output GMII_TX_EN, output GMII_TX_ER, output [7:0] GMII_TXD, - input GMII_RX_CLK, input GMII_RX_DV, input GMII_RX_ER, input [7:0] GMII_RXD, + #(parameter RXFIFOSIZE=9, + parameter TXFIFOSIZE=6) + (input clk125, input reset, + // GMII + output GMII_GTX_CLK, output GMII_TX_EN, output GMII_TX_ER, output [7:0] GMII_TXD, + input GMII_RX_CLK, input GMII_RX_DV, input GMII_RX_ER, input [7:0] GMII_RXD, + + // Client FIFO Interfaces + input sys_clk, + output [35:0] rx_f36_data, output rx_f36_src_rdy, input rx_f36_dst_rdy, + input [35:0] tx_f36_data, input tx_f36_src_rdy, output tx_f36_dst_rdy, + + // Wishbone Interface + input wb_clk, input wb_rst, input wb_stb, input wb_cyc, output wb_ack, input wb_we, + input [7:0] wb_adr, input [31:0] wb_dat_i, output [31:0] wb_dat_o, + + // MIIM + inout mdio, output mdc, + output [31:0] debug); - // Flow Control Interface - input pause_req, input [15:0] pause_time, + wire [7:0] rx_data, tx_data; + wire tx_clk, tx_valid, tx_error, tx_ack; + wire rx_clk, rx_valid, rx_error, rx_ack; - // RX Client Interface - output rx_clk, output [7:0] rx_ll_data, output rx_ll_sof, output rx_ll_eof, - output rx_ll_error, output rx_ll_src_rdy, input rx_ll_dst_rdy, + wire [47:0] ucast_addr, mcast_addr; + wire pass_ucast, pass_mcast, pass_bcast, pass_pause, pass_all; + wire pause_request_en, pause_respect_en; + wire [15:0] pause_time, pause_thresh, pause_time_req, rx_fifo_space; - // TX Client Interface - output tx_clk, input [7:0] tx_ll_data, input tx_ll_sof, input tx_ll_eof, - input tx_ll_src_rdy, output tx_ll_dst_rdy, - - // Wishbone Interface - input wb_clk, input wb_rst, input wb_stb, input wb_cyc, output wb_ack, input wb_we, - input [7:0] wb_adr, input [31:0] wb_dat_i, output [31:0] wb_dat_o, - - // MIIM - inout mdio, output mdc ); - - wire [7:0] rx_data, tx_data; - wire tx_clk, tx_valid, tx_error, tx_ack; - wire rx_clk, rx_valid, rx_error, rx_ack; - - wire [47:0] ucast_addr, mcast_addr; - wire pass_ucast, pass_mcast, pass_bcast, pass_pause, pass_all, pause_en; - - wire rst_rxclk, rst_txclk; + wire tx_reset, rx_reset; reset_sync reset_sync_tx (.clk(tx_clk),.reset_in(reset),.reset_out(tx_reset)); reset_sync reset_sync_rx (.clk(rx_clk),.reset_in(reset),.reset_out(rx_reset)); - + simple_gemac simple_gemac (.clk125(clk125), .reset(reset), .GMII_GTX_CLK(GMII_GTX_CLK), .GMII_TX_EN(GMII_TX_EN), .GMII_TX_ER(GMII_TX_ER), .GMII_TXD(GMII_TXD), .GMII_RX_CLK(GMII_RX_CLK), .GMII_RX_DV(GMII_RX_DV), .GMII_RX_ER(GMII_RX_ER), .GMII_RXD(GMII_RXD), - .pause_req(pause_req), .pause_time(pause_time), .pause_en(1), + .pause_req(pause_req), .pause_time_req(pause_time_req), + .pause_respect_en(pause_respect_en), .ucast_addr(ucast_addr), .mcast_addr(mcast_addr), .pass_ucast(pass_ucast), .pass_mcast(pass_mcast), .pass_bcast(pass_bcast), .pass_pause(pass_pause), .pass_all(pass_all), @@ -57,18 +57,107 @@ module simple_gemac_wrapper .mdio(mdio), .mdc(mdc), .ucast_addr(ucast_addr), .mcast_addr(mcast_addr), .pass_ucast(pass_ucast), .pass_mcast(pass_mcast), .pass_bcast(pass_bcast), - .pass_pause(pass_pause), .pass_all(pass_all), .pause_en(pause_en) ); + .pass_pause(pass_pause), .pass_all(pass_all), + .pause_respect_en(pause_respect_en), .pause_request_en(pause_request_en), + .pause_time(pause_time), .pause_thresh(pause_thresh) ); + // RX FIFO Chain + wire rx_ll_sof, rx_ll_eof, rx_ll_src_rdy, rx_ll_dst_rdy; + + wire rx_ll_sof2, rx_ll_eof2, rx_ll_src_rdy2, rx_ll_dst_rdy2; + wire rx_ll_sof2_n, rx_ll_eof2_n, rx_ll_src_rdy2_n, rx_ll_dst_rdy2_n; + + wire [7:0] rx_ll_data, rx_ll_data2; + + wire [35:0] rx_f36_data_int1; + wire rx_f36_src_rdy_int1, rx_f36_dst_rdy_int1; + rxmac_to_ll8 rx_adapt (.clk(rx_clk), .reset(rx_reset), .clear(0), .rx_data(rx_data), .rx_valid(rx_valid), .rx_error(rx_error), .rx_ack(rx_ack), .ll_data(rx_ll_data), .ll_sof(rx_ll_sof), .ll_eof(rx_ll_eof), .ll_error(rx_ll_error), .ll_src_rdy(rx_ll_src_rdy), .ll_dst_rdy(rx_ll_dst_rdy)); + + ll8_shortfifo rx_sfifo + (.clk(rx_clk), .reset(rx_reset), .clear(0), + .datain(rx_ll_data), .sof_i(rx_ll_sof), .eof_i(rx_ll_eof), + .error_i(rx_ll_error), .src_rdy_i(rx_ll_src_rdy), .dst_rdy_o(rx_ll_dst_rdy), + .dataout(rx_ll_data2), .sof_o(rx_ll_sof2), .eof_o(rx_ll_eof2), + .error_o(rx_ll_error2), .src_rdy_o(rx_ll_src_rdy2), .dst_rdy_i(rx_ll_dst_rdy2)); + + assign rx_ll_dst_rdy2 = ~rx_ll_dst_rdy2_n; + assign rx_ll_src_rdy2_n = ~rx_ll_src_rdy2; + assign rx_ll_sof2_n = ~rx_ll_sof2; + assign rx_ll_eof2_n = ~rx_ll_eof2; + + ll8_to_fifo36 ll8_to_fifo36 + (.clk(rx_clk), .reset(rx_reset), .clear(0), + .ll_data(rx_ll_data2), .ll_sof_n(rx_ll_sof2_n), .ll_eof_n(rx_ll_eof2_n), + .ll_src_rdy_n(rx_ll_src_rdy2_n), .ll_dst_rdy_n(rx_ll_dst_rdy2_n), + .f36_data(rx_f36_data_int1), .f36_src_rdy_o(rx_f36_src_rdy_int1), .f36_dst_rdy_i(rx_f36_dst_rdy_int1)); + + fifo_2clock_cascade #(.WIDTH(36), .SIZE(RXFIFOSIZE)) rx_2clk_fifo + (.wclk(rx_clk), .datain(rx_f36_data_int1), + .src_rdy_i(rx_f36_src_rdy_int1), .dst_rdy_o(rx_f36_dst_rdy_int1), .space(rx_fifo_space), + .rclk(sys_clk), .dataout(rx_f36_data), + .src_rdy_o(rx_f36_src_rdy), .dst_rdy_i(rx_f36_dst_rdy), .occupied(), .arst(reset)); + + // TX FIFO Chain + wire tx_ll_sof, tx_ll_eof, tx_ll_src_rdy, tx_ll_dst_rdy; + wire tx_ll_sof2, tx_ll_eof2, tx_ll_src_rdy2, tx_ll_dst_rdy2; + wire tx_ll_sof2_n, tx_ll_eof2_n, tx_ll_src_rdy2_n, tx_ll_dst_rdy2_n; + wire [7:0] tx_ll_data, tx_ll_data2; + wire [35:0] tx_f36_data_int1; + wire tx_f36_src_rdy_int1, tx_f36_dst_rdy_int1; + + fifo_2clock_cascade #(.WIDTH(36), .SIZE(TXFIFOSIZE)) tx_2clk_fifo + (.wclk(sys_clk), .datain(tx_f36_data), + .src_rdy_i(tx_f36_src_rdy), .dst_rdy_o(tx_f36_dst_rdy), .space(), + .rclk(tx_clk), .dataout(tx_f36_data_int1), + .src_rdy_o(tx_f36_src_rdy_int1), .dst_rdy_i(tx_f36_dst_rdy_int1), .occupied(), .arst(reset)); + + fifo36_to_ll8 fifo36_to_ll8 + (.clk(tx_clk), .reset(tx_reset), .clear(clear), + .f36_data(tx_f36_data_int1), .f36_src_rdy_i(tx_f36_src_rdy_int1), .f36_dst_rdy_o(tx_f36_dst_rdy_int1), + .ll_data(tx_ll_data2), .ll_sof_n(tx_ll_sof2_n), .ll_eof_n(tx_ll_eof2_n), + .ll_src_rdy_n(tx_ll_src_rdy2_n), .ll_dst_rdy_n(tx_ll_dst_rdy2_n)); + + assign tx_ll_sof2 = ~tx_ll_sof2_n; + assign tx_ll_eof2 = ~tx_ll_eof2_n; + assign tx_ll_src_rdy2 = ~tx_ll_src_rdy2_n; + assign tx_ll_dst_rdy2_n = ~tx_ll_dst_rdy2; + + ll8_shortfifo tx_sfifo + (.clk(tx_clk), .reset(tx_reset), .clear(clear), + .datain(tx_ll_data2), .sof_i(tx_ll_sof2), .eof_i(tx_ll_eof2), + .error_i(0), .src_rdy_i(tx_ll_src_rdy2), .dst_rdy_o(tx_ll_dst_rdy2), + .dataout(tx_ll_data), .sof_o(tx_ll_sof), .eof_o(tx_ll_eof), + .error_o(), .src_rdy_o(tx_ll_src_rdy), .dst_rdy_i(tx_ll_dst_rdy)); ll8_to_txmac ll8_to_txmac - (.clk(tx_clk), .reset(tx_reset), .clear(0), + (.clk(tx_clk), .reset(tx_reset), .clear(clear), .ll_data(tx_ll_data), .ll_sof(tx_ll_sof), .ll_eof(tx_ll_eof), .ll_src_rdy(tx_ll_src_rdy), .ll_dst_rdy(tx_ll_dst_rdy), .tx_data(tx_data), .tx_valid(tx_valid), .tx_error(tx_error), .tx_ack(tx_ack)); + flow_ctrl_rx flow_ctrl_rx + (.pause_request_en(pause_request_en), .pause_time(pause_time), .pause_thresh(pause_thresh), + .rx_clk(rx_clk), .rx_reset(rx_reset), .rx_fifo_space(rx_fifo_space), + .tx_clk(tx_clk), .tx_reset(tx_reset), .pause_req(pause_req), .pause_time_req(pause_time_req)); + + wire [31:0] debug_tx, debug_rx; + + assign debug_tx = { { tx_ll_data }, + { tx_ll_sof, tx_ll_eof, tx_ll_src_rdy, tx_ll_dst_rdy, + tx_ll_sof2, tx_ll_eof2, tx_ll_src_rdy2, tx_ll_dst_rdy2 }, + { tx_valid, tx_error, tx_ack, tx_f36_src_rdy_int1, tx_f36_dst_rdy_int1, tx_f36_data_int1[34:32]}, + { tx_data} }; + assign debug_rx = { { rx_ll_data }, + { rx_ll_sof, rx_ll_eof, rx_ll_src_rdy, rx_ll_dst_rdy, + rx_ll_sof2, rx_ll_eof2, rx_ll_src_rdy2, rx_ll_dst_rdy2 }, + { rx_valid, rx_error, rx_ack, rx_f36_src_rdy_int1, rx_f36_dst_rdy_int1, rx_f36_data_int1[34:32]}, + { rx_data} }; + + assign debug = debug_rx; + endmodule // simple_gemac_wrapper diff --git a/simple_gemac/simple_gemac_wrapper_f36_tb.v b/simple_gemac/simple_gemac_wrapper_f36_tb.v new file mode 100644 index 000000000..804fa8748 --- /dev/null +++ b/simple_gemac/simple_gemac_wrapper_f36_tb.v @@ -0,0 +1,243 @@ + + +module simple_gemac_wrapper_f36_tb; +`include "eth_tasks_f36.v" + + reg clk = 0; + reg reset = 1; + + initial #1000 reset = 0; + always #50 clk = ~clk; + + reg wb_clk = 0; + wire wb_rst = reset; + always #173 wb_clk = ~wb_clk; + + wire GMII_RX_DV, GMII_RX_ER, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK; + wire [7:0] GMII_RXD, GMII_TXD; + + wire rx_valid, rx_error, rx_ack; + wire tx_ack, tx_valid, tx_error; + + wire [7:0] rx_data, tx_data; + + reg [15:0] pause_time; + reg pause_req = 0; + + wire GMII_RX_CLK = GMII_GTX_CLK; + + reg [7:0] FORCE_DAT_ERR = 0; + reg FORCE_ERR = 0; + + // Loopback + assign GMII_RX_DV = GMII_TX_EN; + assign GMII_RX_ER = GMII_TX_ER | FORCE_ERR; + assign GMII_RXD = GMII_TXD ^ FORCE_DAT_ERR; + + + wire rx_ll_sof, rx_ll_eof, rx_ll_src_rdy, rx_ll_dst_rdy; + wire rx_ll_sof2, rx_ll_eof2, rx_ll_src_rdy2; + wire rx_ll_dst_rdy2; + wire [7:0] rx_ll_data, rx_ll_data2; + wire rx_ll_error, rx_ll_error2; + + wire [31:0] wb_dat_o; + reg [31:0] wb_dat_i; + reg [7:0] wb_adr; + reg wb_stb=0, wb_cyc=0, wb_we=0; + wire wb_ack; + + reg [35:0] tx_f36_dat; + reg tx_f36_src_rdy; + wire tx_f36_dst_rdy; + + wire [35:0] rx_f36_dat; + wire rx_f36_src_rdy; + reg rx_f36_dst_rdy = 1; + + simple_gemac_wrapper simple_gemac_wrapper + (.clk125(clk), .reset(reset), + .GMII_GTX_CLK(GMII_GTX_CLK), .GMII_TX_EN(GMII_TX_EN), + .GMII_TX_ER(GMII_TX_ER), .GMII_TXD(GMII_TXD), + .GMII_RX_CLK(GMII_RX_CLK), .GMII_RX_DV(GMII_RX_DV), + .GMII_RX_ER(GMII_RX_ER), .GMII_RXD(GMII_RXD), + .pause_req(pause_req), .pause_time(pause_time), + .rx_clk(rx_clk), .rx_ll_data(rx_ll_data), .rx_ll_sof(rx_ll_sof), + .rx_ll_eof(rx_ll_eof), .rx_ll_src_rdy(rx_ll_src_rdy), .rx_ll_dst_rdy(rx_ll_dst_rdy), + .tx_clk(tx_clk), .tx_ll_data(tx_ll_data), .tx_ll_sof(tx_ll_sof), + .tx_ll_eof(tx_ll_eof), .tx_ll_src_rdy(tx_ll_src_rdy), .tx_ll_dst_rdy(tx_ll_dst_rdy), + .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_stb(wb_stb), .wb_cyc(wb_cyc), .wb_ack(wb_ack), + .wb_we(wb_we), .wb_adr(wb_adr), .wb_dat_i(wb_dat_i), .wb_dat_o(wb_dat_o), + .mdio(mdio), .mdc(mdc) ); + + wire rx_ll_dst_rdy2_n; + assign rx_ll_dst_rdy2 = ~rx_ll_dst_rdy2_n; + + ll8_shortfifo rx_sfifo + (.clk(clk), .reset(reset), .clear(0), + .datain(rx_ll_data), .sof_i(rx_ll_sof), .eof_i(rx_ll_eof), + .error_i(rx_ll_error), .src_rdy_i(rx_ll_src_rdy), .dst_rdy_o(rx_ll_dst_rdy), + .dataout(rx_ll_data2), .sof_o(rx_ll_sof2), .eof_o(rx_ll_eof2), + .error_o(rx_ll_error2), .src_rdy_o(rx_ll_src_rdy2), .dst_rdy_i(rx_ll_dst_rdy2)); + + ll8_to_fifo36 ll8_to_fifo36 + (.clk(clk), .reset(reset), .clear(0), + .ll_data(rx_ll_data2), .ll_sof_n(~rx_ll_sof2), .ll_eof_n(~rx_ll_eof2), + .ll_src_rdy_n(~rx_ll_src_rdy2), .ll_dst_rdy_n(rx_ll_dst_rdy2_n), + .f36_data(rx_f36_dat), .f36_src_rdy_o(rx_f36_src_rdy), .f36_dst_rdy_i(rx_f36_dst_rdy)); + + wire tx_ll_sof, tx_ll_eof, tx_ll_src_rdy, tx_ll_dst_rdy; + wire tx_ll_sof2_n, tx_ll_eof2_n; + wire tx_ll_src_rdy2_n, tx_ll_dst_rdy2; + wire [7:0] tx_ll_data, tx_ll_data2; + wire tx_ll_error; + wire tx_ll_error2 = 0; + + fifo36_to_ll8 fifo36_to_ll8 + (.clk(clk), .reset(reset), .clear(clear), + .f36_data(tx_f36_dat), .f36_src_rdy_i(tx_f36_src_rdy), .f36_dst_rdy_o(tx_f36_dst_rdy), + .ll_data(tx_ll_data2), .ll_sof_n(tx_ll_sof2_n), .ll_eof_n(tx_ll_eof2_n), + .ll_src_rdy_n(tx_ll_src_rdy2_n), .ll_dst_rdy_n(~tx_ll_dst_rdy2)); + + ll8_shortfifo tx_sfifo + (.clk(clk), .reset(reset), .clear(clear), + .datain(tx_ll_data2), .sof_i(~tx_ll_sof2_n), .eof_i(~tx_ll_eof2_n), + .error_i(tx_ll_error2), .src_rdy_i(~tx_ll_src_rdy2_n), .dst_rdy_o(tx_ll_dst_rdy2), + .dataout(tx_ll_data), .sof_o(tx_ll_sof), .eof_o(tx_ll_eof), + .error_o(tx_ll_error), .src_rdy_o(tx_ll_src_rdy), .dst_rdy_i(tx_ll_dst_rdy)); + + initial $dumpfile("simple_gemac_wrapper_f36_tb.vcd"); + initial $dumpvars(0,simple_gemac_wrapper_f36_tb); + + integer i; + reg [7:0] pkt_rom[0:65535]; + reg [1023:0] ROMFile; + + initial + for (i=0;i<65536;i=i+1) + pkt_rom[i] <= 8'h0; + + initial + begin + @(negedge reset); + repeat (10) + @(posedge clk); + WishboneWR(0,6'b111001); + WishboneWR(4,16'hF1F2); + WishboneWR(8,32'hF3F4_F5F6); + WishboneWR(12,16'h0000); + WishboneWR(16,32'h0000_0000); + + @(posedge clk); + SendFlowCtrl(16'h0007); // Send flow control + @(posedge clk); + #30000; + @(posedge clk); + SendFlowCtrl(16'h0009); // Increase flow control before it expires + #10000; + @(posedge clk); + SendFlowCtrl(16'h0000); // Cancel flow control before it expires + @(posedge clk); + + SendPacket_to_fifo36(8'hAA,10); // This packet gets dropped by the filters + repeat (10) + @(posedge clk); + + SendPacketFromFile_fifo36(60,0,0); // The rest are valid packets + repeat (10) + @(posedge clk); + + SendPacketFromFile_fifo36(61,0,0); + repeat (10) + @(posedge clk); + SendPacketFromFile_fifo36(62,0,0); + repeat (10) + @(posedge clk); + SendPacketFromFile_fifo36(63,0,0); + repeat (1) + @(posedge clk); + SendPacketFromFile_fifo36(64,0,0); + repeat (10) + @(posedge clk); + SendPacketFromFile_fifo36(59,0,0); + repeat (1) + @(posedge clk); + SendPacketFromFile_fifo36(58,0,0); + repeat (1) + @(posedge clk); + SendPacketFromFile_fifo36(100,0,0); + repeat (1) + @(posedge clk); + SendPacketFromFile_fifo36(200,150,30); // waiting 14 empties the fifo, 15 underruns + repeat (1) + @(posedge clk); + SendPacketFromFile_fifo36(100,0,30); + #10000 $finish; + end +/* + // Force a CRC error + initial + begin + #90000; + @(posedge clk); + FORCE_DAT_ERR <= 8'h10; + @(posedge clk); + FORCE_DAT_ERR <= 8'h00; + end + + // Force an RX_ER error (i.e. link loss) + initial + begin + #116000; + @(posedge clk); + FORCE_ERR <= 1; + @(posedge clk); + FORCE_ERR <= 0; + end + + // Cause receive fifo to fill, causing an RX overrun + initial + begin + #126000; + @(posedge clk); + rx_f36_dst_rdy <= 0; + repeat (30) // Repeat of 14 fills the shortfifo, but works. 15 overflows + @(posedge clk); + rx_f36_dst_rdy <= 1; + end + */ + // Tests: Send and recv flow control, send and receive good packets, RX CRC err, RX_ER, RX overrun, TX underrun + // Still need to test: CRC errors on Pause Frames, MDIO, wishbone + + task WishboneWR; + input [7:0] adr; + input [31:0] value; + begin + wb_adr <= adr; + wb_dat_i <= value; + wb_stb <= 1; + wb_cyc <= 1; + wb_we <= 1; + while (~wb_ack) + @(posedge wb_clk); + @(posedge wb_clk); + wb_stb <= 0; + wb_cyc <= 0; + wb_we <= 0; + end + endtask // WishboneWR + + always @(posedge clk) + if(rx_f36_src_rdy & rx_f36_dst_rdy) + begin + if(rx_f36_dat[32] & ~rx_f36_dat[33]) + $display("RX-PKT-START %d",$time); + $display("RX-PKT SOF %d EOF %d ERR %d OCC %d DAT %x",rx_f36_dat[32],rx_f36_dat[33], + &rx_f36_dat[33:32],rx_f36_dat[35:34],rx_f36_dat[31:0]); + if(rx_f36_dat[33] & ~rx_f36_dat[32]) + $display("RX-PKT-END %d",$time); + if(rx_f36_dat[33] & rx_f36_dat[32]) + $display("RX-PKT-ERROR %d",$time); + end + +endmodule // simple_gemac_wrapper_tb diff --git a/simple_gemac/simple_gemac_wrapper_tb.v b/simple_gemac/simple_gemac_wrapper_tb.v index b51afa5bb..26a471a49 100644 --- a/simple_gemac/simple_gemac_wrapper_tb.v +++ b/simple_gemac/simple_gemac_wrapper_tb.v @@ -1,18 +1,21 @@ module simple_gemac_wrapper_tb; -`include "eth_tasks.v" +`include "eth_tasks_f36.v" - reg clk = 0; reg reset = 1; - initial #1000 reset = 0; - always #50 clk = ~clk; + wire wb_rst = reset; + + reg eth_clk = 0; + always #50 eth_clk = ~eth_clk; reg wb_clk = 0; - wire wb_rst = reset; always #173 wb_clk = ~wb_clk; - + + reg sys_clk = 0; + always #77 sys_clk = ~ sys_clk; + wire GMII_RX_DV, GMII_RX_ER, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK; wire [7:0] GMII_RXD, GMII_TXD; @@ -35,55 +38,35 @@ module simple_gemac_wrapper_tb; assign GMII_RXD = GMII_TXD ^ FORCE_DAT_ERR; - wire rx_ll_sof, rx_ll_eof, rx_ll_src_rdy, rx_ll_dst_rdy; - wire rx_ll_sof2, rx_ll_eof2, rx_ll_src_rdy2; - reg rx_ll_dst_rdy2 = 1; - wire [7:0] rx_ll_data, rx_ll_data2; - wire rx_ll_error, rx_ll_error2; - wire [31:0] wb_dat_o; reg [31:0] wb_dat_i; reg [7:0] wb_adr; reg wb_stb=0, wb_cyc=0, wb_we=0; wire wb_ack; + + reg [35:0] tx_f36_data=0; + reg tx_f36_src_rdy = 0; + wire tx_f36_dst_rdy; + wire rx_f36_data; + wire rx_f36_src_rdy; + wire rx_f36_dst_rdy = 1; simple_gemac_wrapper simple_gemac_wrapper - (.clk125(clk), .reset(reset), + (.clk125(eth_clk), .reset(reset), .GMII_GTX_CLK(GMII_GTX_CLK), .GMII_TX_EN(GMII_TX_EN), .GMII_TX_ER(GMII_TX_ER), .GMII_TXD(GMII_TXD), .GMII_RX_CLK(GMII_RX_CLK), .GMII_RX_DV(GMII_RX_DV), .GMII_RX_ER(GMII_RX_ER), .GMII_RXD(GMII_RXD), .pause_req(pause_req), .pause_time(pause_time), - .rx_clk(rx_clk), .rx_ll_data(rx_ll_data), .rx_ll_sof(rx_ll_sof), - .rx_ll_eof(rx_ll_eof), .rx_ll_src_rdy(rx_ll_src_rdy), .rx_ll_dst_rdy(rx_ll_dst_rdy), - .tx_clk(tx_clk), .tx_ll_data(tx_ll_data), .tx_ll_sof(tx_ll_sof), - .tx_ll_eof(tx_ll_eof), .tx_ll_src_rdy(tx_ll_src_rdy), .tx_ll_dst_rdy(tx_ll_dst_rdy), - .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_stb(wb_stb), .wb_cyc(wb_cyc), .wb_ack(wb_ack), - .wb_we(wb_we), .wb_adr(wb_adr), .wb_dat_i(wb_dat_i), .wb_dat_o(wb_dat_o), - .mdio(mdio), .mdc(mdc) ); - - ll8_shortfifo rx_sfifo - (.clk(clk), .reset(reset), .clear(0), - .datain(rx_ll_data), .sof_i(rx_ll_sof), .eof_i(rx_ll_eof), - .error_i(rx_ll_error), .src_rdy_i(rx_ll_src_rdy), .dst_rdy_o(rx_ll_dst_rdy), - .dataout(rx_ll_data2), .sof_o(rx_ll_sof2), .eof_o(rx_ll_eof2), - .error_o(rx_ll_error2), .src_rdy_o(rx_ll_src_rdy2), .dst_rdy_i(rx_ll_dst_rdy2)); - - wire tx_ll_sof, tx_ll_eof, tx_ll_src_rdy, tx_ll_dst_rdy; - reg tx_ll_sof2=0, tx_ll_eof2=0; - reg tx_ll_src_rdy2 = 0; - wire tx_ll_dst_rdy2; - wire [7:0] tx_ll_data; - reg [7:0] tx_ll_data2 = 0; - wire tx_ll_error; - wire tx_ll_error2 = 0; - - ll8_shortfifo tx_sfifo - (.clk(clk), .reset(reset), .clear(clear), - .datain(tx_ll_data2), .sof_i(tx_ll_sof2), .eof_i(tx_ll_eof2), - .error_i(tx_ll_error2), .src_rdy_i(tx_ll_src_rdy2), .dst_rdy_o(tx_ll_dst_rdy2), - .dataout(tx_ll_data), .sof_o(tx_ll_sof), .eof_o(tx_ll_eof), - .error_o(tx_ll_error), .src_rdy_o(tx_ll_src_rdy), .dst_rdy_i(tx_ll_dst_rdy)); + + .sys_clk(sys_clk), .rx_f36_data(rx_f36_data), .rx_f36_src_rdy(rx_f36_src_rdy), .rx_f36_dst_rdy(rx_f36_dst_rdy), + .tx_f36_data(tx_f36_data), .tx_f36_src_rdy(tx_f36_src_rdy), .tx_f36_dst_rdy(tx_f36_dst_rdy), + + .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_stb(wb_stb), .wb_cyc(wb_cyc), .wb_ack(wb_ack), .wb_we(wb_we), + .wb_adr(wb_adr), .wb_dat_i(wb_dat_i), .wb_dat_o(wb_dat_o), + + .mdio(), .mdc(), + .debug() ); initial $dumpfile("simple_gemac_wrapper_tb.vcd"); initial $dumpvars(0,simple_gemac_wrapper_tb); @@ -100,67 +83,74 @@ module simple_gemac_wrapper_tb; begin @(negedge reset); repeat (10) - @(posedge clk); - WishboneWR(0,6'b111001); - WishboneWR(4,16'hF1F2); - WishboneWR(8,32'hF3F4_F5F6); + @(posedge wb_clk); + WishboneWR(0,6'b111101); + WishboneWR(4,16'hA0B0); + WishboneWR(8,32'hC0D0_A1B1); WishboneWR(12,16'h0000); WishboneWR(16,32'h0000_0000); - @(posedge clk); + @(posedge eth_clk); SendFlowCtrl(16'h0007); // Send flow control - @(posedge clk); + @(posedge eth_clk); #30000; - @(posedge clk); - SendFlowCtrl(16'h0009); // Increas flow control before it expires + @(posedge eth_clk); + SendFlowCtrl(16'h0009); // Increase flow control before it expires #10000; - @(posedge clk); + @(posedge eth_clk); SendFlowCtrl(16'h0000); // Cancel flow control before it expires - @(posedge clk); + @(posedge eth_clk); - SendPacket_to_ll8(8'hAA,10); // This packet gets dropped by the filters - repeat (10) - @(posedge clk); + repeat (1000) + @(posedge sys_clk); + SendPacket_to_fifo36(32'hA0B0C0D0,10); // This packet gets dropped by the filters + repeat (1000) + @(posedge sys_clk); - SendPacketFromFile_ll8(60,0,0); // The rest are valid packets + SendPacket_to_fifo36(32'hAABBCCDD,100); // This packet gets dropped by the filters + repeat (10) + @(posedge sys_clk); +/* + SendPacketFromFile_f36(60,0,0); // The rest are valid packets repeat (10) @(posedge clk); - SendPacketFromFile_ll8(61,0,0); + SendPacketFromFile_f36(61,0,0); repeat (10) @(posedge clk); - SendPacketFromFile_ll8(62,0,0); + SendPacketFromFile_f36(62,0,0); repeat (10) @(posedge clk); - SendPacketFromFile_ll8(63,0,0); + SendPacketFromFile_f36(63,0,0); repeat (1) @(posedge clk); - SendPacketFromFile_ll8(64,0,0); + SendPacketFromFile_f36(64,0,0); repeat (10) @(posedge clk); - SendPacketFromFile_ll8(59,0,0); + SendPacketFromFile_f36(59,0,0); repeat (1) @(posedge clk); - SendPacketFromFile_ll8(58,0,0); + SendPacketFromFile_f36(58,0,0); repeat (1) @(posedge clk); - SendPacketFromFile_ll8(100,0,0); + SendPacketFromFile_f36(100,0,0); repeat (1) @(posedge clk); - SendPacketFromFile_ll8(200,150,30); // waiting 14 empties the fifo, 15 underruns + SendPacketFromFile_f36(200,150,30); // waiting 14 empties the fifo, 15 underruns repeat (1) @(posedge clk); - SendPacketFromFile_ll8(100,0,30); - #10000 $finish; + SendPacketFromFile_f36(100,0,30); + */ + #100000 $finish; end // Force a CRC error initial begin #90000; - @(posedge clk); + @(posedge eth_clk); FORCE_DAT_ERR <= 8'h10; - @(posedge clk); + @(posedge eth_clk); FORCE_DAT_ERR <= 8'h00; end @@ -168,12 +158,12 @@ module simple_gemac_wrapper_tb; initial begin #116000; - @(posedge clk); + @(posedge eth_clk); FORCE_ERR <= 1; - @(posedge clk); + @(posedge eth_clk); FORCE_ERR <= 0; end - +/* // Cause receive fifo to fill, causing an RX overrun initial begin @@ -184,7 +174,7 @@ module simple_gemac_wrapper_tb; @(posedge clk); rx_ll_dst_rdy2 <= 1; end - + */ // Tests: Send and recv flow control, send and receive good packets, RX CRC err, RX_ER, RX overrun, TX underrun // Still need to test: CRC errors on Pause Frames, MDIO, wishbone @@ -205,7 +195,7 @@ module simple_gemac_wrapper_tb; wb_we <= 0; end endtask // WishboneWR - + /* always @(posedge clk) if(rx_ll_src_rdy2 & rx_ll_dst_rdy2) begin @@ -215,5 +205,5 @@ module simple_gemac_wrapper_tb; if(rx_ll_eof2 & ~rx_ll_sof2) $display("RX-PKT-END %d",$time); end - + */ endmodule // simple_gemac_wrapper_tb diff --git a/testbench/cmdfile b/testbench/cmdfile index 1063f428e..ed251665c 100644 --- a/testbench/cmdfile +++ b/testbench/cmdfile @@ -3,6 +3,7 @@ -y . -y ../top/u2_core -y ../control_lib +-y ../control_lib/newfifo -y ../serdes -y ../sdr_lib -y ../timing diff --git a/top/u2_core/.gitignore b/top/u2_core/.gitignore index b30397081..9728395c1 100644 --- a/top/u2_core/.gitignore +++ b/top/u2_core/.gitignore @@ -1,3 +1,4 @@ +*~ /xst /_ngo /_xmsgs diff --git a/top/u2_core/u2_core.v b/top/u2_core/u2_core.v index 5718366d5..1f78f6d3d 100755 --- a/top/u2_core/u2_core.v +++ b/top/u2_core/u2_core.v @@ -149,7 +149,7 @@ module u2_core wire [31:0] debug_gpio_0, debug_gpio_1; wire [31:0] atr_lines; - wire [31:0] debug_rx, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, + wire [31:0] debug_rx, debug_mac, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp; wire [15:0] ser_rx_occ, ser_tx_occ, dsp_rx_occ, dsp_tx_occ, eth_rx_occ, eth_tx_occ, eth_rx_occ2; @@ -315,19 +315,21 @@ module u2_core .in(set_data),.out(),.changed(flush_icache)); // Buffer Pool, slave #1 - wire rd0_read, rd0_sop, rd0_error, rd0_done, rd0_eop; - wire rd1_read, rd1_sop, rd1_error, rd1_done, rd1_eop; - wire rd2_read, rd2_sop, rd2_error, rd2_done, rd2_eop; - wire rd3_read, rd3_sop, rd3_error, rd3_done, rd3_eop; + wire rd0_ready_i, rd0_ready_o; + wire rd1_ready_i, rd1_ready_o; + wire rd2_ready_i, rd2_ready_o; + wire rd3_ready_i, rd3_ready_o; + wire [3:0] rd0_flags, rd1_flags, rd2_flags, rd3_flags; wire [31:0] rd0_dat, rd1_dat, rd2_dat, rd3_dat; - wire wr0_write, wr0_done, wr0_error, wr0_ready, wr0_full; - wire wr1_write, wr1_done, wr1_error, wr1_ready, wr1_full; - wire wr2_write, wr2_done, wr2_error, wr2_ready, wr2_full; - wire wr3_write, wr3_done, wr3_error, wr3_ready, wr3_full; + wire wr0_ready_i, wr0_ready_o; + wire wr1_ready_i, wr1_ready_o; + wire wr2_ready_i, wr2_ready_o; + wire wr3_ready_i, wr3_ready_o; + wire [3:0] wr0_flags, wr1_flags, wr2_flags, wr3_flags; wire [31:0] wr0_dat, wr1_dat, wr2_dat, wr3_dat; - buffer_pool buffer_pool + buffer_pool #(.BUF_SIZE(9), .SET_ADDR(64)) buffer_pool (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), .wb_we_i(s1_we),.wb_stb_i(s1_stb),.wb_adr_i(s1_adr),.wb_dat_i(s1_dat_o), .wb_dat_o(s1_dat_i),.wb_ack_o(s1_ack),.wb_err_o(),.wb_rty_o(), @@ -338,25 +340,17 @@ module u2_core .s0(status_b0),.s1(status_b1),.s2(status_b2),.s3(status_b3), .s4(status_b4),.s5(status_b5),.s6(status_b6),.s7(status_b7), - + // Write Interfaces - .wr0_dat_i(wr0_dat), .wr0_write_i(wr0_write), .wr0_done_i(wr0_done), - .wr0_error_i(wr0_error), .wr0_ready_o(wr0_ready), .wr0_full_o(wr0_full), - .wr1_dat_i(wr1_dat), .wr1_write_i(wr1_write), .wr1_done_i(wr1_done), - .wr1_error_i(wr1_error), .wr1_ready_o(wr1_ready), .wr1_full_o(wr1_full), - .wr2_dat_i(wr2_dat), .wr2_write_i(wr2_write), .wr2_done_i(wr2_done), - .wr2_error_i(wr2_error), .wr2_ready_o(wr2_ready), .wr2_full_o(wr2_full), - .wr3_dat_i(wr3_dat), .wr3_write_i(wr3_write), .wr3_done_i(wr3_done), - .wr3_error_i(wr3_error), .wr3_ready_o(wr3_ready), .wr3_full_o(wr3_full), + .wr0_data_i(wr0_dat), .wr0_flags_i(wr0_flags), .wr0_ready_i(wr0_ready_i), .wr0_ready_o(wr0_ready_o), + .wr1_data_i(wr1_dat), .wr1_flags_i(wr1_flags), .wr1_ready_i(wr1_ready_i), .wr1_ready_o(wr1_ready_o), + .wr2_data_i(wr2_dat), .wr2_flags_i(wr2_flags), .wr2_ready_i(wr2_ready_i), .wr2_ready_o(wr2_ready_o), + .wr3_data_i(wr3_dat), .wr3_flags_i(wr3_flags), .wr3_ready_i(wr3_ready_i), .wr3_ready_o(wr3_ready_o), // Read Interfaces - .rd0_dat_o(rd0_dat), .rd0_read_i(rd0_read), .rd0_done_i(rd0_done), - .rd0_error_i(rd0_error), .rd0_sop_o(rd0_sop), .rd0_eop_o(rd0_eop), - .rd1_dat_o(rd1_dat), .rd1_read_i(rd1_read), .rd1_done_i(rd1_done), - .rd1_error_i(rd1_error), .rd1_sop_o(rd1_sop), .rd1_eop_o(rd1_eop), - .rd2_dat_o(rd2_dat), .rd2_read_i(rd2_read), .rd2_done_i(rd2_done), - .rd2_error_i(rd2_error), .rd2_sop_o(rd2_sop), .rd2_eop_o(rd2_eop), - .rd3_dat_o(rd3_dat), .rd3_read_i(rd3_read), .rd3_done_i(rd3_done), - .rd3_error_i(rd3_error), .rd3_sop_o(rd3_sop), .rd3_eop_o(rd3_eop) + .rd0_data_o(rd0_dat), .rd0_flags_o(rd0_flags), .rd0_ready_i(rd0_ready_i), .rd0_ready_o(rd0_ready_o), + .rd1_data_o(rd1_dat), .rd1_flags_o(rd1_flags), .rd1_ready_i(rd1_ready_i), .rd1_ready_o(rd1_ready_o), + .rd2_data_o(rd2_dat), .rd2_flags_o(rd2_flags), .rd2_ready_i(rd2_ready_i), .rd2_ready_o(rd2_ready_o), + .rd3_data_o(rd3_dat), .rd3_flags_o(rd3_flags), .rd3_ready_i(rd3_ready_i), .rd3_ready_o(rd3_ready_o) ); // SPI -- Slave #2 @@ -400,8 +394,24 @@ module u2_core .word11(32'b0),.word12(32'b0),.word13(32'b0),.word14(32'b0),.word15(32'b0) ); - // Slave, #6 Ethernet MAC, see below + // ///////////////////////////////////////////////////////////////////////// + // Ethernet MAC Slave #6 + + simple_gemac_wrapper #(.RXFIFOSIZE(11), .TXFIFOSIZE(6)) simple_gemac_wrapper + (.clk125(clk_to_mac), .reset(wb_rst), + .GMII_GTX_CLK(GMII_GTX_CLK), .GMII_TX_EN(GMII_TX_EN), + .GMII_TX_ER(GMII_TX_ER), .GMII_TXD(GMII_TXD), + .GMII_RX_CLK(GMII_RX_CLK), .GMII_RX_DV(GMII_RX_DV), + .GMII_RX_ER(GMII_RX_ER), .GMII_RXD(GMII_RXD), + .sys_clk(dsp_clk), + .rx_f36_data({wr2_flags,wr2_dat}), .rx_f36_src_rdy(wr2_ready_i), .rx_f36_dst_rdy(wr2_ready_o), + .tx_f36_data({rd2_flags,rd2_dat}), .tx_f36_src_rdy(rd2_ready_o), .tx_f36_dst_rdy(rd2_ready_i), + .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_stb(s6_stb), .wb_cyc(s6_cyc), .wb_ack(s6_ack), + .wb_we(s6_we), .wb_adr(s6_adr), .wb_dat_i(s6_dat_o), .wb_dat_o(s6_dat_i), + .mdio(MDIO), .mdc(MDC), + .debug(debug_mac)); + // ///////////////////////////////////////////////////////////////////////// // Settings Bus -- Slave #7 settings_bus settings_bus (.wb_clk(wb_clk),.wb_rst(wb_rst),.wb_adr_i(s7_adr),.wb_dat_i(s7_dat_o), @@ -445,52 +455,6 @@ module u2_core assign leds = (led_src & led_hw) | (~led_src & led_sw); // ///////////////////////////////////////////////////////////////////////// - // Ethernet MAC Slave #6 - - wire Tx_mac_wa, Tx_mac_wr, Tx_mac_sop, Tx_mac_eop; - wire Rx_mac_empty, Rx_mac_rd, Rx_mac_sop, Rx_mac_eop, Rx_mac_err; - wire [31:0] Tx_mac_data, Rx_mac_data; - wire [1:0] Tx_mac_BE, Rx_mac_BE; - wire rst_mac; - - oneshot_2clk mac_rst_1shot (.clk_in(wb_clk),.in(wb_rst),.clk_out(clk_to_mac),.out(rst_mac)); - - MAC_top #(.TX_FF_DEPTH(9), .RX_FF_DEPTH(11)) - MAC_top - (.Clk_125M(clk_to_mac),.Clk_user(dsp_clk), - .rst_mac(rst_mac),.rst_user(dsp_rst), - .RST_I(wb_rst),.CLK_I(wb_clk),.STB_I(s6_stb),.CYC_I(s6_cyc),.ADR_I(s6_adr[8:2]), - .WE_I(s6_we),.DAT_I(s6_dat_o),.DAT_O(s6_dat_i),.ACK_O(s6_ack), - .Rx_mac_empty(Rx_mac_empty),.Rx_mac_rd(Rx_mac_rd),.Rx_mac_data(Rx_mac_data),.Rx_mac_BE(Rx_mac_BE), - .Rx_mac_sop(Rx_mac_sop),.Rx_mac_eop(Rx_mac_eop),.Rx_mac_err(Rx_mac_err), - .Tx_mac_wa(Tx_mac_wa),.Tx_mac_wr(Tx_mac_wr),.Tx_mac_data(Tx_mac_data), - .Tx_mac_BE(Tx_mac_BE),.Tx_mac_sop(Tx_mac_sop),.Tx_mac_eop(Tx_mac_eop), - .Gtx_clk(GMII_GTX_CLK),.Tx_clk(GMII_TX_CLK),.Tx_er(GMII_TX_ER),.Tx_en(GMII_TX_EN),.Txd(GMII_TXD), - .Rx_clk(GMII_RX_CLK),.Rx_er(GMII_RX_ER),.Rx_dv(GMII_RX_DV),.Rxd(GMII_RXD), - .Crs(GMII_CRS),.Col(GMII_COL), - .Mdio(MDIO),.Mdc(MDC), - .rx_fifo_occupied(eth_rx_occ2),.rx_fifo_full(eth_rx_full2),.rx_fifo_empty(eth_rx_empty2), - .tx_fifo_occupied(),.tx_fifo_full(),.tx_fifo_empty(), - .debug0(debug_mac0),.debug1(debug_mac1) ); - - mac_rxfifo_int mac_rxfifo_int - (.clk(dsp_clk),.rst(dsp_rst), - .Rx_mac_empty(Rx_mac_empty),.Rx_mac_rd(Rx_mac_rd),.Rx_mac_data(Rx_mac_data), - .Rx_mac_BE(Rx_mac_BE),.Rx_mac_sop(Rx_mac_sop), - .Rx_mac_eop(Rx_mac_eop),.Rx_mac_err(Rx_mac_err), - .wr_dat_o(wr2_dat),.wr_write_o(wr2_write),.wr_done_o(wr2_done), - .wr_error_o(wr2_error),.wr_ready_i(wr2_ready),.wr_full_i(wr2_full), - .fifo_occupied(eth_rx_occ),.fifo_full(eth_rx_full),.fifo_empty(eth_rx_empty) ); - - mac_txfifo_int mac_txfifo_int - (.clk(dsp_clk),.rst(dsp_rst),.mac_clk(clk_to_mac), - .Tx_mac_wa(Tx_mac_wa),.Tx_mac_wr(Tx_mac_wr),.Tx_mac_data(Tx_mac_data), - .Tx_mac_BE(Tx_mac_BE),.Tx_mac_sop(Tx_mac_sop),.Tx_mac_eop(Tx_mac_eop), - .rd_dat_i(rd2_dat),.rd_read_o(rd2_read),.rd_done_o(rd2_done), - .rd_error_o(rd2_error),.rd_sop_i(rd2_sop),.rd_eop_i(rd2_eop), - .fifo_occupied(eth_tx_occ),.fifo_full(eth_tx_full),.fifo_empty(eth_tx_empty) ); - - // ///////////////////////////////////////////////////////////////////////// // Interrupt Controller, Slave #8 wire [15:0] irq={{4'b0, clk_status, serdes_link_up, uart_tx_int, uart_rx_int}, @@ -573,8 +537,7 @@ module u2_core (.clk(dsp_clk), .rst(dsp_rst), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .master_time(master_time),.overrun(overrun), - .wr_dat_o(wr1_dat), .wr_write_o(wr1_write), .wr_done_o(wr1_done), .wr_error_o(wr1_error), - .wr_ready_i(wr1_ready), .wr_full_i(wr1_full), + .wr_dat_o(wr1_dat), .wr_flags_o(wr1_flags), .wr_ready_o(wr1_ready_i), .wr_ready_i(wr1_ready_o), .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), .fifo_occupied(dsp_rx_occ),.fifo_full(dsp_rx_full),.fifo_empty(dsp_rx_empty), .debug_rx(debug_rx) ); @@ -584,15 +547,14 @@ module u2_core (.clk(dsp_clk),.rst(dsp_rst), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .adc_a(adc_a),.adc_ovf_a(adc_ovf_a),.adc_b(adc_b),.adc_ovf_b(adc_ovf_b), - .io_rx(io_rx),.sample(sample_rx), .run(run_rx_d1), .strobe(strobe_rx), + .sample(sample_rx), .run(run_rx_d1), .strobe(strobe_rx), .debug(debug_rx_dsp) ); tx_control #(.FIFOSIZE(10)) tx_control (.clk(dsp_clk), .rst(dsp_rst), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .master_time(master_time),.underrun(underrun), - .rd_dat_i(rd1_dat), .rd_sop_i(rd1_sop), .rd_eop_i(rd1_eop), - .rd_read_o(rd1_read), .rd_done_o(rd1_done), .rd_error_o(rd1_error), + .rd_dat_i(rd1_dat), .rd_flags_i(rd1_flags), .rd_ready_i(rd1_ready_o), .rd_ready_o(rd1_ready_i), .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), .fifo_occupied(dsp_tx_occ),.fifo_full(dsp_tx_full),.fifo_empty(dsp_tx_empty), .debug(debug_txc) ); @@ -611,11 +573,9 @@ module u2_core serdes #(.TXFIFOSIZE(9),.RXFIFOSIZE(9)) serdes (.clk(dsp_clk),.rst(dsp_rst), .ser_tx_clk(ser_tx_clk),.ser_t(ser_t),.ser_tklsb(ser_tklsb),.ser_tkmsb(ser_tkmsb), - .rd_dat_i(rd0_dat),.rd_read_o(rd0_read),.rd_done_o(rd0_done),.rd_error_o(rd0_error), - .rd_sop_i(rd0_sop),.rd_eop_i(rd0_eop), + .rd_dat_i(rd0_dat),.rd_flags_i(rd0_flags),.rd_ready_o(rd0_ready_i),.rd_ready_i(rd0_ready_o), .ser_rx_clk(ser_rx_clk),.ser_r(ser_r),.ser_rklsb(ser_rklsb),.ser_rkmsb(ser_rkmsb), - .wr_dat_o(wr0_dat),.wr_write_o(wr0_write),.wr_done_o(wr0_done),.wr_error_o(wr0_error), - .wr_ready_i(wr0_ready),.wr_full_i(wr0_full), + .wr_dat_o(wr0_dat),.wr_flags_o(wr0_flags),.wr_ready_o(wr0_ready_i),.wr_ready_i(wr0_ready_o), .tx_occupied(ser_tx_occ),.tx_full(ser_tx_full),.tx_empty(ser_tx_empty), .rx_occupied(ser_rx_occ),.rx_full(ser_rx_full),.rx_empty(ser_rx_empty), .serdes_link_up(serdes_link_up),.debug0(debug_serdes0), .debug1(debug_serdes1) ); @@ -679,12 +639,29 @@ module u2_core eth_mac_debug <= { { 6'd0, GMII_TX_EN, GMII_RX_DV, debug_mac0[7:0]}, {eth_rx_full2, eth_rx_empty2, eth_rx_occ2[13:0]} }; - assign debug_clk[0] = 0; - assign debug_clk[1] = dsp_clk; - - assign debug = host_to_dsp_fifo; // debug_mux ? host_to_dsp_fifo : dsp_to_host_fifo; - assign debug_gpio_0 = eth_mac_debug; - assign debug_gpio_1 = 0; + assign debug_clk[0] = 0; // wb_clk; + assign debug_clk[1] = clk_to_mac; +/* + + wire mdio_cpy = MDIO; + assign debug = { { 1'b0, s6_stb, s6_ack, s6_we, s6_sel[3:0] }, + { s6_adr[15:8] }, + { s6_adr[7:0] }, + { 6'd0, mdio_cpy, MDC } }; +*/ +/* + assign debug = { { GMII_TXD }, + { 5'd0, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK }, + { wr2_flags, rd2_flags }, + { 4'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; + */ + assign debug = { { GMII_RXD }, + { 5'd0, GMII_RX_DV, GMII_RX_ER, GMII_RX_CLK }, + { wr2_flags, rd2_flags }, + { GMII_TX_EN,3'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; + + assign debug_gpio_0 = debug_mac; //eth_mac_debug; + assign debug_gpio_1 = 0; endmodule // u2_core diff --git a/top/u2_rev3/Makefile b/top/u2_rev3/Makefile index c41ce7f77..94681f6cd 100644 --- a/top/u2_rev3/Makefile +++ b/top/u2_rev3/Makefile @@ -56,18 +56,12 @@ export SOURCES := \ control_lib/CRC16_D16.v \ control_lib/atr_controller.v \ control_lib/bin2gray.v \ -control_lib/buffer_int.v \ -control_lib/buffer_pool.v \ -control_lib/cascadefifo2.v \ control_lib/dcache.v \ control_lib/decoder_3_8.v \ control_lib/dpram32.v \ -control_lib/fifo_2clock.v \ -control_lib/fifo_2clock_casc.v \ control_lib/gray2bin.v \ control_lib/gray_send.v \ control_lib/icache.v \ -control_lib/longfifo.v \ control_lib/mux4.v \ control_lib/mux8.v \ control_lib/nsgpio.v \ @@ -76,8 +70,6 @@ control_lib/ram_harv_cache.v \ control_lib/ram_loader.v \ control_lib/setting_reg.v \ control_lib/settings_bus.v \ -control_lib/shortfifo.v \ -control_lib/medfifo.v \ control_lib/srl.v \ control_lib/system_control.v \ control_lib/wb_1master.v \ @@ -89,37 +81,42 @@ control_lib/oneshot_2clk.v \ control_lib/sd_spi.v \ control_lib/sd_spi_wb.v \ control_lib/wb_bridge_16_32.v \ +control_lib/reset_sync.v \ +simple_gemac/simple_gemac_wrapper.v \ +simple_gemac/simple_gemac.v \ +simple_gemac/simple_gemac_wb.v \ +simple_gemac/simple_gemac_tx.v \ +simple_gemac/simple_gemac_rx.v \ +simple_gemac/crc.v \ +simple_gemac/delay_line.v \ +simple_gemac/flow_ctrl_tx.v \ +simple_gemac/flow_ctrl_rx.v \ +simple_gemac/address_filter.v \ +simple_gemac/ll8_to_txmac.v \ +simple_gemac/rxmac_to_ll8.v \ +simple_gemac/miim/eth_miim.v \ +simple_gemac/miim/eth_clockgen.v \ +simple_gemac/miim/eth_outputcontrol.v \ +simple_gemac/miim/eth_shiftreg.v \ +control_lib/newfifo/buffer_int.v \ +control_lib/newfifo/buffer_pool.v \ +control_lib/newfifo/fifo_2clock.v \ +control_lib/newfifo/fifo_2clock_cascade.v \ +control_lib/newfifo/ll8_shortfifo.v \ +control_lib/newfifo/ll8_to_fifo36.v \ +control_lib/newfifo/fifo_short.v \ +control_lib/newfifo/fifo_long.v \ +control_lib/newfifo/fifo_cascade.v \ +control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/longfifo.v \ +control_lib/shortfifo.v \ +control_lib/medfifo.v \ coregen/fifo_xlnx_2Kx36_2clk.v \ coregen/fifo_xlnx_2Kx36_2clk.xco \ coregen/fifo_xlnx_512x36_2clk.v \ coregen/fifo_xlnx_512x36_2clk.xco \ -eth/mac_rxfifo_int.v \ -eth/mac_txfifo_int.v \ -eth/rtl/verilog/Clk_ctrl.v \ -eth/rtl/verilog/MAC_rx.v \ -eth/rtl/verilog/MAC_rx/Broadcast_filter.v \ -eth/rtl/verilog/MAC_rx/CRC_chk.v \ -eth/rtl/verilog/MAC_rx/MAC_rx_FF.v \ -eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v \ -eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v \ -eth/rtl/verilog/MAC_top.v \ -eth/rtl/verilog/MAC_tx.v \ -eth/rtl/verilog/MAC_tx/CRC_gen.v \ -eth/rtl/verilog/MAC_tx/MAC_tx_FF.v \ -eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v \ -eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v \ -eth/rtl/verilog/MAC_tx/Random_gen.v \ -eth/rtl/verilog/Phy_int.v \ -eth/rtl/verilog/RMON.v \ -eth/rtl/verilog/RMON/RMON_addr_gen.v \ -eth/rtl/verilog/RMON/RMON_ctrl.v \ -eth/rtl/verilog/Reg_int.v \ -eth/rtl/verilog/eth_miim.v \ -eth/rtl/verilog/flow_ctrl_rx.v \ -eth/rtl/verilog/flow_ctrl_tx.v \ -eth/rtl/verilog/miim/eth_clockgen.v \ -eth/rtl/verilog/miim/eth_outputcontrol.v \ -eth/rtl/verilog/miim/eth_shiftreg.v \ +coregen/fifo_xlnx_64x36_2clk.v \ +coregen/fifo_xlnx_64x36_2clk.xco \ extram/wb_zbt16_b.v \ opencores/8b10b/decode_8b10b.v \ opencores/8b10b/encode_8b10b.v \ |