OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/orpsocv2/boards/xilinx
    from Rev 412 to Rev 415
    Reverse comparison

Rev 412 → Rev 415

/ml501/par/Makefile File deleted
/ml501/bench/verilog/include/eth_stim.v
451,6 → 451,137
 
 
`ifdef XILINX_DDR2
// Gets word from correct bank
task get_32bitword_from_xilinx_ddr2;
input [31:0] addr;
output [31:0] insn;
reg [16*8-1:0] ddr2_array_line0,ddr2_array_line1,ddr2_array_line2,
ddr2_array_line3;
integer word_in_line_num;
begin
// Get our 4 128-bit chunks (8 half-words in each!! Confused yet?),
// 16 words total
gen_cs[0].gen[0].u_mem0.memory_read(addr[28:27],addr[26:13],
{addr[12:6],3'd0},
ddr2_array_line0);
gen_cs[0].gen[1].u_mem0.memory_read(addr[28:27],addr[26:13],
{addr[12:6],3'd0},
ddr2_array_line1);
gen_cs[0].gen[2].u_mem0.memory_read(addr[28:27],addr[26:13],
{addr[12:6],3'd0},
ddr2_array_line2);
gen_cs[0].gen[3].u_mem0.memory_read(addr[28:27],addr[26:13],
{addr[12:6],3'd0},
ddr2_array_line3);
case (addr[5:2])
4'h0:
begin
insn[15:0] = ddr2_array_line0[15:0];
insn[31:16] = ddr2_array_line1[15:0];
end
4'h1:
begin
insn[15:0] = ddr2_array_line2[15:0];
insn[31:16] = ddr2_array_line3[15:0];
end
4'h2:
begin
insn[15:0] = ddr2_array_line0[31:16];
insn[31:16] = ddr2_array_line1[31:16];
end
4'h3:
begin
insn[15:0] = ddr2_array_line2[31:16];
insn[31:16] = ddr2_array_line3[31:16];
end
4'h4:
begin
insn[15:0] = ddr2_array_line0[47:32];
insn[31:16] = ddr2_array_line1[47:32];
end
4'h5:
begin
insn[15:0] = ddr2_array_line2[47:32];
insn[31:16] = ddr2_array_line3[47:32];
end
4'h6:
begin
insn[15:0] = ddr2_array_line0[63:48];
insn[31:16] = ddr2_array_line1[63:48];
end
4'h7:
begin
insn[15:0] = ddr2_array_line2[63:48];
insn[31:16] = ddr2_array_line3[63:48];
end
4'h8:
begin
insn[15:0] = ddr2_array_line0[79:64];
insn[31:16] = ddr2_array_line1[79:64];
end
4'h9:
begin
insn[15:0] = ddr2_array_line2[79:64];
insn[31:16] = ddr2_array_line3[79:64];
end
4'ha:
begin
insn[15:0] = ddr2_array_line0[95:80];
insn[31:16] = ddr2_array_line1[95:80];
end
4'hb:
begin
insn[15:0] = ddr2_array_line2[95:80];
insn[31:16] = ddr2_array_line3[95:80];
end
4'hc:
begin
insn[15:0] = ddr2_array_line0[111:96];
insn[31:16] = ddr2_array_line1[111:96];
end
4'hd:
begin
insn[15:0] = ddr2_array_line2[111:96];
insn[31:16] = ddr2_array_line3[111:96];
end
4'he:
begin
insn[15:0] = ddr2_array_line0[127:112];
insn[31:16] = ddr2_array_line1[127:112];
end
4'hf:
begin
insn[15:0] = ddr2_array_line2[127:112];
insn[31:16] = ddr2_array_line3[127:112];
end
endcase // case (addr[5:2])
end
endtask
task get_byte_from_xilinx_ddr2;
input [31:0] addr;
output [7:0] data_byte;
reg [31:0] word;
begin
get_32bitword_from_xilinx_ddr2(addr, word);
case (addr[1:0])
2'b00:
data_byte = word[31:24];
2'b01:
data_byte = word[23:16];
2'b10:
data_byte = word[15:8];
2'b11:
data_byte = word[7:0];
endcase // case (addr[1:0])
end
endtask // get_byte_from_xilinx_ddr2
 
`endif
 
 
//
// Check packet TX'd by MAC was good
//
496,13 → 627,29
// Variable we'll use for index in the PHY's TX buffer
buffer = 0; // Start of TX data
`ifdef VERSATILE_SDRAM
 
for (i=0;i<tx_len_bd;i=i+1)
begin
//$display("Checking address in tx bd 0x%0h",txpnt_sdram);
sdram_byte = 8'hx;
sdram0.get_byte(txpnt_sdram,sdram_byte);
`ifdef VERSATILE_SDRAM
sdram0.get_byte(txpnt_sdram,sdram_byte);
`endif
`ifdef XILINX_DDR2
get_byte_from_xilinx_ddr2(txpnt_sdram, sdram_byte);
`endif
if (sdram_byte === 8'hx)
begin
$display(" * Error: sdram_byte was %x", sdram_byte);
$display(" * eth_stim needs to be able to access the main memory to check packet rx/tx");
$display(" * RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h",
tx_bd_addr, txpnt_wb);
$finish;
end
 
 
phy_byte = eth_phy0.tx_mem[buffer];
// Debugging output
//$display("txpnt_sdram = 0x%h, sdram_byte = 0x%h, buffer = 0x%h, phy_byte = 0x%h", txpnt_sdram, sdram_byte, buffer, phy_byte);
519,12 → 666,6
end // for (i=0;i<tx_len_bd;i=i+1)
`else
$display("SET ME UP TO LOOK IN ANOTHER MEMORY!");
$display("RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h",
tx_bd_addr, txpnt_wb);
$finish;
`endif // !`ifdef VERSATILE_SDRAM
if (failure)
begin
#100
1002,14 → 1143,8
rxpnt_wb = {14'd0,rx_bd_addr[17:0]};
rxpnt_sdram = rx_bd_addr[24:0];
`ifdef VERSATILE_SDRAM
// We'll look inside the SDRAM array
// Hard coded for the SDRAM buffer area to be from the halfway mark in
// memory (so starting in Bank2)
// We'll be passed the offset from the beginning of the buffer area
// in rxpnt_wb. This value will be in bytes.
//$display("RAM pointer for BD is 0x%h, SDRAM addr is 0x%h", rx_bd_addr, rxpnt_sdram);
 
 
1016,7 → 1151,22
for (i=0;i<len;i=i+1)
begin
 
sdram0.get_byte(rxpnt_sdram,sdram_byte);
sdram_byte = 8'hx;
`ifdef VERSATILE_SDRAM
sdram0.get_byte(rxpnt_sdram,sdram_byte);
`endif
`ifdef XILINX_DDR2
get_byte_from_xilinx_ddr2(rxpnt_sdram, sdram_byte);
`endif
if (sdram_byte === 8'hx)
begin
$display(" * Error:");
$display(" * eth_stim needs to be able to access the main memory to check packet rx/tx");
$display("RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h",
rx_bd_addr, rxpnt_wb);
$finish;
end
 
phy_byte = eth_rx_sent_circbuf[eth_rx_sent_circbuf_read_ptr];//phy_rx_mem[buffer]; //eth_phy0.rx_mem[buffer];
 
1034,16 → 1184,7
rxpnt_sdram = rxpnt_sdram+1;
end // for (i=0;i<len;i=i+2)
`else
 
$display("SET ME UP TO LOOK IN ANOTHER MEMORY!");
$display("RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h",
rx_bd_addr, rxpnt_wb);
$finish;
`endif // !`ifdef VERSATILE_SDRAM
 
if (failure)
begin
#100
/ml501/bench/verilog/include/ddr2_model_preload.v
53,4 → 53,4
end // for (ram_ptr = 0 ; ram_ptr < ...
$display("(%t) * DDR2 RAM %1d preloaded",$time, i);
end // initial begin
 
/ml501/bench/verilog/orpsoc_testbench.v
73,14 → 73,14
tri1 i2c_scl, i2c_sda;
`ifdef JTAG_DEBUG
wire tdo_pad_o;
wire tck_pad_i;
wire tms_pad_i;
wire tdi_pad_i;
wire tdo_pad_o;
wire tck_pad_i;
wire tms_pad_i;
wire tdi_pad_i;
`endif
`ifdef UART0
wire uart0_stx_pad_o;
wire uart0_srx_pad_i;
wire uart0_stx_pad_o;
wire uart0_srx_pad_i;
`endif
`ifdef GPIO0
wire [gpio0_io_width-1:0] gpio0_io;
151,16 → 151,16
wire [ODT_WIDTH-1:0] ddr2_odt_fpga;
`endif
`ifdef XILINX_SSRAM
wire sram_clk;
wire sram_clk_fb;
wire sram_adv_ld_n;
wire [3:0] sram_bw;
wire sram_cen;
wire [21:1] sram_flash_addr;
wire [31:0] sram_flash_data;
wire sram_flash_oe_n;
wire sram_flash_we_n;
wire sram_mode;
wire sram_clk;
wire sram_clk_fb;
wire sram_adv_ld_n;
wire [3:0] sram_bw;
wire sram_cen;
wire [21:1] sram_flash_addr;
wire [31:0] sram_flash_data;
wire sram_flash_oe_n;
wire sram_flash_we_n;
wire sram_mode;
`endif
 
orpsoc_top dut
206,9 → 206,12
.uart0_srx_expheader_pad_i (uart0_srx_pad_i),
`endif
`ifdef SPI0
.spi0_sck_o (spi0_sck_o),
/*
via STARTUP_VIRTEX5
.spi0_sck_o (spi0_sck_o),
.spi0_miso_i (spi0_miso_i),
*/
.spi0_mosi_o (spi0_mosi_o),
.spi0_miso_i (spi0_miso_i),
.spi0_ss_o (spi0_ss_o),
`endif
`ifdef I2C0
252,11 → 255,11
`ifndef SIM_QUIET
`define CPU_ic_top or1200_ic_top
`define CPU_dc_top or1200_dc_top
wire ic_en = orpsoc_testbench.dut.or1200_top0.or1200_ic_top.ic_en;
wire ic_en = orpsoc_testbench.dut.or1200_top0.or1200_ic_top.ic_en;
always @(posedge ic_en)
$display("Or1200 IC enabled at %t", $time);
 
wire dc_en = orpsoc_testbench.dut.or1200_top0.or1200_dc_top.dc_en;
wire dc_en = orpsoc_testbench.dut.or1200_top0.or1200_dc_top.dc_en;
always @(posedge dc_en)
$display("Or1200 DC enabled at %t", $time);
`endif
281,8 → 284,15
`endif // `ifdef JTAG_DEBUG
`ifdef SPI0
// STARTUP_VIRTEX5 module routes these out on the board.
// So for now just connect directly to the internals here.
assign spi0_sck_o = dut.spi0_sck_o;
assign dut.spi0_miso_i = spi0_miso_i;
// SPI flash memory - M25P16 compatible SPI protocol
AT26DFxxx spi0_flash
AT26DFxxx
#(.MEMSIZE(2048*1024)) // 2MB flash on ML501
spi0_flash
(// Outputs
.SO (spi0_miso_i),
// Inputs
291,6 → 301,8
.SI (spi0_mosi_o),
.WPB (1'b1)
);
 
`endif // `ifdef SPI0
 
`ifdef ETH0
331,11 → 343,11
`endif // `ifdef ETH0
 
`ifdef XILINX_SSRAM
wire [18:0] sram_a;
wire [3:0] dqp;
wire [18:0] sram_a;
wire [3:0] dqp;
assign sram_a[18:0] = sram_flash_addr[19:1];
wire sram_ce1b, sram_ce2, sram_ce3b;
wire sram_ce1b, sram_ce2, sram_ce3b;
assign sram_ce1b = 1'b0;
assign sram_ce2 = 1'b1;
assign sram_ce3b = 1'b0;
446,28 → 458,30
 
`ifdef PRELOAD_RAM
`include "ddr2_model_preload.v"
`endif
ddr2_model u_mem0
(
.ck (ddr2_ck_sdram[CLK_WIDTH*i/DQS_WIDTH]),
.ck_n (ddr2_ck_n_sdram[CLK_WIDTH*i/DQS_WIDTH]),
.cke (ddr2_cke_sdram[j]),
.cs_n (ddr2_cs_n_sdram[CS_WIDTH*i/DQS_WIDTH]),
.ras_n (ddr2_ras_n_sdram),
.cas_n (ddr2_cas_n_sdram),
.we_n (ddr2_we_n_sdram),
.dm_rdqs (ddr2_dm_sdram[(2*(i+1))-1 : i*2]),
.ba (ddr2_ba_sdram),
.addr (ddr2_a_sdram),
.dq (ddr2_dq_sdram[(16*(i+1))-1 : i*16]),
.dqs (ddr2_dqs_sdram[(2*(i+1))-1 : i*2]),
.dqs_n (ddr2_dqs_n_sdram[(2*(i+1))-1 : i*2]),
.rdqs_n (),
.odt (ddr2_odt_sdram[ODT_WIDTH*i/DQS_WIDTH])
);
end
end
endgenerate
`endif
end
ddr2_model u_mem0
(
.ck (ddr2_ck_sdram[CLK_WIDTH*i/DQS_WIDTH]),
.ck_n (ddr2_ck_n_sdram[CLK_WIDTH*i/DQS_WIDTH]),
.cke (ddr2_cke_sdram[j]),
.cs_n (ddr2_cs_n_sdram[CS_WIDTH*i/DQS_WIDTH]),
.ras_n (ddr2_ras_n_sdram),
.cas_n (ddr2_cas_n_sdram),
.we_n (ddr2_we_n_sdram),
.dm_rdqs (ddr2_dm_sdram[(2*(i+1))-1 : i*2]),
.ba (ddr2_ba_sdram),
.addr (ddr2_a_sdram),
.dq (ddr2_dq_sdram[(16*(i+1))-1 : i*16]),
.dqs (ddr2_dqs_sdram[(2*(i+1))-1 : i*2]),
.dqs_n (ddr2_dqs_n_sdram[(2*(i+1))-1 : i*2]),
.rdqs_n (),
.odt (ddr2_odt_sdram[ODT_WIDTH*i/DQS_WIDTH])
);
end
end
endgenerate
`endif
 
495,9 → 509,9
`define VCD_SUFFIX ".vcd"
`endif
`ifndef SIM_QUIET
`ifndef SIM_QUIET
$display("* VCD in %s\n", {"../out/",`TEST_NAME_STRING,`VCD_SUFFIX});
`endif
`endif
$dumpfile({"../out/",`TEST_NAME_STRING,`VCD_SUFFIX});
`ifndef VCD_DEPTH
`define VCD_DEPTH 0
523,9 → 537,9
`ifdef END_TIME
initial begin
#(`END_TIME);
`ifndef SIM_QUIET
`ifndef SIM_QUIET
$display("* Finish simulation due to END_TIME being set at %t", $time);
`endif
`endif
$finish;
end
`endif
/ml501/rtl/verilog/include/or1200_defines.v
1725,8 → 1725,8
// used to determine where vectors are located. //
///////////////////////////////////////////////////////////////////////////////
// Boot from 0xf0000100
//`define OR1200_BOOT_PCREG_DEFAULT 30'h3c00003f
//`define OR1200_BOOT_ADR 32'hf0000100
`define OR1200_BOOT_PCREG_DEFAULT 30'h3c00003f
`define OR1200_BOOT_ADR 32'hf0000100
// Boot from 0x100
`define OR1200_BOOT_PCREG_DEFAULT 30'h0000003f
`define OR1200_BOOT_ADR 32'h00000100
// `define OR1200_BOOT_PCREG_DEFAULT 30'h0000003f
// `define OR1200_BOOT_ADR 32'h00000100
/ml501/rtl/verilog/include/orpsoc-defines.v
72,7 → 72,9
//`define ARBITER_IBUS_REGISTERING
`define ARBITER_IBUS_WATCHDOG
// Watchdog timeout: 2^(ARBITER_IBUS_WATCHDOG_TIMER_WIDTH+1) cycles
`define ARBITER_IBUS_WATCHDOG_TIMER_WIDTH 12
// This has to be kind of long, as DDR2 initialisation can take a little while
// and after reset, and if this is too short we'll always get bus error.
`define ARBITER_IBUS_WATCHDOG_TIMER_WIDTH 20
 
// Data bus arbiter
 
79,7 → 81,7
//`define ARBITER_DBUS_REGISTERING
`define ARBITER_DBUS_WATCHDOG
// Watchdog timeout: 2^(ARBITER_DBUS_WATCHDOG_TIMER_WIDTH+1) cycles
`define ARBITER_DBUS_WATCHDOG_TIMER_WIDTH 12
`define ARBITER_DBUS_WATCHDOG_TIMER_WIDTH 20
 
// Byte bus (peripheral bus) arbiter
// Don't really need the watchdog here - the databus will pick it up
/ml501/rtl/verilog/orpsoc_top/orpsoc_top.v
55,7 → 55,7
uart0_srx_expheader_pad_i, uart0_stx_expheader_pad_o,
`endif
`ifdef SPI0
spi0_sck_o, spi0_mosi_o, spi0_miso_i, spi0_ss_o,
spi0_mosi_o, spi0_ss_o,/* spi0_sck_o, spi0_miso_i,via STARTUP_VIRTEX5*/
`endif
`ifdef I2C0
i2c0_sda_io, i2c0_scl_io,
133,10 → 133,12
output uart0_stx_expheader_pad_o;
`endif
`ifdef SPI0
output spi0_sck_o;
output spi0_mosi_o;
output [spi0_ss_width-1:0] spi0_ss_o;
output [spi0_ss_width-1:0] spi0_ss_o;
/* via STARTUP_VIRTEX5
output spi0_sck_o;
input spi0_miso_i;
*/
`endif
`ifdef I2C0
inout i2c0_sda_io, i2c0_scl_io;
1227,7 → 1229,7
assign wbs_d_uart0_rty_o = 0;
 
// Two UART lines coming to single one (ensure they go high when unconnected)
assign uart_srx = uart0_srx_pad_i & uart0_srx_expheader_pad_i;
assign uart0_srx = uart0_srx_pad_i & uart0_srx_expheader_pad_i;
assign uart0_stx_pad_o = uart0_stx;
assign uart0_stx_expheader_pad_o = uart0_stx;
1315,6 → 1317,23
);
 
defparam spi0.slave_select_width = spi0_ss_width;
 
// SPI clock and MISO lines must go through STARTUP_VIRTEX5 block.
STARTUP_VIRTEX5 startup_virtex5
(
.CFGCLK(),
.CFGMCLK(),
.DINSPI(spi0_miso_i),
.EOS(),
.TCKSPI(),
.CLK(),
.GSR(1'b0),
.GTS(1'b0),
.USRCCLKO(spi0_sck_o),
.USRCCLKTS(1'b0),
.USRDONEO(),
.USRDONETS()
);
////////////////////////////////////////////////////////////////////////
`else // !`ifdef SPI0
/ml501/backend/par/run/Makefile
0,0 → 1,2
include ../bin/Makefile
 
/ml501/backend/par/bin/ml501.ucf
0,0 → 1,962
######################################################################
#
# UCF file for ML501 PAR
#
######################################################################
 
#------------------------------------------------------------------------------
# ZBT SSRAM controller multi-cycle path constraints (ssram_controller)
#------------------------------------------------------------------------------
 
# Define the two clock domains as timespecs
#NET dcm0_clkdv TNM_NET="wb_clk";
#TIMESPEC "TS_wb_clk" = PERIOD "wb_clk" 20 ns HIGH 10;
#NET dcm0_clk0 TNM_NET = "ssram_clk200";
#TIMESPEC "TS_ssram_clk200" = PERIOD "ssram_clk200" "TS_wb_clk" / 4;
 
# Now define their relationship - logic should be configured so that there's
# 1 WB cycle at all times before anything is sampled across domains
#TIMESPEC "TS_wb_clk_ssram_clk200" = from "wb_clk" TO "ssram_clk200" 15 ns;
#TIMESPEC "TS_ssram_clk200_wb_clk" = from "ssram_clk200" TO "wb_clk" 15 ns;
 
#------------------------------------------------------------------------------
# Pins used
#------------------------------------------------------------------------------
 
# 100MHz fixed freq clock.
#NET sys_clk_in LOC = AD8;
#NET sys_clk_in IOSTANDARD = LVCMOS33;
#NET "sys_clk_in" TNM_NET = "sys_clk_in";
#TIMESPEC "TS_sys_clk_in" = PERIOD "sys_clk_in" 10 ns HIGH 50.00%;
 
NET sys_clk_in_p LOC = E16;
NET sys_clk_in_n LOC = E17;
NET sys_clk_in_p IOSTANDARD = LVDS_25;
NET sys_clk_in_n IOSTANDARD = LVDS_25;
INST *sys_clk_in_ibufds DIFF_TERM=TRUE;
 
NET "clkgen0/sys_clk_in_200" TNM_NET = "sys_clk_in_200";
TIMESPEC "TSSYSCLK200" = PERIOD "sys_clk_in_200" 5 ns HIGH 50 %;
 
 
NET rst_n_pad_i LOC = T23 | IOSTANDARD = LVDCI_33;
NET rst_n_pad_i PULLUP;
NET rst_n_pad_i TIG;
 
 
#------------------------------------------------------------------------------
# User Reset pins (hook up so user can reset system from processor)
#------------------------------------------------------------------------------
 
#NET usr_rst_out LOC = P20 | IOSTANDARD = LVCMOS25; # HDR2_62
#NET usr_rst_out PULLUP;
#NET usr_rst_out TIG;
#NET usr_rst_in LOC = P21 | IOSTANDARD = LVCMOS25; # HDR2_64
#NET usr_rst_in PULLUP;
#NET usr_rst_in TIG;
 
#------------------------------------------------------------------------------
# All pins for ML501
#------------------------------------------------------------------------------
 
#NET "sys_clk_s" TNM_NET = "sys_clk";
#TIMESPEC "TSSYSCLK" = PERIOD "sys_clk" 10 ns HIGH 50 %;
#NET "sys_clk_in_200" TNM_NET = "sys_clk_in_200";
#TIMESPEC "TSSYSCLK200" = PERIOD "sys_clk_in_200" 5 ns HIGH 50 %;
 
#NET sys_clk_in_p LOC = E16;
#NET sys_clk_in_n LOC = E17;
#NET sys_clk_in_p IOSTANDARD = LVDS_25;
#NET sys_clk_in_n IOSTANDARD = LVDS_25;
#INST *sys_clk_in_ibufds DIFF_TERM=TRUE;
 
#NET sys_rst_pin LOC = T23 | IOSTANDARD = LVCMOS33 | PULLUP;
 
#NET Interrupt TIG;
 
# Reset timing ignore - treat as async paths
#NET sys_rst_s TIG;
#NET opb_v20_0_OPB_Rst TIG;
#NET lmb_v10_1_OPB_Rst TIG;
#NET lmb_v10_0_OPB_Rst TIG;
#NET opb_v20_0_Debug_SYS_Rst TIG;
#NET plb_v34_0_PLB_Rst TIG;
#NET dcm_locked TIG;
 
#------------------------------------------------------------------------------
# OpenCores JTAG Debug signals and User UART on EXP Header pins
#------------------------------------------------------------------------------
 
NET uart0_srx_expheader_pad_i LOC = F25; # HDR2_2
NET uart0_srx_expheader_pad_i TIG;
NET uart0_srx_expheader_pad_i PULLUP;
NET uart0_srx_expheader_pad_i IOSTANDARD = LVCMOS25;
 
NET uart0_stx_expheader_pad_o LOC = F24; # HDR2_4
NET uart0_stx_expheader_pad_o TIG;
NET uart0_stx_expheader_pad_o PULLUP;
NET uart0_stx_expheader_pad_o IOSTANDARD = LVCMOS25;
 
NET tdo_pad_o LOC = E26; # HDR2_6
NET tdi_pad_i LOC = E25; # HDR2_8
NET tms_pad_i LOC = G22; # HDR2_10
NET tck_pad_i LOC = G21; # HDR2_12
 
NET tdo_pad_o TIG; NET tdo_pad_o PULLUP; NET tdo_pad_o IOSTANDARD = LVCMOS25;
NET tdi_pad_i TIG; NET tdi_pad_i PULLUP; NET tdi_pad_i IOSTANDARD = LVCMOS25;
NET tms_pad_i TIG; NET tms_pad_i PULLUP; NET tms_pad_i IOSTANDARD = LVCMOS25;
NET tck_pad_i TIG; NET tck_pad_i PULLUP; NET tck_pad_i IOSTANDARD = LVCMOS25;
# Overide the following mapping error:
# ERROR:Place:645 - A clock IOB clock component is not placed at an optimal clock
# IOB site.
NET "tck_pad_i" CLOCK_DEDICATED_ROUTE = FALSE;
 
#////////////////////////////////////////////////////////////////////////////
#// Buttons, LEDs, Piezo, and DIP Switches
#////////////////////////////////////////////////////////////////////////////
 
# GPLED
NET gpio0_io<0> LOC = E11; #GPLED7 (Rightmost - LSB)
NET gpio0_io<1> LOC = E10; #GPLED6
NET gpio0_io<2> LOC = E15; #GPLED5
NET gpio0_io<3> LOC = D15; #GPLED4
NET gpio0_io<4> LOC = F12; #GPLED3
NET gpio0_io<5> LOC = E12; #GPLED2
NET gpio0_io<6> LOC = D14; #GPLED1
NET gpio0_io<7> LOC = E13; #GPLED0 (Leftmost - MSB)
 
NET gpio0_io<0> IOSTANDARD = LVCMOS25;
NET gpio0_io<1> IOSTANDARD = LVCMOS25;
NET gpio0_io<2> IOSTANDARD = LVCMOS25;
NET gpio0_io<3> IOSTANDARD = LVCMOS25;
NET gpio0_io<4> IOSTANDARD = LVCMOS25;
NET gpio0_io<5> IOSTANDARD = LVCMOS25;
NET gpio0_io<6> IOSTANDARD = LVCMOS25;
NET gpio0_io<7> IOSTANDARD = LVCMOS25;
 
# North-East-South-West-Center LEDs
NET gpio0_io<8> LOC = T22; # C LED
NET gpio0_io<9> LOC = AA18; # W LED
NET gpio0_io<10> LOC = AA8; # S LED
NET gpio0_io<11> LOC = Y18; # E LED
NET gpio0_io<12> LOC = Y8; # N LED
NET gpio0_io<8> IOSTANDARD = LVCMOS33;
NET gpio0_io<9> IOSTANDARD = LVCMOS33;
NET gpio0_io<10> IOSTANDARD = LVCMOS33;
NET gpio0_io<11> IOSTANDARD = LVCMOS33;
NET gpio0_io<12> IOSTANDARD = LVCMOS33;
 
# North-East-South-West-Center Buttons
NET gpio0_io<13> LOC = B21; # C Button
NET gpio0_io<14> LOC = C21; # W Button
NET gpio0_io<15> LOC = B22; # S Button
NET gpio0_io<16> LOC = A23; # E Button
NET gpio0_io<17> LOC = A22; # N Button
NET gpio0_io<13> IOSTANDARD = LVCMOS33;
NET gpio0_io<14> IOSTANDARD = LVCMOS33;
NET gpio0_io<15> IOSTANDARD = LVCMOS33;
NET gpio0_io<16> IOSTANDARD = LVCMOS33;
NET gpio0_io<17> IOSTANDARD = LVCMOS33;
 
# Dip Switches 1-8
NET gpio0_io<18> LOC = T7; # DIP SW 8
NET gpio0_io<19> LOC = U7; # DIP SW 7
NET gpio0_io<20> LOC = U5; # DIP SW 6
NET gpio0_io<21> LOC = U6; # DIP SW 5
NET gpio0_io<22> LOC = T5; # DIP SW 4
NET gpio0_io<23> LOC = T4; # DIP SW 3
#NET gpio0_io<24> LOC = V3; # DIP SW 2
#NET gpio0_io<25> LOC = U4; # DIP SW 1
NET gpio0_io<18> IOSTANDARD = LVCMOS18;
NET gpio0_io<19> IOSTANDARD = LVCMOS18;
NET gpio0_io<20> IOSTANDARD = LVCMOS18;
NET gpio0_io<21> IOSTANDARD = LVCMOS18;
NET gpio0_io<22> IOSTANDARD = LVCMOS18;
NET gpio0_io<23> IOSTANDARD = LVCMOS18;
#NET gpio0_io<24> IOSTANDARD = LVCMOS18;
#NET gpio0_io<25> IOSTANDARD = LVCMOS18;
 
#SMA Connectors
#NET gpio0_io<22> LOC = F10; # SMA_IN_N
#NET gpio0_io<23> LOC = F9; # SMA_IN_P
#NET gpio0_io<24> LOC = F19; # SMA_OUT_N
#NET gpio0_io<25> LOC = E18; # SMA_OUT_P
#NET gpio0_io<26> LOC = AD8; # USERCLK
#NET gpio0_io<22> IOSTANDARD = LVCMOS25;
#NET gpio0_io<23> IOSTANDARD = LVCMOS25;
#NET gpio0_io<24> IOSTANDARD = LVCMOS25;
#NET gpio0_io<25> IOSTANDARD = LVCMOS25;
#NET gpio0_io<26> IOSTANDARD = LVCMOS33;
 
NET "gpio0_io<*>" PULLDOWN;
NET "gpio0_io<*>" TIG;
NET "gpio0_io<*>" SLEW = SLOW;
NET "gpio0_io<*>" DRIVE = 2;
 
#NET "gpio0_io<22>" SLEW = FAST;
#NET "gpio0_io<22>" DRIVE = 12;
#NET "gpio0_io<23>" SLEW = FAST;
#NET "gpio0_io<23>" DRIVE = 12;
#NET "gpio0_io<24>" SLEW = FAST;
#NET "gpio0_io<24>" DRIVE = 12;
#NET "gpio0_io<25>" SLEW = FAST;
#NET "gpio0_io<25>" DRIVE = 12;
 
## #NET "gpio2_d_out<*>" TIG;
## #NET "gpio2_t_out<*>" TIG;
## NET "gpio2_in<*>" TIG;
 
## NET "piezo" LOC = V1;
## NET "piezo" IOSTANDARD = LVCMOS18;
## NET "piezo" TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for PS/2 Ports
## #------------------------------------------------------------------------------
 
## #Keyboard
## NET ps2_keyb_clk LOC = J1;
## NET ps2_keyb_clk SLEW = SLOW;
## NET ps2_keyb_clk DRIVE = 2;
## NET ps2_keyb_clk IOSTANDARD = LVCMOS18;
## NET ps2_keyb_clk TIG;
## NET ps2_keyb_data LOC = H2;
## NET ps2_keyb_data SLEW = SLOW;
## NET ps2_keyb_data DRIVE = 2;
## NET ps2_keyb_data IOSTANDARD = LVCMOS18;
## NET ps2_keyb_data TIG;
 
## #Mouse
## NET ps2_mouse_clk LOC = L2;
## NET ps2_mouse_clk SLEW = SLOW;
## NET ps2_mouse_clk DRIVE = 2;
## NET ps2_mouse_clk IOSTANDARD = LVCMOS18;
## NET ps2_mouse_clk TIG;
## NET ps2_mouse_data LOC = K1;
## NET ps2_mouse_data SLEW = SLOW;
## NET ps2_mouse_data DRIVE = 2;
## NET ps2_mouse_data IOSTANDARD = LVCMOS18;
## NET ps2_mouse_data TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for IIC Controller
## #------------------------------------------------------------------------------
 
# General I2C bus
 
NET i2c0_scl_io LOC = R20;
NET i2c0_sda_io LOC = T20;
NET i2c0_scl_io SLEW = SLOW;
NET i2c0_scl_io DRIVE = 6;
NET i2c0_scl_io TIG;
NET i2c0_scl_io IOSTANDARD = LVCMOS33;
NET i2c0_sda_io SLEW = SLOW;
NET i2c0_sda_io DRIVE = 6;
NET i2c0_sda_io TIG;
NET i2c0_sda_io IOSTANDARD = LVCMOS33;
 
# DDR2 I2C bus
 
NET i2c1_scl_io LOC = Y7;
NET i2c1_sda_io LOC = AA7;
NET i2c1_scl_io SLEW = SLOW;
NET i2c1_scl_io DRIVE = 6;
NET i2c1_scl_io TIG;
NET i2c1_scl_io IOSTANDARD = LVCMOS18;
NET i2c1_sda_io SLEW = SLOW;
NET i2c1_sda_io DRIVE = 6;
NET i2c1_sda_io TIG;
NET i2c1_sda_io IOSTANDARD = LVCMOS18;
 
## #------------------------------------------------------------------------------
## # IO Pad Locations Constraints for SPI memory
## #------------------------------------------------------------------------------
 
NET spi0_mosi_o LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
NET spi0_ss_o<0> LOC = AC14 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
# These go through the STARTUP_VIRTEX5 block - don't worry about assigning them
# here.
#NET spi0_miso_i LOC = K11 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
 
#NET spi0_sck_o LOC = J10 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for System ACE MPU / USB
## #------------------------------------------------------------------------------
 
## NET sysace_clk_in LOC = AB12;
## NET sysace_clk_in IOSTANDARD = LVCMOS33;
## NET sysace_clk_in TNM_NET = "sysace_clk_in";
## # Leave 1 ns margin
## TIMESPEC "TSSYSACE" = PERIOD "sysace_clk_in" 29 ns;
 
## NET sace_usb_a<0> LOC = N6;
## NET sace_usb_a<1> LOC = E5;
## NET sace_usb_a<2> LOC = F5;
## NET sace_usb_a<3> LOC = F4;
## NET sace_usb_a<4> LOC = J5;
## NET sace_usb_a<5> LOC = E7;
## NET sace_usb_a<6> LOC = G7;
## NET sace_usb_a<*> IOSTANDARD = LVCMOS33;
## NET sace_usb_a<*> SLEW = FAST;
## NET sace_usb_a<*> DRIVE = 8;
## NET sace_mpce LOC = F7;
## NET sace_mpce IOSTANDARD = LVCMOS33;
## NET sace_mpce SLEW = FAST;
## NET sace_mpce DRIVE = 8;
## NET sace_usb_d<0> LOC = M6;
## NET sace_usb_d<1> LOC = K5;
## NET sace_usb_d<2> LOC = L3;
## NET sace_usb_d<3> LOC = L4;
## NET sace_usb_d<4> LOC = L7;
## NET sace_usb_d<5> LOC = L5;
## NET sace_usb_d<6> LOC = H6;
## NET sace_usb_d<7> LOC = G5;
## NET sace_usb_d<8> LOC = M7;
## NET sace_usb_d<9> LOC = H7;
## NET sace_usb_d<10> LOC = J6;
## NET sace_usb_d<11> LOC = G4;
## NET sace_usb_d<12> LOC = K7;
## NET sace_usb_d<13> LOC = J4;
## NET sace_usb_d<14> LOC = H4;
## NET sace_usb_d<15> LOC = K6;
## NET sace_usb_d<*> IOSTANDARD = LVCMOS33;
## NET sace_usb_d<*> SLEW = FAST;
## NET sace_usb_d<*> DRIVE = 8;
## NET sace_usb_d<*> PULLDOWN;
## NET sace_usb_oen LOC = E6;
## NET sace_usb_oen IOSTANDARD = LVCMOS33;
## NET sace_usb_oen SLEW = FAST;
## NET sace_usb_oen DRIVE = 8;
## NET sace_usb_wen LOC = M5;
## NET sace_usb_wen IOSTANDARD = LVCMOS33;
## NET sace_usb_wen SLEW = FAST;
## NET sace_usb_wen DRIVE = 8;
## NET sysace_mpirq LOC = G6;
## NET sysace_mpirq IOSTANDARD = LVCMOS33;
## NET sysace_mpirq TIG;
## NET sysace_mpirq PULLDOWN;
 
## NET usb_csn LOC = N3;
## NET usb_csn IOSTANDARD = LVCMOS33;
## NET usb_csn SLEW = FAST;
## NET usb_csn DRIVE = 8;
## NET usb_hpi_reset_n LOC = P3;
## NET usb_hpi_reset_n IOSTANDARD = LVCMOS33;
## NET usb_hpi_reset_n TIG;
## NET usb_hpi_int LOC = M4;
## NET usb_hpi_int IOSTANDARD = LVCMOS33;
## NET usb_hpi_int TIG;
## NET usb_hpi_int PULLDOWN;
 
## ////////////////////////////////////////////////////////////////////////////
## // Misc Board Signals
## ////////////////////////////////////////////////////////////////////////////
 
## NET plb_error LOC = N4; # Bus Error 1
## NET plb_error IOSTANDARD = LVCMOS33;
## NET plb_error TIG;
## NET opb_error LOC = P5; # Bus Error 2
## NET opb_error IOSTANDARD = LVCMOS33;
## NET opb_error TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for Expansion Header GPIO
## #------------------------------------------------------------------------------
 
## NET gpio_exp_hdr1<31> LOC = AB26; # HDR1_64
## NET gpio_exp_hdr1<30> LOC = AC26; # HDR1_62
## NET gpio_exp_hdr1<29> LOC = AA25; # HDR1_60
## NET gpio_exp_hdr1<28> LOC = P26; # HDR1_58
## NET gpio_exp_hdr1<27> LOC = Y26; # HDR1_56
## NET gpio_exp_hdr1<26> LOC = Y25; # HDR1_54
## NET gpio_exp_hdr1<25> LOC = W26; # HDR1_52
## NET gpio_exp_hdr1<24> LOC = W25; # HDR1_50
## NET gpio_exp_hdr1<23> LOC = U25; # HDR1_48
## NET gpio_exp_hdr1<22> LOC = U24; # HDR1_46
## NET gpio_exp_hdr1<21> LOC = T25; # HDR1_44
## NET gpio_exp_hdr1<20> LOC = T24; # HDR1_42
## NET gpio_exp_hdr1<19> LOC = P24; # HDR1_40
## NET gpio_exp_hdr1<18> LOC = P25; # HDR1_38
## NET gpio_exp_hdr1<17> LOC = N26; # HDR1_36
## NET gpio_exp_hdr1<16> LOC = AB25; # HDR1_34
## NET gpio_exp_hdr1<15> LOC = M24; # HDR1_32
## NET gpio_exp_hdr1<14> LOC = N24; # HDR1_30
## NET gpio_exp_hdr1<13> LOC = M25; # HDR1_28
## NET gpio_exp_hdr1<12> LOC = M26; # HDR1_26
## NET gpio_exp_hdr1<11> LOC = K25; # HDR1_24
## NET gpio_exp_hdr1<10> LOC = K26; # HDR1_22
## NET gpio_exp_hdr1<9> LOC = L24; # HDR1_20
## NET gpio_exp_hdr1<8> LOC = L25; # HDR1_18
## NET gpio_exp_hdr1<7> LOC = M21; # HDR1_16
## NET gpio_exp_hdr1<6> LOC = K21; # HDR1_14
## NET gpio_exp_hdr1<5> LOC = K20; # HDR1_12
## NET gpio_exp_hdr1<4> LOC = M22; # HDR1_10
## NET gpio_exp_hdr1<3> LOC = H23; # HDR1_8
## NET gpio_exp_hdr1<2> LOC = J21; # HDR1_6
## NET gpio_exp_hdr1<1> LOC = J23; # HDR1_4
## NET gpio_exp_hdr1<0> LOC = J20; # HDR1_2
#NET gpio_exp_hdr1<*> TIG;
#NET gpio_exp_hdr1<*> PULLDOWN;
#NET gpio_exp_hdr1<*> IOSTANDARD = LVCMOS25;
 
## NET gpio_exp_hdr2<31> LOC = P21; # HDR2_64
## NET gpio_exp_hdr2<30> LOC = P20; # HDR2_62
## NET gpio_exp_hdr2<29> LOC = H24; # HDR2_60
## NET gpio_exp_hdr2<28> LOC = J24; # HDR2_58
## NET gpio_exp_hdr2<27> LOC = M20; # HDR2_56
## NET gpio_exp_hdr2<26> LOC = M19; # HDR2_54
## NET gpio_exp_hdr2<25> LOC = G24; # HDR2_52
## NET gpio_exp_hdr2<24> LOC = G25; # HDR2_50
## NET gpio_exp_hdr2<23> LOC = P23; # HDR2_48
## NET gpio_exp_hdr2<22> LOC = N23; # HDR2_46
## NET gpio_exp_hdr2<21> LOC = L20; # HDR2_44
## NET gpio_exp_hdr2<20> LOC = L19; # HDR2_42
## NET gpio_exp_hdr2<19> LOC = G26; # HDR2_40
## NET gpio_exp_hdr2<18> LOC = H26; # HDR2_38
## NET gpio_exp_hdr2<17> LOC = K23; # HDR2_36
## NET gpio_exp_hdr2<16> LOC = K22; # HDR2_34
## NET gpio_exp_hdr2<15> LOC = V26; # HDR2_32
## NET gpio_exp_hdr2<14> LOC = U26; # HDR2_30
## NET gpio_exp_hdr2<13> LOC = N22; # HDR2_28
## NET gpio_exp_hdr2<12> LOC = N21; # HDR2_26
## NET gpio_exp_hdr2<11> LOC = R22; # HDR2_24
## NET gpio_exp_hdr2<10> LOC = R23; # HDR2_22
## NET gpio_exp_hdr2<9> LOC = J25; # HDR2_20
## NET gpio_exp_hdr2<8> LOC = J26; # HDR2_18
## NET gpio_exp_hdr2<7> LOC = P19; # HDR2_16
## NET gpio_exp_hdr2<6> LOC = N19; # HDR2_14
## NET gpio_exp_hdr2<5> LOC = G21; # HDR2_12
## NET gpio_exp_hdr2<4> LOC = G22; # HDR2_10
## NET gpio_exp_hdr2<3> LOC = E25; # HDR2_8
## NET gpio_exp_hdr2<2> LOC = E26; # HDR2_6
## NET gpio_exp_hdr2<1> LOC = F24; # HDR2_4
## NET gpio_exp_hdr2<0> LOC = F25; # HDR2_2
## NET gpio_exp_hdr2<*> TIG;
## NET gpio_exp_hdr2<*> PULLDOWN;
## NET gpio_exp_hdr2<*> IOSTANDARD = LVCMOS25;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for Character LCD GPIO
## #------------------------------------------------------------------------------
 
## NET gpio_char_lcd<6> LOC = P6; # LCD_E
## NET gpio_char_lcd<5> LOC = R7; # LCD_RS
## NET gpio_char_lcd<4> LOC = R5; # LCD_RW
## NET gpio_char_lcd<3> LOC = P4; # LCD_DB7
## NET gpio_char_lcd<2> LOC = R3; # LCD_DB6
## NET gpio_char_lcd<1> LOC = T3; # LCD_DB5
## NET gpio_char_lcd<0> LOC = R6; # LCD_DB4
## NET gpio_char_lcd<*> IOSTANDARD = LVCMOS33;
## NET gpio_char_lcd<*> TIG;
## NET gpio_char_lcd<*> PULLDOWN;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for DDR Controllers
## #------------------------------------------------------------------------------
 
########################################################################
# Controller 0
# Memory Device: DDR2_SDRAM->SODIMMs->MT4HTF3264HY-53E #
# Data Width: 64 #
# Data Mask: 1 #
########################################################################
 
 
NET ddr2_a<0> LOC = Y5; # DDR_A0
NET ddr2_a<1> LOC = Y6; # DDR_A1
NET ddr2_a<2> LOC = W6; # DDR_A2
NET ddr2_a<3> LOC = W5; # DDR_A3
NET ddr2_a<4> LOC = V7; # DDR_A4
NET ddr2_a<5> LOC = V6; # DDR_A5
NET ddr2_a<6> LOC = Y3; # DDR_A6
NET ddr2_a<7> LOC = W3; # DDR_A7
NET ddr2_a<8> LOC = W4; # DDR_A8
NET ddr2_a<9> LOC = V4; # DDR_A9
NET ddr2_a<10> LOC = AD3; # DDR_A10
NET ddr2_a<11> LOC = AD4; # DDR_A11
NET ddr2_a<12> LOC = AC3; # DDR_A12
NET ddr2_ba<0> LOC = AB5; # DDR_BA0
NET ddr2_ba<1> LOC = AB6; # DDR_BA1
NET ddr2_cas_n LOC = AE3; # DDR_CAS_N
NET ddr2_cke<0> LOC = AA3; # DDR_CKE
NET ddr2_cke<1> LOC = AB4; # DDR_CKE
NET ddr2_cs_n<0> LOC = AF3; # DDR_CS_N
NET ddr2_cs_n<1> LOC = AD6; # DDR_CS_N
NET ddr2_ras_n LOC = AC6; # DDR_RAS_N
NET ddr2_we_n LOC = AB7; # DDR_WE_N
NET ddr2_ck<0> LOC = E2; # DDR_CK0_P
NET ddr2_ck_n<0> LOC = E1; # DDR_CK0_N
NET ddr2_ck<1> LOC = P1; # DDR_CK1_P
NET ddr2_ck_n<1> LOC = R1; # DDR_CK1_N
NET ddr2_odt<0> LOC =AE6; # DDR_ODT0
NET ddr2_odt<1> LOC =AE5; # DDR_ODT1
 
NET ddr2_dm<0> LOC = B9; # DDR_DM0
NET ddr2_dm<1> LOC = A8; # DDR_DM1
NET ddr2_dm<2> LOC = C4; # DDR_DM2
NET ddr2_dm<3> LOC = F2; # DDR_DM3
NET ddr2_dm<4> LOC = AB1; # DDR_DM4
NET ddr2_dm<5> LOC = AF24; # DDR_DM5
NET ddr2_dm<6> LOC = AF22; # DDR_DM6
NET ddr2_dm<7> LOC = AF8; # DDR_DM7
 
NET ddr2_dqs<0> LOC = B7; # DDR_DQS0
NET ddr2_dqs_n<0> LOC = A7; # DDR_DQSN0
NET ddr2_dqs<1> LOC = D5; # DDR_DQS1
NET ddr2_dqs_n<1> LOC = D6; # DDR_DQSN1
NET ddr2_dqs<2> LOC = C6; # DDR_DQS2
NET ddr2_dqs_n<2> LOC = C7; # DDR_DQSN2
NET ddr2_dqs<3> LOC = M1; # DDR_DQS3
NET ddr2_dqs_n<3> LOC = N1; # DDR_DQSN3
NET ddr2_dqs<4> LOC = T2; # DDR_DQS4
NET ddr2_dqs_n<4> LOC = R2; # DDR_DQSN4
NET ddr2_dqs<5> LOC = AF18; # DDR_DQS5
NET ddr2_dqs_n<5> LOC = AE18; # DDR_DQSN5
NET ddr2_dqs<6> LOC = AF19; # DDR_DQS6
NET ddr2_dqs_n<6> LOC = AF20; # DDR_DQSN6
NET ddr2_dqs<7> LOC = AF17; # DDR_DQS7
NET ddr2_dqs_n<7> LOC = AE17; # DDR_DQSN7
 
NET ddr2_dq<0> LOC = C11; # DDR_D0
NET ddr2_dq<1> LOC = C13; # DDR_D1
NET ddr2_dq<2> LOC = A12; # DDR_D2
NET ddr2_dq<3> LOC = C9; # DDR_D3
NET ddr2_dq<4> LOC = D10; # DDR_D4
NET ddr2_dq<5> LOC = C12; # DDR_D5
NET ddr2_dq<6> LOC = B12; # DDR_D6
NET ddr2_dq<7> LOC = A13; # DDR_D7
NET ddr2_dq<8> LOC = A10; # DDR_D8
NET ddr2_dq<9> LOC = A9; # DDR_D9
NET ddr2_dq<10> LOC = B5; # DDR_D10
NET ddr2_dq<11> LOC = D3; # DDR_D11
NET ddr2_dq<12> LOC = B10; # DDR_D12
NET ddr2_dq<13> LOC = B11; # DDR_D13
NET ddr2_dq<14> LOC = B6; # DDR_D14
NET ddr2_dq<15> LOC = B4; # DDR_D15
NET ddr2_dq<16> LOC = C2; # DDR_D16
NET ddr2_dq<17> LOC = A2; # DDR_D17
NET ddr2_dq<18> LOC = D1; # DDR_D18
NET ddr2_dq<19> LOC = B1; # DDR_D19
NET ddr2_dq<20> LOC = C3; # DDR_D20
NET ddr2_dq<21> LOC = A3; # DDR_D21
NET ddr2_dq<22> LOC = C1; # DDR_D22
NET ddr2_dq<23> LOC = B2; # DDR_D23
NET ddr2_dq<24> LOC = F3; # DDR_D24
NET ddr2_dq<25> LOC = G1; # DDR_D25
NET ddr2_dq<26> LOC = G2; # DDR_D26
NET ddr2_dq<27> LOC = H3; # DDR_D27
NET ddr2_dq<28> LOC = E3; # DDR_D28
NET ddr2_dq<29> LOC = H1; # DDR_D29
NET ddr2_dq<30> LOC = K3; # DDR_D30
NET ddr2_dq<31> LOC = J3; # DDR_D31
 
NET ddr2_dq<32> LOC = Y1; # DDR_D32
NET ddr2_dq<33> LOC = Y2; # DDR_D33
NET ddr2_dq<34> LOC = AC1; # DDR_D34
NET ddr2_dq<35> LOC = AD1; # DDR_D35
NET ddr2_dq<36> LOC = AA2; # DDR_D36
NET ddr2_dq<37> LOC = AB2; # DDR_D37
NET ddr2_dq<38> LOC = AC2; # DDR_D38
NET ddr2_dq<39> LOC = AE1; # DDR_D39
NET ddr2_dq<40> LOC = AD23; # DDR_D40
NET ddr2_dq<41> LOC = AD26; # DDR_D41
NET ddr2_dq<42> LOC = AF25; # DDR_D42
NET ddr2_dq<43> LOC = AD25; # DDR_D43
NET ddr2_dq<44> LOC = AD24; # DDR_D44
NET ddr2_dq<45> LOC = AE26; # DDR_D45
NET ddr2_dq<46> LOC = AE25; # DDR_D46
NET ddr2_dq<47> LOC = AF23; # DDR_D47
NET ddr2_dq<48> LOC = AD20; # DDR_D48
NET ddr2_dq<49> LOC = AE20; # DDR_D49
NET ddr2_dq<50> LOC = AF14; # DDR_D50
NET ddr2_dq<51> LOC = AF12; # DDR_D51
NET ddr2_dq<52> LOC = AD21; # DDR_D52
NET ddr2_dq<53> LOC = AE21; # DDR_D53
NET ddr2_dq<54> LOC = AF13; # DDR_D54
NET ddr2_dq<55> LOC = AE12; # DDR_D55
NET ddr2_dq<56> LOC = AE11; # DDR_D56
NET ddr2_dq<57> LOC = AE10; # DDR_D57
NET ddr2_dq<58> LOC = AF7; # DDR_D58
NET ddr2_dq<59> LOC = AE7; # DDR_D59
NET ddr2_dq<60> LOC = AF10; # DDR_D60
NET ddr2_dq<61> LOC = AF9; # DDR_D61
NET ddr2_dq<62> LOC = AE8; # DDR_D62
NET ddr2_dq<63> LOC = AD9; # DDR_D63
 
NET ddr2_a<*> IOSTANDARD = SSTL18_II;
NET ddr2_ba<*> IOSTANDARD = SSTL18_II;
NET ddr2_cke<*> IOSTANDARD = SSTL18_II;
NET ddr2_cas_n IOSTANDARD = SSTL18_II;
NET ddr2_cs_n<*> IOSTANDARD = SSTL18_II;
NET ddr2_ras_n IOSTANDARD = SSTL18_II;
NET ddr2_we_n IOSTANDARD = SSTL18_II;
NET ddr2_odt<*> IOSTANDARD = SSTL18_II;
 
NET ddr2_dm<*> IOSTANDARD = SSTL18_II_DCI;
NET ddr2_dq<*> IOSTANDARD = SSTL18_II_DCI;
 
NET ddr2_ck<*> IOSTANDARD = DIFF_SSTL18_II;
NET ddr2_ck_n<*> IOSTANDARD = DIFF_SSTL18_II;
NET ddr2_dqs<*> IOSTANDARD = DIFF_SSTL18_II_DCI;
NET ddr2_dqs_n<*> IOSTANDARD = DIFF_SSTL18_II_DCI;
 
## NET "ddr2_cal_clk" TNM_NET = "ddr2_cal_clk";
## NET "ddr2_dev_clk_*" TNM_NET = "ddr2_dev_clk";
## TIMESPEC "TSCAL_DEV" = FROM "ddr2_cal_clk" TO "ddr2_dev_clk" TIG;
## TIMESPEC "TSDEV_CAL" = FROM "ddr2_dev_clk" TO "ddr2_cal_clk" TIG;
###############################################################################
# Define multicycle paths - these paths may take longer because additional
# time allowed for logic to settle in calibration/initialization FSM
###############################################################################
 
# MIG 2.1: Eliminate Timegroup definitions for CLK0, and CLK90. Instead trace
# multicycle paths from originating flip-flop to ANY destination
# flip-flop (or in some cases, it can also be a BRAM)
# MUX Select for either rising/falling CLK0 for 2nd stage read capture
INST "*/u_phy_calib/gen_rd_data_sel*.u_ff_rd_data_sel" TNM = "TNM_RD_DATA_SEL";
TIMESPEC "TS_MC_RD_DATA_SEL" = FROM "TNM_RD_DATA_SEL" TO FFS
"TS_SYS_CLK" * 4;
# MUX select for read data - optional delay on data to account for byte skews
INST "*/u_usr_rd/gen_rden_sel_mux*.u_ff_rden_sel_mux" TNM = "TNM_RDEN_SEL_MUX";
TIMESPEC "TS_MC_RDEN_SEL_MUX" = FROM "TNM_RDEN_SEL_MUX" TO FFS
"TS_SYS_CLK" * 4;
# Calibration/Initialization complete status flag (for PHY logic only) - can
# be used to drive both flip-flops and BRAMs
INST "*/u_phy_init/u_ff_phy_init_data_sel" TNM = "TNM_PHY_INIT_DATA_SEL";
TIMESPEC "TS_MC_PHY_INIT_DATA_SEL_0" = FROM "TNM_PHY_INIT_DATA_SEL" TO FFS
"TS_SYS_CLK" * 4;
TIMESPEC "TS_MC_PHY_INIT_DATA_SEL_90" = FROM "TNM_PHY_INIT_DATA_SEL" TO RAMS
"TS_SYS_CLK" * 4;
# Select (address) bits for SRL32 shift registers used in stage3/stage4
# calibration
INST "*/u_phy_calib/gen_gate_dly*.u_ff_gate_dly" TNM = "TNM_GATE_DLY";
TIMESPEC "TS_MC_GATE_DLY" = FROM "TNM_GATE_DLY" TO FFS "TS_SYS_CLK" * 4;
 
INST "*/u_phy_calib/gen_rden_dly*.u_ff_rden_dly" TNM = "TNM_RDEN_DLY";
TIMESPEC "TS_MC_RDEN_DLY" = FROM "TNM_RDEN_DLY" TO FFS "TS_SYS_CLK" * 4;
 
INST "*/u_phy_calib/gen_cal_rden_dly*.u_ff_cal_rden_dly"
TNM = "TNM_CAL_RDEN_DLY";
TIMESPEC "TS_MC_CAL_RDEN_DLY" = FROM "TNM_CAL_RDEN_DLY" TO FFS
"TS_SYS_CLK" * 4;
 
 
###############################################################################
# DQS Read Post amble Glitch Squelch circuit related constraints
###############################################################################
 
###############################################################################
# LOC placement of DQS-squelch related IDDR and IDELAY elements
# Each circuit can be located at any of the following locations:
# 1. Unused "N"-side of DQS differential pair I/O
# 2. DM data mask (output only, input side is free for use)
# 3. Any output-only site
###############################################################################
 
#INST "*/gen_dqs[0].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y182";
#INST "*/gen_dqs[0].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y182";
#INST "*/gen_dqs[1].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y180";
#INST "*/gen_dqs[1].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y180";
#INST "*/gen_dqs[2].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y178";
#INST "*/gen_dqs[2].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y178";
#INST "*/gen_dqs[3].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y142";
#INST "*/gen_dqs[3].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y142";
#INST "*/gen_dqs[4].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y140";
#INST "*/gen_dqs[4].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y140";
#INST "*/gen_dqs[5].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y138";
#INST "*/gen_dqs[5].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y138";
#INST "*/gen_dqs[6].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y102";
#INST "*/gen_dqs[6].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y102";
#INST "*/gen_dqs[7].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y100";
#INST "*/gen_dqs[7].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y100";
 
###############################################################################
# LOC and timing constraints for flop driving DQS CE enable signal
# from fabric logic. Even though the absolute delay on this path is
# calibrated out (when synchronizing this output to DQS), the delay
# should still be kept as low as possible to reduce post-calibration
# voltage/temp variations - these are roughly proportional to the
# absolute delay of the path
###############################################################################
INST "*/u_phy_calib/gen_gate[0].u_en_dqs_ff" LOC = SLICE_X0Y91;
INST "*/u_phy_calib/gen_gate[1].u_en_dqs_ff" LOC = SLICE_X0Y90;
INST "*/u_phy_calib/gen_gate[2].u_en_dqs_ff" LOC = SLICE_X0Y89;
INST "*/u_phy_calib/gen_gate[3].u_en_dqs_ff" LOC = SLICE_X0Y71;
INST "*/u_phy_calib/gen_gate[4].u_en_dqs_ff" LOC = SLICE_X0Y70;
INST "*/u_phy_calib/gen_gate[5].u_en_dqs_ff" LOC = SLICE_X0Y69;
INST "*/u_phy_calib/gen_gate[6].u_en_dqs_ff" LOC = SLICE_X0Y51;
INST "*/u_phy_calib/gen_gate[7].u_en_dqs_ff" LOC = SLICE_X0Y50;
 
# Control for DQS gate - from fabric flop. Prevent "runaway" delay -
# two parts to this path: (1) from fabric flop to IDELAY, (2) from
# IDELAY to asynchronous reset of IDDR that drives the DQ CE's
# This can be relaxed by the user for lower frequencies:
# 300MHz = 850ps, 267MHz = 900ps. At 200MHz = 950ps.
# In general PAR should be able to route this
# within 900ps over all speed grades.
#NET "*/u_phy_io/en_dqs*" MAXDELAY = 900 ps;
# JB: Every single one failed with < 2ns slack!! Try upping this...
NET "*/u_phy_io/en_dqs*" MAXDELAY = 3000 ps;
NET "*/u_phy_io/gen_dqs*.u_iob_dqs/en_dqs_sync" MAXDELAY = 850 ps;
 
###############################################################################
# Define multicycle paths - these paths may take longer because additional
# time allowed for logic to settle in calibration/initialization FSM
###############################################################################
## DDR2 clock domain nets
NET "*/xilinx_ddr2_if0/ddr2_read_done" TNM_NET = "DDR2_READ_DONE_GRP";
NET "*/xilinx_ddr2_if0/ddr2_write_done" TNM_NET = "DDR2_WRITE_DONE_GRP";
NET "*/xilinx_ddr2_if0/do_writeback_ddr2_shifter*" TNM_NET = "DDR2_WRITEBACK_SHIFTER";
 
TIMEGRP "DDR2_MC_REGS" = "DDR2_READ_DONE_GRP" "DDR2_WRITE_DONE_GRP" "DDR2_WRITEBACK_SHIFTER";
## System bus (wishbone) domain nets
NET "*/xilinx_ddr2_if0/do_writeback*" TNM_NET = "WB_DO_WRITEBACK";
NET "*/xilinx_ddr2_if0/do_readfrom*" TNM_NET = "WB_DO_READFROM";
 
TIMEGRP "WB_MC_REGS" = "WB_DO_WRITEBACK" "WB_DO_READFROM";
 
# Path constraints - if bus clock is 50Mhz they have 20ns
TIMESPEC TS_ddr2_controller_mc_paths = FROM "WB_MC_REGS" to "DDR2_MC_REGS" 20ns;
TIMESPEC TS_ddr2_controller_mc_paths2 = FROM "DDR2_MC_REGS" to "WB_MC_REGS" 20ns;
 
###############################################################################
# "Half-cycle" path constraint from IDDR to CE pin for all DQ IDDR's
# for DQS Read Post amble Glitch Squelch circuit
###############################################################################
 
# Max delay from output of IDDR to CE input of DQ IDDRs = tRPST + some slack
# where slack account for rise-time of DQS on board. For now assume slack =
# 0.400ns (based on initial SPICE simulations, assumes use of ODT), so
# time = 0.4*Tcyc + 0.40ns = 1.6ns @333MHz
INST "*/gen_dqs[*].u_iob_dqs/u_iddr_dq_ce" TNM = "TNM_DQ_CE_IDDR";
INST "*/gen_dq[*].u_iob_dq/gen_stg2_*.u_iddr_dq" TNM = "TNM_DQS_FLOPS";
#TIMESPEC "TS_DQ_CE" = FROM "TNM_DQ_CE_IDDR" TO "TNM_DQS_FLOPS" 2.4 ns;
# JB: Was very closely failing on some paths, so up it by 100ps, but note it as an issue!
TIMESPEC "TS_DQ_CE" = FROM "TNM_DQ_CE_IDDR" TO "TNM_DQS_FLOPS" 2.5 ns;
 
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for UART
## #------------------------------------------------------------------------------
 
#NET uart_RX LOC = AC7;
#NET uart_RX IOSTANDARD = LVCMOS33;
#NET uart_RX TIG;
#NET uart_TX LOC = AD14;
#NET uart_TX IOSTANDARD = LVCMOS33;
#NET uart_TX TIG;
 
NET uart0_srx_pad_i LOC = AC7;
NET uart0_srx_pad_i IOSTANDARD = LVCMOS33;
NET uart0_srx_pad_i TIG;
NET uart0_stx_pad_o LOC = AD14;
NET uart0_stx_pad_o IOSTANDARD = LVCMOS33;
NET uart0_stx_pad_o TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for SRAM
## #------------------------------------------------------------------------------
 
#NET sram_clk LOC = U22;
#NET sram_clk_fb LOC = AD15;
#NET sram_clk_fb IOSTANDARD = LVCMOS33;
#NET sram_clk IOSTANDARD = LVDCI_33;
 
#NET sram_clk_fb FEEDBACK = 1500ps NET sram_clk;
 
##NET sram_flash_addr<23> LOC = Y10;
##NET sram_flash_addr<22> LOC = Y11;
#NET sram_flash_addr<21> LOC = AA17;
#NET sram_flash_addr<20> LOC = AB17;
#NET sram_flash_addr<19> LOC = G14;
#NET sram_flash_addr<18> LOC = F13;
#NET sram_flash_addr<17> LOC = H14;
#NET sram_flash_addr<16> LOC = H13;
#NET sram_flash_addr<15> LOC = F15;
#NET sram_flash_addr<14> LOC = G15;
#NET sram_flash_addr<13> LOC = G12;
#NET sram_flash_addr<12> LOC = H12;
#NET sram_flash_addr<11> LOC = G16;
#NET sram_flash_addr<10> LOC = H16;
#NET sram_flash_addr<9> LOC = H11;
#NET sram_flash_addr<8> LOC = G11;
#NET sram_flash_addr<7> LOC = H17;
#NET sram_flash_addr<6> LOC = G17;
#NET sram_flash_addr<5> LOC = G10;
#NET sram_flash_addr<4> LOC = G9;
#NET sram_flash_addr<3> LOC = G19;
#NET sram_flash_addr<2> LOC = H18;
#NET sram_flash_addr<1> LOC = H9;
##NET sram_flash_addr<0> LOC = H8;
#NET sram_flash_addr<*> IOSTANDARD = LVCMOS33;
#NET sram_flash_addr<*> SLEW = FAST;
#NET sram_flash_addr<*> DRIVE = 8;
 
#NET sram_flash_data<31> LOC = AD18 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<30> LOC = AC18 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<29> LOC = AB10 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<28> LOC = AB9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<27> LOC = AC17 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<26> LOC = AC16 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<25> LOC = AC8 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<24> LOC = AC9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<23> LOC = Y12 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<22> LOC = Y13 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<21> LOC = AA15 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<20> LOC = AB14 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<19> LOC = AA12 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<18> LOC = AB11 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<17> LOC = AA13 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_data<16> LOC = AA14 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
 
#NET sram_flash_data<15> LOC = AC24 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<14> LOC = AB22 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<13> LOC = AA22 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<12> LOC = AC21 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<11> LOC = AB21 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<10> LOC = W21 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<9> LOC = W20 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<8> LOC = U19 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<7> LOC = U20 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<6> LOC = V19 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<5> LOC = W19 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<4> LOC = Y21 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<3> LOC = Y20 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<2> LOC = AD19 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<1> LOC = AC19 | IOSTANDARD = LVDCI_33;
#NET sram_flash_data<0> LOC = AB20 | IOSTANDARD = LVDCI_33;
 
#NET sram_flash_data<*> PULLDOWN;
 
#NET sram_cen LOC = AB24 | IOSTANDARD = LVDCI_33;
#NET sram_flash_oe_n LOC = AC22 | IOSTANDARD = LVDCI_33;
##NET flash_oe_n LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_flash_we_n LOC = AB15 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_bw<3> LOC = W24 | IOSTANDARD = LVDCI_33;
#NET sram_bw<2> LOC = W23 | IOSTANDARD = LVDCI_33;
#NET sram_bw<1> LOC = V24 | IOSTANDARD = LVDCI_33;
#NET sram_bw<0> LOC = V23 | IOSTANDARD = LVDCI_33;
##NET flash_cen LOC = AA10 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
#NET sram_adv_ld_n LOC = U21 | IOSTANDARD = LVDCI_33;
#NET sram_mode LOC = AC23 | IOSTANDARD = LVDCI_33;
# NET flash_audio_reset_n LOC = AD10 | IOSTANDARD = LVCMOS33;
 
#------------------------------------------------------------------------------
# IO Pad Location Constraints / Properties for TFT VGA LCD Controller
#------------------------------------------------------------------------------
 
#NET dvi_iic_scl LOC = D21;
#NET dvi_iic_sda LOC = D20;
#NET dvi_iic_scl SLEW = SLOW;
#NET dvi_iic_scl DRIVE = 6;
#NET dvi_iic_scl TIG;
#NET dvi_iic_scl IOSTANDARD = LVCMOS33;
#NET dvi_iic_sda SLEW = SLOW;
#NET dvi_iic_sda DRIVE = 6;
#NET dvi_iic_sda TIG;
#NET dvi_iic_sda IOSTANDARD = LVCMOS33;
 
#NET tft_lcd_data<0> LOC = A17;
#NET tft_lcd_data<1> LOC = B17;
#NET tft_lcd_data<2> LOC = C17;
#NET tft_lcd_data<3> LOC = D18;
#NET tft_lcd_data<4> LOC = C16;
#NET tft_lcd_data<5> LOC = D16;
#NET tft_lcd_data<6> LOC = B16;
#NET tft_lcd_data<7> LOC = B15;
#NET tft_lcd_data<8> LOC = A15;
#NET tft_lcd_data<9> LOC = A14;
#NET tft_lcd_data<10> LOC = B14;
#NET tft_lcd_data<11> LOC = C14;
#NET tft_lcd_data<*> IOSTANDARD = LVDCI_33;
 
#NET tft_lcd_clk_p LOC = A20;
#NET tft_lcd_clk_p IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST;
#NET tft_lcd_clk_n LOC = B20;
#NET tft_lcd_clk_n IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST;
 
#NET tft_lcd_hsync LOC = C19;
#NET tft_lcd_hsync IOSTANDARD = LVDCI_33;
#NET tft_lcd_vsync LOC = D19;
#NET tft_lcd_vsync IOSTANDARD = LVDCI_33;
#NET tft_lcd_de LOC = C18;
#NET tft_lcd_de IOSTANDARD = LVDCI_33;
#NET tft_lcd_reset_b LOC = A18;
#NET tft_lcd_reset_b IOSTANDARD = LVCMOS33;
 
## NET "tft_clk" TNM_NET = "tft_clk";
## TIMESPEC "TSPLB_TFT" = FROM "sys_clk" TO "tft_clk" TIG;
## TIMESPEC "TSTFT_PLB" = FROM "tft_clk" TO "sys_clk" TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for Ethernet
## #------------------------------------------------------------------------------
 
NET eth0_col LOC = G20 | IOSTANDARD = LVCMOS25;
NET eth0_crs LOC = H22 | IOSTANDARD = LVCMOS25;
NET eth0_dv LOC = J19 | IOSTANDARD = LVCMOS25;
NET eth0_rx_clk LOC = F14 | IOSTANDARD = LVCMOS25;
NET eth0_rx_data<3> LOC = E22 | IOSTANDARD = LVCMOS25;
NET eth0_rx_data<2> LOC = E20 | IOSTANDARD = LVCMOS25;
NET eth0_rx_data<1> LOC = E21 | IOSTANDARD = LVCMOS25;
NET eth0_rx_data<0> LOC = F20 | IOSTANDARD = LVCMOS25;
 
NET eth0_rx_er LOC = H19 | IOSTANDARD = LVCMOS25;
NET eth0_tx_clk LOC = D13 | IOSTANDARD = LVCMOS25;
#NET eth0_mii_int_n LOC = F17 | IOSTANDARD = LVCMOS25;
NET eth0_rst_n_o LOC = F8 | IOSTANDARD = LVCMOS25 | PULLUP; # PHY_RESET pin on phy
NET eth0_tx_data<3> LOC = B25 | IOSTANDARD = LVDCI_33;
NET eth0_tx_data<2> LOC = C24 | IOSTANDARD = LVDCI_33;
NET eth0_tx_data<1> LOC = D24 | IOSTANDARD = LVDCI_33;
NET eth0_tx_data<0> LOC = C23 | IOSTANDARD = LVDCI_33;
NET eth0_tx_en LOC = B24 | IOSTANDARD = LVDCI_33;
NET eth0_tx_er LOC = A24 | IOSTANDARD = LVDCI_33;
 
## PHY Serial Management Interface pins
NET eth0_mdc_pad_o LOC = F18 | IOSTANDARD = LVCMOS25;
NET eth0_md_pad_io LOC = E8 | IOSTANDARD = LVCMOS25;
 
## NET phy_mii_int_n PULLUP;
 
## NET phy_mii_int_n TIG;
NET eth0_rst_n_o TIG;
 
## # Timing Constraints (these are recommended in documentation and
## # are unaltered except for the TIG)
#NET "eth0_rx_clk" TNM_NET = "RXCLK_GRP";
NET "eth0_rx_clk_BUFGP" TNM_NET = "RXCLK_GRP";
#NET "eth0_tx_clk" TNM_NET = "TXCLK_GRP";
NET "eth0_tx_clk_BUFGP" TNM_NET = "TXCLK_GRP";
TIMESPEC "TSTXOUT" = FROM "TXCLK_GRP" TO "PADS" 10 ns;
TIMESPEC "TSRXIN" = FROM "PADS" TO "RXCLK_GRP" 6 ns;
 
NET "eth0_rx_data<3>" IOBDELAY=NONE;
NET "eth0_rx_data<2>" IOBDELAY=NONE;
NET "eth0_rx_data<1>" IOBDELAY=NONE;
NET "eth0_rx_data<0>" IOBDELAY=NONE;
NET "eth0_dv" IOBDELAY=NONE;
NET "eth0_rx_er" IOBDELAY=NONE;
NET "eth0_crs" IOBDELAY=NONE;
NET "eth0_col" IOBDELAY=NONE;
 
## # Timing ignores (to specify unconstrained paths)
#FIXME? NET "*clkgen0/wb_clk_o" TNM_NET = "sys_clk"; # Wishbone clock
TIMESPEC "TS_PHYTX_OPB" = FROM "TXCLK_GRP" TO "sys_clk" TIG;
TIMESPEC "TS_OPB_PHYTX" = FROM "sys_clk" TO "TXCLK_GRP" TIG;
TIMESPEC "TS_PHYRX_OPB" = FROM "RXCLK_GRP" TO "sys_clk" TIG;
TIMESPEC "TS_OPB_PHYRX" = FROM "sys_clk" TO "RXCLK_GRP" TIG;
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for AC97 Sound Controller
## #------------------------------------------------------------------------------
 
## NET ac97_bit_clk LOC = AC13;
## NET ac97_bit_clk IOSTANDARD = LVCMOS33;
## NET ac97_bit_clk PERIOD = 80;
## NET ac97_sdata_in LOC = AC12;
## NET ac97_sdata_in IOSTANDARD = LVCMOS33;
## NET ac97_sdata_out LOC = AC11;
## NET ac97_sdata_out IOSTANDARD = LVCMOS33;
## NET ac97_sync LOC = AD11;
## NET ac97_sync IOSTANDARD = LVCMOS33;
/ml501/backend/par/bin/Makefile
0,0 → 1,195
######################################################################
#### ####
#### ORPSoC Xilinx backend Makefile ####
#### ####
#### Author(s): ####
#### - Julius Baxter, julius@opencores.org ####
#### ####
#### ####
######################################################################
#### ####
#### Copyright (C) 2009,2010 Authors and OPENCORES.ORG ####
#### ####
#### 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 ####
#### ####
######################################################################
 
# Name of the directory we're currently in
CUR_DIR=$(shell pwd)
 
# The root path of the board build
BOARD_DIR ?=$(CUR_DIR)/../../..
PROJECT_ROOT=$(BOARD_DIR)/../../..
 
SYN_DIR=$(BOARD_DIR)/syn/xst
SYN_RUN_DIR=$(SYN_DIR)/run
 
BOARD_BACKEND_DIR=$(BOARD_DIR)/backend/bin
 
DESIGN_NAME=orpsoc
BOARD_NAME=ml501
 
# Set V=1 when calling make to enable verbose output
# mainly for debugging purposes.
ifeq ($(V), 1)
Q=
else
Q ?=@
endif
 
BOARD_RTL_DIR=$(BOARD_DIR)/rtl
BOARD_RTL_VERILOG_DIR=$(BOARD_RTL_DIR)/verilog
# Only 1 include path for board builds - their own!
BOARD_RTL_VERILOG_INCLUDE_DIR=$(BOARD_RTL_VERILOG_DIR)/include
BOARD_DESIGN_VERILOG_DEFINES=$(BOARD_RTL_VERILOG_INCLUDE_DIR)/$(DESIGN_NAME)-defines.v
 
DEFINES_FILE_CUTOFF=$(shell grep -n "end of included module defines" $(BOARD_DESIGN_VERILOG_DEFINES) | cut -d ':' -f 1)
DESIGN_DEFINES=$(shell cat $(BOARD_DESIGN_VERILOG_DEFINES) | sed s://.*::g | sed s:\`:\#:g | sed 's:^[ ]*::' | awk '{print};/^\#define/{printf "_%s=%s\n",$$2,$$2}' | grep -v PERIOD | cpp -P | sed s:^_::g | sed s:=$$::g )
 
# Rule to look at what defines are being extracted from main file
print-defines:
@echo; echo "\t### Design defines ###"; echo
@echo "\tParsing "$(BOARD_DESIGN_VERILOG_DEFINES)" and exporting:"
@echo $(DESIGN_DEFINES)
 
 
# Backend tool path
# Check that the XILINX_PATH variable is set
ifeq ($(XILINX_PATH),)
$(error XILINX_PATH environment variable not set. Set it and rerun)
endif
XILINX_SETTINGS_SCRIPT=$(XILINX_PATH)/settings32.sh
XILINX_SETTINGS_SCRIPT_EXISTS=$(shell if [ -e $(XILINX_SETTINGS_SCRIPT) ]; then echo 1; else echo 0; fi)
ifeq ($(XILINX_SETTINGS_SCRIPT_EXISTS),0)
$(error XILINX_PATH variable not set correctly. Cannot find $$XILINX_PATH/settings32.sh)
endif
 
 
#
# Options for Xilinx PAR tools
#
FPGA_PART=xc5vlx50-ff676-1
XILINX_FLAGS=-intstyle silent
XILINX_MAP_FLAGS=-logic_opt off
XILINX_AREA_TARGET = speed
TIMING_REPORT_OPTIONS = -u 1000 -e 1000
SPI_FLASH_SIZE_KBYTES ?=2048
SPI_BOOTLOADER_SW_OFFSET_HEX ?=1c0000
 
print-config:
$(Q)echo; echo "\t### Backend make configuration ###"; echo
$(Q)echo "\tFPGA_PART="$(FPGA_PART)
$(Q)echo "\tXILINX_FLAGS="$(XILINX_FLAGS)
$(Q)echo "\tXILINX_MAP_FLAGS="$(XILINX_MAP_FLAGS)
$(Q)echo "\tXILINX_AREA_TARGET="$(XILINX_AREA_TARGET)
$(Q)echo "\tTIMING_REPORT_OPTIONS="$(TIMING_REPORT_OPTIONS)
$(Q)echo "\tSPI_FLASH_SIZE_KBYTES="$(SPI_FLASH_SIZE_KBYTES)
$(Q)echo "\tSPI_BOOTLOADER_SW_OFFSET_HEX="$(SPI_BOOTLOADER_SW_OFFSET_HEX)
 
 
 
NGC_FILE=$(SYN_RUN_DIR)/$(DESIGN_NAME).ngc
NGD_FILE=$(DESIGN_NAME).ngd
UCF_FILE=../bin/$(BOARD_NAME).ucf
MAPPED_NCD=$(DESIGN_NAME)_mapped.ncd
PARRED_NCD=$(DESIGN_NAME).ncd
PCF_FILE=$(DESIGN_NAME).pcf
BIT_FILE=$(DESIGN_NAME).bit
BIT_FILE_FOR_SPI=$(DESIGN_NAME)_spiboot.bit
BATCH_FILE=$(DESIGN_NAME).batch
MCS_FILE=$(DESIGN_NAME).mcs
 
$(NGC_FILE):
$(Q)$(MAKE) -C $(SYN_RUN_DIR) $(DESIGN_NAME).ngc
 
$(NGD_FILE): $(UCF_FILE) $(NGC_FILE)
@echo; echo "\t#### Running NGDBuild ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
ngdbuild -p $(FPGA_PART) -sd $(BOARD_BACKEND_DIR) -uc $(UCF_FILE) \
$(NGC_FILE) $@ )
 
#This target uses Xilinx tools to perform Mapping
$(MAPPED_NCD): $(NGD_FILE)
@echo; echo "\t#### Mapping ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
export XIL_MAP_NO_DSP_AUTOREG=1 && \
export XIL_MAP_ALLOW_ANY_DLL_INPUT=1 && \
map -p $(FPGA_PART) -detail -pr b -cm ${XILINX_AREA_TARGET} \
-timing -ol high -w $(XILINX_FLAGS) -o $@ -xe n $(NGD_FILE) $(PCF_FILE))
 
#This target uses Xilinx tools to Place & Route the design
$(PARRED_NCD): $(MAPPED_NCD)
@echo; echo "\t#### PAR'ing ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
par -w -pl high -rl high $(XILINX_FLAGS) $< $@ $(PCD_FILE) )
 
#This target uses Xilinx tools to generate a bitstream for download
$(BIT_FILE): $(PARRED_NCD)
@echo; echo "\t#### Generating .bit file ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
bitgen -w $(XILINX_FLAGS) -g StartUpClk:JtagClk $< $@ )
 
$(BIT_FILE_FOR_SPI): $(PARRED_NCD)
@echo; echo "\t#### Generating .bit file for SPI load ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
bitgen -w $(XILINX_FLAGS) -g StartUpClk:CClk $< $@ )
ifeq ($(BOOTLOADER_BIN),)
$(MCS_FILE): $(BIT_FILE_FOR_SPI)
@echo; echo "\t#### Generating .mcs file for SPI load ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
promgen -spi -p mcs -o $@ -s $(SPI_FLASH_SIZE_KBYTES) -u 0 $< )
else
$(MCS_FILE): $(BIT_FILE_FOR_SPI)
@echo; echo "\t#### Generating .mcs file for SPI load ####";
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \
promgen -spi -p mcs -o $@ -s $(SPI_FLASH_SIZE_KBYTES) -u 0 $< \
-data_file up $(SPI_BOOTLOADER_SW_OFFSET_HEX) $(BOOTLOADER_BIN) \
)
endif
 
#this target downloads the bitstream to the target fpga
download: $(BIT_FILE) $(BATCH_FILE)
$(Q)( . ${XILINX_PATH}/settings32.sh && \
impact -batch $(BATCH_FILE) )
 
#This target uses netgen to make a simulation netlist
netlist: $(PARRED_NCD)
@echo; echo "\t#### Generating netlist ####";
$(Q)(. $(XILINX_SETTINGS_SCRIPT) && \
netgen -ofmt verilog -sim -dir netlist -pcf $(PCF_FILE) $<)
 
#This one uses TRCE to make a timing report
timingreport: $(PARRED_NCD)
@echo; echo "\t#### Generating timing report ####";
$(Q)(. $(XILINX_SETTINGS_SCRIPT) && \
trce $(TIMING_REPORT_OPTIONS) $< )
 
 
clean:
$(Q)rm -rf *.*
 
clean-syn:
$(Q)$(MAKE) -C $(SYN_RUN_DIR) clean-all
 
clean-all: clean-syn clean
 
.PRECIOUS : $(PARRED_NCD) $(MAPPED_NCD) $(NGC_FILE) $(NGD_FILE) $(BIT_FILE) $(BIT_FILE_FOR_SPI)
/ml501/backend/bin/xilinx_ddr2_if_cache.ngc
0,0 → 1,3
XILINX-XDB 0.1 STUB 0.1 ASCII
XILINX-XDM V1.5e
$74444<,[o}e~g`n;"2*776(-30<=>?0123416<89:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01234567;2;%<<=4118JJUSS2hno~o26:1<2<>772F__\XZ5recg`wcdk531<3?:;00;>LHW]]0oecl313594;7038836B[[PTV9`jssj5;9;7>115926?OIX\^1mij}a=32>586=2;>6D@_UU8B@ATF]5;?6=0>5:36>LHW]]0JHI\MU=37>586=2;=6D@_UU8B@ATFD5;>6=0>5:35>LHW]]0JHI\ML=36>586:2;=6D@_UU8tag:6=3:5=?5<2;KMTPR=L@K7?<4?>00877<NFY__6IGM<2394;743:81EC^ZT;fjjd:493:5=>5<2;MVPUSS2MEJ0>?50?30?64=G\^[YY4KOC>05?699<18>7AZTQWW>air|h68=7>11097>LHW]]0OE]O33;2=54=32@D[YY4KIQ@?7?69981?6D@_UU8TADJ;;3:5=<5;:HLSQQ<PMH_7?7>11197>LHW]]0|il2<:1<26>2=G\^[YY4KOQC?7?699;1?6B[[PTV9@JVE4:0;2i5:vmz64c`1??':=<57:HLSQQ<PMKF7;7>1109;>LHW]]0\IO[37;2==>GCL[KG0=0n;@FGVDJ;994j7LJKR@N?548f3HNO^LB313<b?DBCZHF7=>0n;@FGVDJ;9=4h7LJKR@N?50<76h1JHI\NL=36:<=FLMXJ@1?19:CG@WGK4;427LJKR@N?7;?<IMNYMA2;>89B@ATFD5?556OKDSCO838>3HNO^LB37?;8EABUIE63245NDEPBH9?912KOH_OZ<1<b?DBCZH_7==0n;@FGVDS;984j7LJKR@W?578f3HNO^L[312<`?DBCZH_7=94?>`9B@ATF]5;?245NDEPBQ97912KOH_OZ<3<:?DBCZH_7?374AEFQEP:3601JHI\NU=7==>GCL[K^0;06;@FGVDS;?730MIJ]AT>;:<=FLMXJY1719:CG@WDK494j7LJKRCN?558f3HNO^OB310<b?DBCZKF7=?0n;@FGVGJ;9:4j7LJKRCN?518d3HNO^OB31483:d=FLMXI@1?:>89B@ATED5;556OKDS@O878>3HNO^OB33?;8EABUJE6?245NDEPAH93912KOH_LC<7<:?DBCZKF7;374AEFQFI:?601JHI\ML=;==>GCL[H^0=0n;@FGVGS;994j7LJKRCW?548f3HNO^O[313<b?DBCZK_7=>0l;@FGVGS;9=0;2l5NDEPAQ973601JHI\MU=3==>GCL[H^0?06;@FGVGS;;730MIJ]BT>7:<=FLMXIY1;19:CG@WDR4?427LJKRCW?3;?<IMNYNX27>89B@ATE]535?6OCL29AQ7><J\YTECH@d:ABWFGCM@DGMYOk;BCPGDBBAGFJXOj4C@Q@EACNF[OLMi5LARAB@@OIZLMIi6MNSBCGAJSSDH^Ji6MNSBCGAJSSDH^Ii6MNSBCGAJSSZLMJi6MNSBCGAJSSZLMI=?5LHDAH[IODMGYNSYW_E49@HNGK=2IGGL[:;BNHFI3<KEAIY45LOLOJPQCC9=1HC_KPGDLFVDRNGGUBBKA8;BPFEQCC>2NBM1>17:FJE9776>1OEL2>1?58@LG;9;4<7IGN<01=3>BNI5;?2:5KI@>21;1<L@K7=;08;EKB8419?2NBM1?7>69GMD:617<0HDO31?58@LG;:94<7IGN<33=3>BNI5892:5KI@>17;1<L@K7>908;EKB8739?2NBM1<9>69GMD:5?7=0HDO329<4?AOF4;35:6JFA=0=3>BNI59;245KI@>05?69?2NBM1=>>79GMD:46?1OEL2;>79GMD:26?1OEL29>79GMD:06?1OEL27>79GMD:>6?1OEO2?>69GMG:687=0HDL310<4?AOE4885;6JFB=30:2=CAK6:8394DH@?50803MCI0<817:FJF9706>1OEO2>8?58@LD;904=7IGM<0<4?AOE4;:5;6JFB=02:2=CAK69>394DH@?66803MCI0?:17:FJF9426>1OEO2=6?58@LD;:>4<7IGM<3:=3>BNJ5822;5KIC>1:2=CAK68<374DH@?74<76>1OEO2<1?48@LD;;7<0HDL34?48@LD;=7<0HDL36?48@LD;?7<0HDL38?48@LD;17=0HD^N<1<4?AOWI5;5;6JFP@>1:<=CAYK7?7>17:FJTD:46>1OE]L30?58@LVE484<7IG_B=0==>BNXK686=08;EKSF959>2NDM1>17:FLE9776>1OCL2>1?58@JG;9;4<7IAN<01=3>BHI5;?2:5KO@>21;1<LFK7=;08;EMB8419?2NDM1?7>69GKD:617<0HBO31?58@JG;:94<7IAN<33=3>BHI5892:5KO@>17;1<LFK7>908;EMB8739?2NDM1<9>69GKD:5?7=0HBO329<4?AIF4;35:6J@A=0=3>BHI59;245KO@>05?69?2NDM1=>>79GKD:46?1OCL2;>79GKD:26?1OCL29>79GKD:06?1OCL27>79GKD:>6>1OCLQ]EF48@JD;87=0HBL311<4?AIE48;5;6J@B=31:2=CGK6:?394DN@?51803MEI0<;17:FLF9716>1OCO2>7?58@JD;914<7IAM<0;=2>BHJ5;5;6J@B=03:2=CGK69=394DN@?67803MEI0?=17:FLF9436>1OCO2=5?58@JD;:?4<7IAM<35=3>BHJ5832:5KOC>1=;0<LFH7>394DN@?758>3MEI0>?50?58@JD;;84=7IAM<2<5?AIE4=4=7IAM<4<5?AIE4?4=7IAM<6<5?AIE414=7IAM<8<4?AIEW[OL;6J@P@>3:2=CGYK7=394DNRB878>3ME[M1=50?58@JVF4:4<7IA_B=2=3>BHXK6:2:5KOQ@?6;?<LFZI0>4?>69GKUD;;7>0ICOC4:GMEP2<MGHG86KABT78BDJTM81L?6IAD99JJLRWW9:37D@FTQ]35==NF@^[S=<7;HLJPUY7;11BBDZ__16;?LHN\YU;955FNHVS[50?3@DBX]Q?799JJLRWW9237D@FTQ]3===NF@^[S=O7;HLJPUY7J11BBDZ__1A;?LHN\YU;H55FNHVS[5C?3@DBX]Q?F69JJLRX89=0ECG[_134?LHN\V:9;6GAIU]372=NF@^T<994IOKW[5303@DBXR>97:KMMQY7?>1BBDZP0958MKOSW93<7D@FT^2B3>OIA]U;N:5FNHV\4F1<AGC_S=J8;HLJPZ6B?2CEEYQ?F69JJLRX99=0ECG[_034?LHN\V;9;6GAIU]272=NF@^T=994IOKW[4303@DBXR?97:KMMQY6?>1BBDZP1958MKOSW83<7D@FT^3B3>OIA]U:N:5FNHV\5F1<AGC_S<J8;HLJPZ7B?2CEEYQ>F69JJLRX:9=0ECG[_334?LHN\V89;6GAIU]172=NF@^T>994IOKW[7303@DBXR<97:KMMQY5?>1BBDZP2958MKOSW;3<7D@FT^0B3>OIA]U9N:5FNHV\6F1<AGC_S?J8;HLJPZ4B?2CEEYQ=F69JJLRX;9=0ECG[_234?LHN\V99;6GAIU]072=NF@^T?994IOKW[6303@DBXR=97:KMMQY4?>1BBDZP3958MKOSW:3<7D@FT^1B3>OIA]U8N:5FNHV\7F1<AGC_S>J8;HLJPZ5B?2CEEYQ<F69JJLRX<9=0ECG[_534?LHN\V>9;6GAIU]772=NF@^T8994IOKW[1303@DBXR:97:KMMQY3?>1BBDZP4958MKOSW=3<7D@FT^6B3>OIA]U?N:5FNHV\0F1<AGC_S9J8;HLJPZ2B?2CEEYQ;F69JJLRX=9=0ECG[_434?LHN\V?9;6GAIU]672=NF@^T9994IOKW[0303@DBXR;97:KMMQY2?>1BBDZP5958MKOSW<3<7D@FT^7B3>OIA]U>N:5FNHV\1F1<AGC_S8J8;HLJPZ3B?2CEEYQ:F69JJLRX>9=0ECG[_734?LHN\V<9;6GAIU]572=NF@^T:994IOKW[3303@DBXR897:KMMQY1?>1BBDZP6958MKOSW?3<7D@FT^4B3>OIA]U=N:5FNHV\2F1<AGC_S;J8;HLJPZ0B?2CEEYQ9F69JJLRX?9=0ECG[_634?LHN\V=9;6GAIU]472=NF@^T;994IOKW[2303@DBXR997:KMMQY0?>1BBDZP7958MKOSW>3<7D@FT^5B3>OIA]U<N:5FNHV\3F1<AGC_S:J8;HLJPZ1B?2CEEYQ8F79JJLRXI?1BBDZPB89JJLRXN@FN:6B@AEGG3>JHO@IJ@n5BakmqR`ttafdh7@gaosTfvvohf:1E==:4N0230>H688>0B<>=4:L2462<F8:?86@>0468J461<2D:<::4N02;0>H68090B<?;;O3241=I98;?7C?>259M54533G;:895A1077?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?:459M50333G;>:95A1457?K720=1E=87<;O350>H6>9>0B<8>4:L2272<F8<886@>6568J402<2D::;:4N0440>H6>1>0B<863:L231=I9>:?7C?8159M52433G;<?95A1667?K70==1E=:8;;O3431=I9>2?7C?8929M5=2<F82;86@>8068J4>5<2D:4>:4N0:70>H60<>0B<694:L2<22<F82386@>8818J4?33G;2<95A1837?K7>:=1E=4=;;O3:01=I90??7C?6659M5<133G;2495A18;1?K443G8;86@=0168J766<2D9<?:4N3200>H58=>0B?>:4:L1432<F;:<86@=0968J76>;2D9=95A2027?K469=1E><<;;O0271=I:8>?7C<>559M64033G8:;95A20:7?K461:1E>?:4N3030>H5:8>0B?<=4:L1662<F;8?86@=2468J741<2D9>::4N30;0>H5:090B?=;;O0041=I::;?7C<<259M66533G88895A2277?K44>=1E>>9;;O00<1=I::387C<;4:L1052<F;>:86@=4368J724<2D989:4N3660>H5<?>0B?:84:L10=2<F;>2?6@=559M60633G8>=95A2407?K42;=1E>8:;;O0611=I:<<?7C<:759M60>33G8>5>5A2768J707<2D9:<:4N3410>H5>:>0B?8;4:L1202<F;<=86@=6668J70?<2D9:4=4N357?K408=1E>:?;;O0461=I:>9?7C<8459M62333G8<:95A2657?K400=1E>:7<;O0;0>H509>0B?6>4:L1<72<F;2886@=8568J7>2<2D94;:4N3:40>H501>0B?663:L1=1=I:0:?7C<6159M6<433G82?95A2867?K4>==1E>48;;O0:31=I:02?7C<6929M752<F::;86@<0068J665<2D8<>:4N2270>H48<>0B>>94:L0422<F::386@<0818J6733G9:<95A3037?K56:=1E?<=;;O1201=I;8??7C=>659M74133G9:495A30;0?K55<2D8>=:4N2020>H4:;>0B><<4:L0612<F:8>86@<2768J640<2D8>5:4N20:7>H4;=1E?>>;;O1051=I;:8?7C=<359M76233G98995A3247?K54?=1E?>6;;O10=6=I;=>0B>:?4:L0042<F:>986@<4268J623<2D888:4N2650>H4<>>0B>:74:L00<5<F:??7C=:059M70733G9>>95A3417?K52<=1E?8;;;O1621=I;<=?7C=:859M70?43G9=86@<6168J606<2D8:?:4N2400>H4>=>0B>8:4:L0232<F:<<86@<6968J60>;2D8;95A3627?K509:1E?5=4N2;1?K243G>;?6@;129M075<F=987C:;3:L716=I<?90B99<;O6;7>H31:1E9==4N430?K35;2D>?>5A5518J0343G?=?6@:729M1=5<F<397C8<;O437>H19:1E:?=4N710?K03;2D=9>5A6718J3143G<3?6@9939M36=I?990B:?<;O517>H0;:1E;9=4N670?K11;2D<;>5A7918J2?53G287C6?3:L;56=I0;90B5=<;O:77>H?=:1E4;=4N9:1?K?43G3;?6@6129M=75<F0987C7;3:L:16=I1?90B49<;O;;7>H>1o1ENRLZSQKM[UTHXZ=0BHZXOSI7?KIIM;1DG<5_4:RBVQg<X@DTNX]FDY`8TLHXJ\YEM@Kn;SCNF60XMQZm7_OB_DZWAKUNGGUJj6\NM^G[P@HTAFDTNn5]E@F\SLBS@VKh7_KND^UJ@QNXJ>1YIJMJAM58V@ADMH_<7_KHCD@O3>TBOJOIY55]EFAOODJ?3[OLOAENU99QABEKCKF37_KHCMIAQ1=TIOO37^OYEECWE45<[@GTOBBCIRKLJZEOMJA37^GB_LMGA3=TG\XHI:5\RWCO[D1<[[\J@RL:;RQQEI3<[ZXJY85\SS@O1>UTZK_?7YW_E4:8Q5)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP<P }al,q+s3Xffceey }al-WVPCXLY$XECICE^RQMH51&]N[955Z0.`ooZkbeVmnbh|ntnp,rdjnl'ixx!}alnlku]6U'xja#| v4]mklhn|'xja"Z]UD]GT+UNFNFNS]\FM24-PAV202_;#obd_lgn[bcim{kc!yamkg*fusz&xjaaa`pZ0^*wgj&{%}9R``iokw*wgj']X^IRJ_.RKMCICXX[CF?; [DQ7;?P6(jeaTahcPgdlfvdrhz&|j`dj!crvq+wgjdfe{W>S!r`o-v*p2Wgebbdz!r`o,PWSBWMZ%_D@HLD]SVLK4>'^O\l5ZSDP\EIOF[j1^_H\PVHQJFIC43_IH56XFEV]W]UC03^OJ@1>17:UFEI:66>1\ILB32?;8S@GK4:0;2:5XE@N?7;1<_LK^0=08;VGBQ979?2]NMX2=>89TADS;;3:5;6YJAT>0:2=PMKF7<394WD@O84803^OI@1<17:UFFI:46>1\IOB34?58S@DK4<4<7ZKML=4==>QBJE6<6=08;VGAH919?2]NNX2?>69TAGS;97=0[HLZ<3<4?RCE]595;6YJBT>7:2=PMK_79394WD@V838>3^OIY1950?58S@DR4>4i7Z\FTD]EMWUSk2]YEYKPMNFF[De<_[C_IRC@DD]A`>QUA]OT[DJ[H^Cg?RTN\LU\EIZG_C3g?]OKAGR&TIL/0/3#WQSE(9$:,L]LIH48\VRKAK=0T^ZPGOFa?]YDG[OTECH@6:ZgfZOcn2RodR^}ilTfvvohf8:0TicPM`hlvScu{`ee==5Wdl]Nmkiu^lxxeb`7;`fgvd.7!11jhi|n(0+:?dbczh":<$74aefqe-76!11jhi|n(3+;?dbczh"8%55ndepb,1/?3hno~l&:)99b`atf ?#37ljkr`*4-==flmxj$5'7;`fgvd.>!11jhi|n<1<:?dbczh6:<3l4aefqe97629427ljkr`>25;><imnym1?18:cg`wg;:720mij}a=1=<>gcl{k78364aefqe93902koho36?:8eabui5=546okdsc?<;><imnym1718:cg`wd/8 20mij}b)3*<>gcl{h#>$64aefqf-5.02kohl'4(:8eabuj!?"46okds`+2,><imnyn%9&8:cg`wd/0 20mij}b);*<>gcl{h7<364aefqf97902kohl32?:8eabuj59546okds`?0;><imnyn1;18:cg`wd;>720mij}b=5=<>gcl{h743o4aefqf9?=8720mij}b=;=6f=edbUfi`Qheo]u7Z7+(Qcgecv/CNPF$Bcim{kc.>1/37?fjli=1h`fl8;e`jp`tu?2nbbl&?)69gmkg/9 20hd`n(02*<>bnfh":=$64dhlb,44.02nbbl&>3(:8`lhf 8>"46jfn`*21,><l`dj$<8&8:fjjd.6? 20hd`n(0:*<>bnfh":5$94dhlb,7/?3mcem%<?)99gmkg/:8#37igaa)01-==cagk#>>'7;ekme-43!11oeco'24+;?aoii!8=%55kioc+62/?3mcem%<7)99gmkg/:0#<7igaa)1*<>bnfh"8<$64dhlb,67.?2nbbl&;)69gmkg/= =0hd`n(7+4?aoii!=";6jfn`*;-2=cagk#5$94dhlb858?3mcem1??>99gmkg;98437igaa=31:==cagk7=>07;ekme973611oeco314<;?aoii5;=255kioc?528?3mcem1?7>99gmkg;904<7igaa=3=<>bnfh69<364dhlb877902nbbl2=2?:8`lhf4;9546jfn`>10;><l`dj0?;18:fjjd:5>720hd`n<35=<>bnfh694364dhlb87?9?2nbbl2=>99gmkg;;94j7igaa=12>58?3mcem1=>>69gmkg;;7=0hd`n<5<4?aoii5?5;6jfn`>5:2=cagk7;394dhlb8=803mcem1717:fjjg.7!>1oecl'1(:8`lhe 8:"56jfnc*245/>3mcen%??1(;8`lhe 8:9%45kio`+555.12nbbo&>05+:?aoij!;;9$74dhla,461!01oecl'115*=>bnfk":<5'6;ekmf-771 20hd`m(03*=>bnfk":=='6;ekmf-769 30hd`m(031-<=cagh#=<=&9:fjjg.69=#27igab)321,?<l`di$<?9)89gmkd/98="56jfnc*25=/>3mcen%?>9(:8`lhe 88"56jfnc*265/>3mcen%?=1(;8`lhe 889%45kio`+575.12nbbo&>25+:?aoij!;99$74dhla,441!01oecl'135*<>bnfk":?$64dhla,42.02nbbo&>5(:8`lhe 8<"46jfnc*23,><l`di$<6&8:fjjg.61 =0hd`m(3+;?aoij!8;%55kio`+64/?3mcen%<=)99gmkd/::#37igab)07-==cagh#>8'7;ekmf-41!11oecl'26+;?aoij!83%55kio`+6</03mcen%=&8:fjjg.48 20hd`m(23*<>bnfk"8>$64dhla,65.02nbbo&<4(:8`lhe :?"46jfnc*02,><l`di$>9&8:fjjg.40 20hd`m(2;*3>bnfk"?%55kio`+05/?3mcen%:>)99gmkd/<;#37igab)60-==cagh#89'7;ekmf-22!11oecl'47+;?aoij!><%55kio`+0=/?3mcen%:6)69gmkd/= 20hd`m(42*<>bnfk">=$64dhla,04.02nbbo&:3(:8`lhe <>"46jfnc*61,><l`di$88&8:fjjg.2? 20hd`m(4:*<>bnfk">5$94dhla,3/?3mcen%8?)99gmkd/>8#37igab)41-==cagh#:>'7;ekmf-03!11oecl'64+;?aoij!<=%55kio`+22/?3mcen%87)99gmkd/>0#<7igab)5*<>bnfk"<<$64dhla,27.02nbbo&82(:8`lhe >9"46jfnc*40,><l`di$:;&8:fjjg.0> 20hd`m(65*<>bnfk"<4$64dhla,2?.?2nbbo&7)99gmkd/09#37igab):2-==cagh#4?'7;ekmf->4!11oecl'85+;?aoij!2>%55kio`+<3/?3mcen%68)99gmkd/01#37igab)::-2=cagh#5$64dhla,<6.02nbbo&61(:8`lhe 08"46jfnc*:7,><l`di$4:&8:fjjg.>= 20hd`m(84*<>bnfk"2;$64dhla,<>.02nbbo&69(58`lhe49427igab=334;?<l`di0<>>>89gmkd;998556jfnc>2468>3mcen1??4?;8`lhe48:>245kio`?550912nbbo2>06<:?aoij5;;4374dhla846>611oecl311<:?aoij5;:<374dhla8476601oecl3100==>bnfk6:=>06;ekmf976<730hd`m<036:<=cagh7=<819:fjjg:69>427igab=32<;?<l`di0<?6>99gmkd;98427igab=314;?<l`di0<<>>89gmkd;9;8556jfnc>2668>3mcen1?=4?;8`lhe488>245kio`?5709j2nbbo2>2683:<=cagh7=?918:fjjg:6:720hd`m<01=<>bnfk6:8364dhla843902nbbo2>6?:8`lhe48=546jfnc>2<;><l`di0<717:fjjg:6611oecl321<;?aoij58:255kio`?678?3mcen1<<>99gmkd;:=437igab=06:==cagh7>;07;ekmf940611oecl329<;?aoij5822:5kio`?6;><l`di0>>18:fjjg:49720hd`m<20=<>bnfk68?364dhla862902nbbo2<5?:8`lhe4:<546jfnc>03;><l`di0>618:fjjg:417=0hd`m<2<;?aoij5>;255kio`?048?3mcen1:=>99gmkd;<:437igab=67:==cagh78807;ekmf921611oecl346<;?aoij5>3255kio`?0<803mcen1:18:fjjg:28720hd`m<43=<>bnfk6>>364dhla805902nbbo2:4?:8`lhe4<?546jfnc>62;><l`di08918:fjjg:20720hd`m<4;=3>bnfk6>255kio`?258?3mcen18>>99gmkd;>;437igab=40:==cagh7:907;ekmf902611oecl367<;?aoij5<<255kio`?2=8?3mcen186>69gmkd;>720hd`m<62=<>bnfk6<=364dhla824902nbbo283?:8`lhe4>>546jfnc>41;><l`di0:818:fjjg:0?720hd`m<6:=<>bnfk6<5394dhla828?3mcen16?>99gmkd;08437igab=:1:==cagh74>07;ekmf9>3611oecl384<;?aoij52=255kio`?<28?3mcen167>99gmkd;004<7igab=:=<>bnfk62<364dhla8<7902nbbo262?:8`lhe409546jfnc>:0;><l`di04;18:fjjg:>>720hd`m<85=<>bnfk624364dhla8<?9?2nbbo26>99gkprf 9#37iazt`*2-<=cg|~j$<>&9:flqqg/98#27iazt`*26,?<lfm%?<)89gkprf 8>"56j`uuc+50/>3me~xl&>6(;8`jssi!;<%45kotvb,4>.12ndyyo'18+;?air|h"9%45kotvb,76.12ndyyo'20+:?air|h"9>$74dnwwe-44!01ocxzn(36*=>bh}}k#>8'6;emvpd.5> 30hb{{a)04-<=cg|~j$?6&9:flqqg/:0#37iazt`*0-<=cg|~j$>>&9:flqqg/;8#37iazt`*7-==cg|~j$8'7;emvpd.1!11ocxzn(6+;?air|h"3%55kotvb,</?3me~xl2?>89gkprf48:556j`uuc?548>3me~xl2>2?;8`jssi5;8245kotvb842912ndyyo314<:?air|h6::374dnwwe970601ocxzn<0:==>bh}}k7=407;emvpd:6601ocxzn<32==>bh}}k7><06;emvpd:5:730hb{{a=00:<=cg|~j0?:19:flqqg;:<427iazt`>12;?<lfm1<8>89gkprf4;2556j`uuc?6<8?3me~xl2=>89gkprf4::5n6j`uuc?74<7601ocxzn<23=<>bh}}k7?364dnwwe92902ndyyo35?:8`jssi5<546j`uuc?3;><lfm1618:flqqg;1720hb{{b)2*<>bh}}h#=$74dnwwf-77!h1ocxzm(023-d=cg|~i$<>>)`9gkpre 8:9%l5kotva,464!h1ocxzm(027-d=cg|~i$<>:)`9gkpre 8:=%l5kotva,460!h1ocxzm(02;-d=cg|~i$<>6)89gkpre 8;"m6j`uu`+546.i2ndyyl'103*e>bh}}h#=<<&a:flqqd/989"m6j`uu`+542.i2ndyyl'107*e>bh}}h#=<8&a:flqqd/98="m6j`uu`+54>.i2ndyyl'10;*=>bh}}h#=?'n;emvpg.6:9#j7iaztc*264/f3me~xo&>23+b?air|k":>>'n;emvpg.6:=#j7iaztc*260/f3me~xo&>27+b?air|k":>:'6;emvpg.6; 30hb{{b)37-<=cg|~i$<;&9:flqqd/9?#27iaztc*23,?<lfn%?7)89gkpre 83"46j`uu`+6,?<lfn%<?)89gkpre ;;"56j`uu`+67/>3me~xo&=3(;8`jssj!8?%45kotva,73.12ndyyl'27+:?air|k"9;$74dnwwf-4?!01ocxzm(3;*<>bh}}h#?$74dnwwf-57!01ocxzm(23*=>bh}}h#??'6;emvpg.4; 30hb{{b)17-<=cg|~i$>;&9:flqqd/;?#27iaztc*03,?<lfn%=7)89gkpre :3"46j`uu`+0,?<lfn%:?)89gkpre =;"56j`uu`+07/>3me~xo&;3(;8`jssj!>?%45kotva,13.12ndyyl'47+:?air|k"?;$74dnwwf-2?!01ocxzm(5;*<>bh}}h#9$74dnwwf-37!01ocxzm(43*=>bh}}h#9?'6;emvpg.2; 30hb{{b)77-<=cg|~i$8;&9:flqqd/=?#27iaztc*63,?<lfn%;7)89gkpre <3"46j`uu`+2,?<lfn%8?)89gkpre ?;"56j`uu`+27/>3me~xo&93(;8`jssj!<?%45kotva,33.12ndyyl'67+:?air|k"=;$74dnwwf-0?!01ocxzm(7;*<>bh}}h#;$74dnwwf-17!01ocxzm(63*=>bh}}h#;?'6;emvpg.0; 30hb{{b)57-<=cg|~i$:;&9:flqqd/??#27iaztc*43,?<lfn%97)89gkpre >3"46j`uu`+<,?<lfn%6?)89gkpre 1;"56j`uu`+<7/>3me~xo&73(;8`jssj!2?%45kotva,=3.12ndyyl'87+:?air|k"3;$74dnwwf->?!01ocxzm(9;*<>bh}}h#5$74dnwwf-?7!01ocxzm(83*=>bh}}h#5?'6;emvpg.>; 30hb{{b);7-<=cg|~i$4;&9:flqqd/1?#27iaztc*:3,?<lfn%77)89gkpre 03"46j`uu`?4;g<lfn1??0?c8`jssj5;;=3o4dnwwf977:7k0hb{{b=337;g<lfn1??4?c8`jssj5;;93o4dnwwf977>7k0hb{{b=333;g<lfn1??8?c8`jssj5;;5374dnwwf9776h1ocxzm<033:d=cg|~i0<?>>`9gkpre48;92l5kotva84746h1ocxzm<037:d=cg|~i0<?:>`9gkpre48;=2l5kotva84706h1ocxzm<03;:d=cg|~i0<?6>89gkpre48;5m6j`uu`?5769i2ndyyl3133=e>bh}}h7=?<1a:flqqd;9;95m6j`uu`?5729i2ndyyl3137=e>bh}}h7=?81c:flqqd;9;=1<3o4dnwwf975?730hb{{b=31:<=cg|~i0<=19:flqqd;9=427iaztc>21;?<lfn1?9>89gkpre48=556j`uu`?5=8>3me~xo2>9?:8`jssj5;556j`uu`?658>3me~xo2=1?;8`jssj589245kotva875912ndyyl325<:?air|k699374dnwwf941601ocxzm<35==>bh}}h7>506;emvpg:51720hb{{b=0==>bh}}h7?=06;emvpg:49730hb{{b=11:<=cg|~i0>=19:flqqd;;=427iaztc>01;?<lfn1=9>89gkpre4:=556j`uu`?7=8>3me~xo2<9?:8`jssj59556j`uu`?058>3me~xo2;1?;8`jssj5>9245kotva815912ndyyl345<:?air|k6?9374dnwwf921601ocxzm<55==>bh}}h78506;emvpg:31720hb{{b=6==>bh}}h79=06;emvpg:29730hb{{b=71:<=cg|~i08=19:flqqd;==427iaztc>61;?<lfn1;9>89gkpre4<=556j`uu`?1=8>3me~xo2:9?:8`jssj5?556j`uu`?258>3me~xo291?;8`jssj5<9245kotva835912ndyyl365<:?air|k6=9374dnwwf901601ocxzm<75==>bh}}h7:506;emvpg:11720hb{{b=4==>bh}}h7;=06;emvpg:09730hb{{b=51:<=cg|~i0:=19:flqqd;?=427iaztc>41;?<lfn199>89gkpre4>=556j`uu`?3=8>3me~xo289?:8`jssj5=556j`uu`?<58>3me~xo271?;8`jssj529245kotva8=5912ndyyl385<:?air|k639374dnwwf9>1601ocxzm<95==>bh}}h74506;emvpg:?1720hb{{b=:==>bh}}h75=06;emvpg:>9730hb{{b=;1:<=cg|~i04=19:flqqd;1=427iaztc>:1;?<lfn179>89gkpre40=556j`uu`?==8>3me~xo269?:8`jssj53546kkig0mca5<mgk87h`md:kmn`eslkci|k;hliafrtj`~n~?9;ln644Ycl{8T{oQff^abgmc492gg9=?Pdep1[rdXaoUhmnfj,cnh[hcjWnoeS{=P1-LLJ@*IGGO8h>5bl422[abu:V}iSdhPc`aka)dkcVgnaRijn^t0[4*|kVbjR|jgbga95*dWakxSkhcdc>4)eXelgTxt~j=3.`[wuszhgTn0>#c^pppwgjWh7; nQ}su]w}uc:[PDH nQgar]jjocd|lxy1="l_qpjiZr~xl7: nQfnhva[sgk59&hSknd^uj`qnXj4;94!mPrdcg[roc|aUj1><#c^fjwddkmV}j~cQmhw]`kij:8%iTecg{_gkoaZhfel7ecRm`e^djh`Ykghnnh!mPwskwaZkhllUi1Z\FTD]EMWUS$jU|~dzj_lmgaZg:_[C_IRHFRRV/gZkrpVzb|hbfnd]ppdab{4:'oRfns^ofiZir|ySkhs^`>4)eXdfkoSd`ft^djh`;7$jUcm~Qbel]lqqvr|Vxnk~Qn=1.`[rtn|lUoi}zg_c?2472+kV}yeykPddrwlZg:<93= nQgar]qwqd:8%iTdl}Prrvb95*dW`dbxlQyam?3(fYoizUfyuQ`uurvpZtbozUi1="l_icp[hsWf|xzPrdep[d;7$jUjhi|n_vkgpm;6:%iTmij}b^uj`qn:99&hSikiatnw[agsi4:'oR{|e^g`g86+kVkgkb|ftio>5)eXl`yjnakPw`pm[gnqW{kekh3?,b]tvlrbW~coxeQm=00;(fYpz`~nSzgkti]b964+kVxnmiQkeqvk[g;68;>'oRlvtd]pmc:0%iT~hok_egspmYf5=:2:!mPsho\gjjkazcdbRmgebi>EIJ+kVida`aa_bnh95*dW~ojSzgkti?7(fYoizUnbo3>,b]kevYbfh7: nQxec]tmaro58<'obcoogmpZhfel7f`8>>_efq6ZqeW`lTolmge-a\qvcXjp~nSzkm=0.`[pubWksiRyja<3/gZtt|Vzyeb|ftx]a9FC+kVxxxR~}inpjp|Yf5JO'oR{|e^ffbdsk|Vnjxl3?,|0g?hj288Uoh<Pwc]jbZefkaoTnaePmdo\c`hX~:U:Su}{_0:8jbee}`foo6|kaefqafe/8 i0~iokdsg`g-7.k2xomij}eba+6,e<zmkohklc)1*g>tcimnyinm'4(a8vagcl{oho%;&c:pgeabumji#:$m4recg`wcdk!="o6|kaefqafe/0 i0~iokdsg`g-?.k2xomij}eba?4;c<zmkohklc=;94;0<zlmhil84rde`ag2<zz~j86||tc58wgosm{x9>6zbp.]`c*kk=9;Thi|=_v`\mcYdijbn"ci`6:ufe-6.>2}nm%?&6:ufe-4.>2}nm%=&6:ufe969>2}nm1?16:ufe94902}nm1=50?48s`g;;7<0{hl'0(48s`d/9 =0{hl'11+4?rce 8;";6yjb)31-2=pmk":?$94wd`+51/03~oi$<;&6:uff-4.>2}nn%=&6:uff-2.>2}nn%;&6:uff-0.>2}nn%9&6:uff->.>2}nn%7&6:uff969?2}nn1??>69tag:697=0{hl313<4?rce4895;6yjb=37:<=pmk6:97>17:uff9726?1|io2>>79tag:56?1|io2<>79tag:36?1|io2:>79tag:16?1|io28>79tag:?6?1|io26>|BCtg3?3IJs:>m5F;695~U0:3<9=7=5120a02b=90;iiv`<6882?k51i3?0(>88:240?xU083<9=7=5120a02b=90;ii6]>a6856d<72899n99k:0;2g4=T?90=>l4?:011f11c283:o?5k63494?7=9rY<>78=1;19564e<>n1=4?me:tW764=83;1=7?9fzQ46?059391=><m46f95<7em2.88<4>a99U73>=:r:m44>;t3be?6<u-9:i7?m;c412?6=9?o1?7?9ezJ07c=]>;03w<65d;:90?742>0:<785}%10=?05>2.8:;4<989j274=831b:?=50;9j216=83.8>=49459m74`=821b:>h50;&065<1<=1e?<h51:9j26c=83.8>=49459m74`=:21b:>j50;&065<1<=1e?<h53:9j21b=83.8>=495b9m74`=821b:9m50;&065<1=j1e?<h51:9j21d=83.8>=495b9m74`=:21b:9o50;&065<1=j1e?<h53:9j21?=83.8>=495b9m74`=<21b:9650;&065<1=j1e?<h55:9j203=83.8>=495b9m74`=>21b:8:50;&065<1=j1e?<h57:9j205=83.8>=495b9m74`=021b:8<50;&065<1=j1e?<h59:9j207=83.8>=495b9m74`=i21b:8>50;&065<1=j1e?<h5b:9j21`=83.8>=495b9m74`=k21b:9k50;&065<1=j1e?<h5d:9j211=83.8>=495b9m74`=m21b:9850;&065<1=j1e?<h5f:9j73c=83.8>=4<789m74`=821b?;j50;&065<4?01e?<h51:9j720=83.8>=4<789m74`=:21b?:;50;&065<4?01e?<h53:9j722=83.8>=4<789m74`=<21b?:=50;&065<4?01e?<h55:9j724=83.8>=4<789m74`=>21b?:?50;&065<4?01e?<h57:9j726=83.8>=4<789m74`=021b?;h50;&065<4?01e?<h59:9j73e=83.8>=4<789m74`=i21b?;l50;&065<4?01e?<h5b:9j7=b=83.8>=4<969m74`=821b?5m50;&065<41>1e?<h51:9j7=d=83.8>=4<969m74`=:21b?5o50;&065<41>1e?<h53:9j7=?=83.8>=4<969m74`=<21b?5650;&065<41>1e?<h55:9j7=1=83.8>=4<969m74`=>21b?5850;&065<41>1e?<h57:9j7=3=83.8>=4<969m74`=021b?5:50;&065<41>1e?<h59:9l0c>=83.8>=4:169m74`=821d8k950;&065<29>1e?<h51:9l0c3=83.8>=4:169m74`=:21d8k:50;&065<29>1e?<h53:9l0c5=83.8>=4:169m74`=<21d8k<50;&065<29>1e?<h55:9l0c7=83.8>=4:169m74`=>21d8k>50;&065<29>1e?<h57:9l0``=83.8>=4:169m74`=021d8hk50;&065<29>1e?<h59:9l0`b=83.8>=4:169m74`=i21d8hm50;&065<29>1e?<h5b:9l0`g=83.8>=4:169m74`=k21d8h750;&065<29>1e?<h5d:9l0`>=83.8>=4:169m74`=m21d8h950;&065<29>1e?<h5f:9l0`0=83.8>=4:169m74`=9910c9k::18'776==8=0b>?i:038?j2b<3:1(><?:434?k56n3;976a;e283>!5583?:;6`<1g827>=h<l81<7*<218652=i;8l1=954o5g2>5<#;;:19<94n23e>43<3f>mi7>5$203>0703g9:j7?9;:m7ba<72-99<7;>7:l05c<6?21d8km50;&065<29>1e?<h51998k1`e290/??>55058j67a28307b:ia;29 6472<;<7c=>f;3b?>i3n00;6)==0;723>h49o0:n65`4g494?"4:90>=:5a30d95f=<g=oi6=4+3329141<f:;m6<j4;n6f4?6=,:8;68?8;o12b?7b32e?hk4?:%114?36?2d8=k4>f:9l116=83.8>=4:bd9m74`=821d9>h50;&065<2jl1e?<h51:9l16c=83.8>=4:bd9m74`=:21d9>j50;&065<2jl1e?<h53:9l16e=83.8>=4:bd9m74`=<21d9>l50;&065<2jl1e?<h55:9l16g=83.8>=4:bd9m74`=>21d9>750;&065<2jl1e?<h57:9l161=83.8>=4:bd9m74`=021d9>850;&065<2jl1e?<h59:9l163=83.8>=4:bd9m74`=i21d9>:50;&065<2jl1e?<h5b:9l165=83.8>=4:bd9m74`=k21d9><50;&065<2jl1e?<h5d:9l167=83.8>=4:bd9m74`=m21d9>>50;&065<2jl1e?<h5f:9l17`=83.8>=4:bd9m74`=9910c8<j:18'776==ko0b>?i:038?j35k3:1(><?:4`f?k56n3;976a:2c83>!5583?ii6`<1g827>=h=;k1<7*<2186f`=i;8l1=954o40:>5<#;;:19ok4n23e>43<3f?947>5$203>0db3g9:j7?9;:m662<72-99<7;me:l05c<6?21d9?850;&065<2jl1e?<h51998k042290/??>55cg8j67a28307b;=4;29 6472<hn7c=>f;3b?>i2::0;6)==0;7aa>h49o0:n65`58d94?"4:90>nh5a30d95f=<g<3n6=4+33291gc<f:;m6<j4;n7:`?6=,:8;68lj;o12b?7b32e>5n4?:%114?3em2d8=k4>f:9l1<d=83.8>=4:bd9m74`=:910c87n:18'776==ko0b>?i:338?j3>13:1(><?:4`f?k56n38976a:9983>!5583?ii6`<1g817>=h=0=1<7*<2186f`=i;8l1>954o4;5>5<#;;:19ok4n23e>73<3f?287>5$203>0db3g9:j7<9;:m6=6<72-99<7;me:l05c<5?21d94<50;&065<2jl1e?<h52998k0?6290/??>55cg8j67a2;307b;60;29 6472<hn7c=>f;0b?>i20o0;6)==0;7aa>h49o09n65`59g94?"4:90>nh5a30d96f=<g<2o6=4+33291gc<f:;m6?j4;n7;g?6=,:8;68lj;o12b?4b32e>4o4?:%114?3em2d8=k4=f:9l1=?=83.8>=4:bd9m74`=;910c867:18'776==ko0b>?i:238?j3??3:1(><?:4`f?k56n39976a:8783>!5583?ii6`<1g807>=h=1?1<7*<2186f`=i;8l1?954o4:7>5<#;;:19ok4n23e>63<3f?3?7>5$203>0db3g9:j7=9;:m6<7<72-99<7;me:l05c<4?21d95?50;&065<2jl1e?<h53998k0>7290/??>55cg8j67a2:307b;8e;29 6472<hn7c=>f;1b?>i2?m0;6)==0;7aa>h49o08n65`56a94?"4:90>nh5a30d97f=<g<=i6=4+33291gc<f:;m6>j4;n74e?6=,:8;68lj;o12b?5b32e>;44?:%114?3em2d8=k4<f:9l12>=83.8>=4:bd9m74`=<910c898:18'776==ko0b>?i:538?j30>3:1(><?:4`f?k56n3>976a:7483>!5583?ii6`<1g877>=h=>91<7*<2186f`=i;8l18954o451>5<#;;:19ok4n23e>13<3f?<=7>5$203>0db3g9:j7:9;:m635<72-99<7;me:l05c<3?21d9;h50;&065<2jl1e?<h54998k00b290/??>55cg8j67a2=307b;9d;29 6472<hn7c=>f;6b?>i2>j0;6)==0;7aa>h49o0?n65`57`94?"4:90>nh5a30d90f=<g<<j6=4+33291gc<f:;m69j4;n75<?6=,:8;68lj;o12b?2b32e>::4?:%114?3em2d8=k4;f:9l130=83.8>=4:bd9m74`==910c88::18'776==ko0b>?i:438?j31<3:1(><?:4`f?k56n3?976a:6283>!5583?ii6`<1g867>=h=?81<7*<2186f`=i;8l19954o442>5<#;;:19ok4n23e>03<3f?=<7>5$203>0db3g9:j7;9;:m61c<72-99<7;me:l05c<2?21d98j50;&065<2jl1e?<h55998k03d290/??>55cg8j67a2<307b;:b;29 6472<hn7c=>f;7b?>i2=h0;6)==0;7aa>h49o0>n65`54;94?"4:90>nh5a30d91f=<g<?36=4+33291gc<f:;m68j4;n763?6=,:8;68lj;o12b?3b32e>9;4?:%114?3em2d8=k4:f:9l103=83.8>=4:bd9m74`=>910c8;;:18'776==ko0b>?i:738?j32:3:1(><?:4`f?k56n3<976a:5083>!5583?ii6`<1g857>=h=<:1<7*<2186f`=i;8l1:954o46e>5<#;;:19ok4n23e>33<3f??i7>5$203>0db3g9:j789;:m60a<72-99<7;me:l05c<1?21d99m50;&065<2jl1e?<h56998k02e290/??>55cg8j67a2?307b;;a;29 6472<hn7c=>f;4b?>i2<00;6)==0;7aa>h49o0=n65`55594?"4:90>nh5a30d92f=<g<>=6=4+33291gc<f:;m6;j4;n771?6=,:8;68lj;o12b?0b32e>894?:%114?3em2d8=k49f:9l115=83.8>=4:bd9m74`=?910c8:=:18'776==ko0b>?i:638?j3393:1(><?:4`f?k56n3=976a:3983>!5583?ii6`<1g847>=h=;n1<7*<2186f`=i;8l1;954o401>5<#;;:19ok4n23e>23<3f?297>5$203>0db3g9:j799;:m6<d<72-99<7;me:l05c<0?21d9:h50;&065<2jl1e?<h57998k013290/??>55cg8j67a2>307b;99;29 6472<hn7c=>f;5b?>i2=l0;6)==0;7aa>h49o0<n65`54194?"4:90>nh5a30d93f=<g<>36=4+33291gc<f:;m6:j4;n715?6=,:8;68lj;o12b?1b32e>>=4?:%114?3em2d8=k48f:9j7<g=831b?4l50;9j7g0=83.8>=4<d49m74`=821b?o;50;&065<4l<1e?<h51:9j7g5=83.8>=4<d49m74`=:21b?o<50;&065<4l<1e?<h53:9j7g7=83.8>=4<d49m74`=<21b?o>50;&065<4l<1e?<h55:9j7d`=83.8>=4<d49m74`=>21b?lk50;&065<4l<1e?<h57:9j7db=83.8>=4<d49m74`=021b?lm50;&065<4l<1e?<h59:9j7dd=83.8>=4<d49m74`=i21b?lo50;&065<4l<1e?<h5b:9j7d>=83.8>=4<d49m74`=k21b?l950;&065<4l<1e?<h5d:9j7d0=83.8>=4<d49m74`=m21b?l;50;&065<4l<1e?<h5f:9j7d2=83.8>=4<d49m74`=9910e>o<:18'776=;m?0b>?i:038?l5f:3:1(><?:2f6?k56n3;976g<a083>!55839o96`<1g827>=n;h:1<7*<2180`0=i;8l1=954i2;e>5<#;;:1?i;4n23e>43<3`9io7>5$203>6b23g9:j7?9;:k0fg<72-99<7=k5:l05c<6?21b?oo50;&065<4l<1e?<h51998m6d>290/??>53e78j67a28307d=m8;29 6472:n>7c=>f;3b?>o4j>0;6)==0;1g1>h49o0:n65f3c694?"4:908h85a30d95f=<a:k26=4+33297a3<f:;m6<j4;h1:a?6=,:8;6>j:;o12b?7b32c85i4?:%114?5c=2d8=k4>f:9j7cc=83.8>=4;7b9m74`=821b?kj50;&065<3?j1e?<h51:9j7ce=83.8>=4;7b9m74`=:21b?kl50;&065<3?j1e?<h53:9j7cg=83.8>=4;7b9m74`=<21b?k750;&065<3?j1e?<h55:9j7c>=83.8>=4;7b9m74`=>21b?k950;&065<3?j1e?<h57:9j7c3=83.8>=4;7b9m74`=021b?k:50;&065<3?j1e?<h59:9j7c5=83.8>=4;7b9m74`=i21b?k<50;&065<3?j1e?<h5b:9j7c7=83.8>=4;7b9m74`=k21b?k>50;&065<3?j1e?<h5d:9j7``=83.8>=4;7b9m74`=m21b?hk50;&065<3?j1e?<h5f:9j7`b=83.8>=4;7b9m74`=9910e>kl:18'776=<>i0b>?i:038?l5bi3:1(><?:55`?k56n3;976g<e883>!5583><o6`<1g827>=n;l21<7*<21873f=i;8l1=954i2g4>5<#;;:18:m4n23e>43<3`9n:7>5$203>11d3g9:j7?9;:k0a0<72-99<7:8c:l05c<6?21b?h:50;&065<3?j1e?<h51998m6c4290/??>546a8j67a28307d=j2;29 6472==h7c=>f;3b?>o4m80;6)==0;64g>h49o0:n65f44f94?"4:90?;n5a30d95f=<a=?h6=4+332902e<f:;m6<j4;h66f?6=,:8;699l;o12b?7b32c?9l4?:%114?20k2d8=k4>f:9j00?=83.8>=4;7b9m74`=:910e9;7:18'776=<>i0b>?i:338?l22?3:1(><?:55`?k56n38976g;5783>!5583><o6`<1g817>=n<<?1<7*<21873f=i;8l1>954i577>5<#;;:18:m4n23e>73<3`>>>7>5$203>11d3g9:j7<9;:k714<72-99<7:8c:l05c<5?21b88>50;&065<3?j1e?<h52998m12a290/??>546a8j67a2;307d:;e;29 6472==h7c=>f;0b?>o3<m0;6)==0;64g>h49o09n65f45a94?"4:90?;n5a30d96f=<a=>i6=4+332902e<f:;m6?j4;h67e?6=,:8;699l;o12b?4b32c?844?:%114?20k2d8=k4=f:9j011=83.8>=4;7b9m74`=;910e9:9:18'776=<>i0b>?i:238?l23=3:1(><?:55`?k56n39976g;4583>!5583><o6`<1g807>=n<=91<7*<21873f=i;8l1?954i561>5<#;;:18:m4n23e>63<3`>?=7>5$203>11d3g9:j7=9;:k705<72-99<7:8c:l05c<4?21b8>h50;&065<3?j1e?<h53998m15b290/??>546a8j67a2:307d:<c;29 6472==h7c=>f;1b?>o3;k0;6)==0;64g>h49o08n65f42c94?"4:90?;n5a30d97f=<a=926=4+332902e<f:;m6>j4;h60<?6=,:8;699l;o12b?5b32c??:4?:%114?20k2d8=k4<f:9j060=83.8>=4;7b9m74`=<910e9=::18'776=<>i0b>?i:538?l24<3:1(><?:55`?k56n3>976g;3283>!5583><o6`<1g877>=n<:;1<7*<21873f=i;8l18954i513>5<#;;:18:m4n23e>13<3`>9j7>5$203>11d3g9:j7:9;:k76`<72-99<7:8c:l05c<3?21b8?j50;&065<3?j1e?<h54998m14d290/??>546a8j67a2=307d:=b;29 6472==h7c=>f;6b?>o3:h0;6)==0;64g>h49o0?n65f43;94?"4:90?;n5a30d90f=<a=836=4+332902e<f:;m69j4;h612?6=,:8;699l;o12b?2b32c?>84?:%114?20k2d8=k4;f:9j072=83.8>=4;7b9m74`==910e9<<:18'776=<>i0b>?i:438?l25:3:1(><?:55`?k56n3?976g;2083>!5583><o6`<1g867>=n<;:1<7*<21873f=i;8l19954i53e>5<#;;:18:m4n23e>03<3`>:i7>5$203>11d3g9:j7;9;:k75a<72-99<7:8c:l05c<2?21b8<l50;&065<3?j1e?<h55998m17f290/??>546a8j67a2<307d:>9;29 6472==h7c=>f;7b?>o3910;6)==0;64g>h49o0>n65f40594?"4:90?;n5a30d91f=<a=;=6=4+332902e<f:;m68j4;h621?6=,:8;699l;o12b?3b32c?=94?:%114?20k2d8=k4:f:9j045=83.8>=4;7b9m74`=>910e9?=:18'776=<>i0b>?i:738?l2683:1(><?:55`?k56n3<976g;0g83>!5583><o6`<1g857>=n<9o1<7*<21873f=i;8l1:954i52g>5<#;;:18:m4n23e>33<3`>;o7>5$203>11d3g9:j789;:k74g<72-99<7:8c:l05c<1?21b8=o50;&065<3?j1e?<h56998m16>290/??>546a8j67a2?307d:?8;29 6472==h7c=>f;4b?>o38>0;6)==0;64g>h49o0=n65f41794?"4:90?;n5a30d92f=<a=:?6=4+332902e<f:;m6;j4;h637?6=,:8;699l;o12b?0b32c?<?4?:%114?20k2d8=k49f:9j057=83.8>=4;7b9m74`=?910e9>?:18'776=<>i0b>?i:638?l5an3:1(><?:55`?k56n3=976g<f783>!5583><o6`<1g847>=n;lh1<7*<21873f=i;8l1;954i2g3>5<#;;:18:m4n23e>23<3`>>?7>5$203>11d3g9:j799;:k70=<72-99<7:8c:l05c<0?21b8>j50;&065<3?j1e?<h57998m155290/??>546a8j67a2>307d:=7;29 6472==h7c=>f;5b?>o39j0;6)==0;64g>h49o0<n65f40394?"4:90?;n5a30d93f=<a=:=6=4+332902e<f:;m6:j4;h1gb?6=,:8;699l;o12b?1b32c8hh4?:%114?20k2d8=k48f:9a716=83;1<7>tH21e?!54139?<6a<1e83>>{e9891<7?50;2xL65a3-9857?>3:m257<722wi:<4?:0:3>0<6>oqC?>h4Z70957}603n147:51284>0<683<197?<:682<?b=03>1==49:|&07<<1:01/:o49269'34<1:11/?<7530a8m3452900e;<<:188m3432900e;=8:188m35?2900e;:?:18'776=>=>0b>?i:198m35a290/??>56568j67a2810e;=j:18'776=>=>0b>?i:398m35c290/??>56568j67a2:10e;:k:18'776=><i0b>?i:198m32d290/??>564a8j67a2810e;:m:18'776=><i0b>?i:398m32f290/??>564a8j67a2:10e;:6:18'776=><i0b>?i:598m32?290/??>564a8j67a2<10e;;::18'776=><i0b>?i:798m333290/??>564a8j67a2>10e;;<:18'776=><i0b>?i:998m335290/??>564a8j67a2010e;;>:18'776=><i0b>?i:`98m337290/??>564a8j67a2k10e;:i:18'776=><i0b>?i:b98m32b290/??>564a8j67a2m10e;:8:18'776=><i0b>?i:d98m321290/??>564a8j67a2o10e>8j:18'776=;>30b>?i:198m60c290/??>536;8j67a2810e>99:18'776=;>30b>?i:398m612290/??>536;8j67a2:10e>9;:18'776=;>30b>?i:598m614290/??>536;8j67a2<10e>9=:18'776=;>30b>?i:798m616290/??>536;8j67a2>10e>9?:18'776=;>30b>?i:998m60a290/??>536;8j67a2010e>8l:18'776=;>30b>?i:`98m60e290/??>536;8j67a2k10e>6k:18'776=;0=0b>?i:198m6>d290/??>53858j67a2810e>6m:18'776=;0=0b>?i:398m6>f290/??>53858j67a2:10e>66:18'776=;0=0b>?i:598m6>?290/??>53858j67a2<10e>68:18'776=;0=0b>?i:798m6>1290/??>53858j67a2>10e>6::18'776=;0=0b>?i:998m6>3290/??>53858j67a2010e;=6:188m35f2900c;=m:188k1`?290/??>55058j67a2910c9h8:18'776==8=0b>?i:098k1`2290/??>55058j67a2;10c9h;:18'776==8=0b>?i:298k1`4290/??>55058j67a2=10c9h=:18'776==8=0b>?i:498k1`6290/??>55058j67a2?10c9h?:18'776==8=0b>?i:698k1ca290/??>55058j67a2110c9kj:18'776==8=0b>?i:898k1cc290/??>55058j67a2h10c9kl:18'776==8=0b>?i:c98k1cf290/??>55058j67a2j10c9k6:18'776==8=0b>?i:e98k1c?290/??>55058j67a2l10c9k8:18'776==8=0b>?i:g98k1c1290/??>55058j67a28:07b:j5;29 6472<;<7c=>f;32?>i3m=0;6)==0;723>h49o0:>65`4d194?"4:90>=:5a30d956=<g=o96=4+3329141<f:;m6<:4;n6f5?6=,:8;68?8;o12b?7232e?jh4?:%114?36?2d8=k4>6:9l0cb=83.8>=4:169m74`=9>10c9hl:18'776==8=0b>?i:0:8?j2aj3:1(><?:434?k56n3;276a;f`83>!5583?:;6`<1g82e>=h<o31<7*<218652=i;8l1=o54o5d5>5<#;;:19<94n23e>4e<3f>nn7>5$203>0703g9:j7?k;:m7a5<72-99<7;>7:l05c<6m21d8ih50;&065<29>1e?<h51g98k027290/??>55cg8j67a2910c8=i:18'776==ko0b>?i:098k05b290/??>55cg8j67a2;10c8=k:18'776==ko0b>?i:298k05d290/??>55cg8j67a2=10c8=m:18'776==ko0b>?i:498k05f290/??>55cg8j67a2?10c8=6:18'776==ko0b>?i:698k050290/??>55cg8j67a2110c8=9:18'776==ko0b>?i:898k052290/??>55cg8j67a2h10c8=;:18'776==ko0b>?i:c98k054290/??>55cg8j67a2j10c8==:18'776==ko0b>?i:e98k056290/??>55cg8j67a2l10c8=?:18'776==ko0b>?i:g98k04a290/??>55cg8j67a28:07b;=e;29 6472<hn7c=>f;32?>i2:j0;6)==0;7aa>h49o0:>65`53`94?"4:90>nh5a30d956=<g<8j6=4+33291gc<f:;m6<:4;n71=?6=,:8;68lj;o12b?7232e>>54?:%114?3em2d8=k4>6:9l171=83.8>=4:bd9m74`=9>10c8<9:18'776==ko0b>?i:0:8?j35=3:1(><?:4`f?k56n3;276a:2583>!5583?ii6`<1g82e>=h=;91<7*<2186f`=i;8l1=o54o4;e>5<#;;:19ok4n23e>4e<3f?2i7>5$203>0db3g9:j7?k;:m6=a<72-99<7;me:l05c<6m21d94m50;&065<2jl1e?<h51g98k0?e290/??>55cg8j67a2;:07b;6a;29 6472<hn7c=>f;02?>i2100;6)==0;7aa>h49o09>65`58:94?"4:90>nh5a30d966=<g<3<6=4+33291gc<f:;m6?:4;n7:2?6=,:8;68lj;o12b?4232e>594?:%114?3em2d8=k4=6:9l1<5=83.8>=4:bd9m74`=:>10c87=:18'776==ko0b>?i:3:8?j3>93:1(><?:4`f?k56n38276a:9183>!5583?ii6`<1g81e>=h=1l1<7*<2186f`=i;8l1>o54o4:f>5<#;;:19ok4n23e>7e<3f?3h7>5$203>0db3g9:j7<k;:m6<f<72-99<7;me:l05c<5m21d95l50;&065<2jl1e?<h52g98k0>>290/??>55cg8j67a2::07b;78;29 6472<hn7c=>f;12?>i20>0;6)==0;7aa>h49o08>65`59494?"4:90>nh5a30d976=<g<2>6=4+33291gc<f:;m6>:4;n7;0?6=,:8;68lj;o12b?5232e>4>4?:%114?3em2d8=k4<6:9l1=4=83.8>=4:bd9m74`=;>10c86>:18'776==ko0b>?i:2:8?j3?83:1(><?:4`f?k56n39276a:7d83>!5583?ii6`<1g80e>=h=>n1<7*<2186f`=i;8l1?o54o45`>5<#;;:19ok4n23e>6e<3f?<n7>5$203>0db3g9:j7=k;:m63d<72-99<7;me:l05c<4m21d9:750;&065<2jl1e?<h53g98k01?290/??>55cg8j67a2=:07b;87;29 6472<hn7c=>f;62?>i2??0;6)==0;7aa>h49o0?>65`56794?"4:90>nh5a30d906=<g<=86=4+33291gc<f:;m69:4;n746?6=,:8;68lj;o12b?2232e>;<4?:%114?3em2d8=k4;6:9l126=83.8>=4:bd9m74`=<>10c88i:18'776==ko0b>?i:5:8?j31m3:1(><?:4`f?k56n3>276a:6e83>!5583?ii6`<1g87e>=h=?i1<7*<2186f`=i;8l18o54o44a>5<#;;:19ok4n23e>1e<3f?=m7>5$203>0db3g9:j7:k;:m62=<72-99<7;me:l05c<3m21d9;950;&065<2jl1e?<h54g98k001290/??>55cg8j67a2<:07b;95;29 6472<hn7c=>f;72?>i2>=0;6)==0;7aa>h49o0>>65`57194?"4:90>nh5a30d916=<g<<96=4+33291gc<f:;m68:4;n755?6=,:8;68lj;o12b?3232e>:=4?:%114?3em2d8=k4:6:9l10`=83.8>=4:bd9m74`==>10c8;k:18'776==ko0b>?i:4:8?j32k3:1(><?:4`f?k56n3?276a:5c83>!5583?ii6`<1g86e>=h=<k1<7*<2186f`=i;8l19o54o47:>5<#;;:19ok4n23e>0e<3f?>47>5$203>0db3g9:j7;k;:m612<72-99<7;me:l05c<2m21d98850;&065<2jl1e?<h55g98k032290/??>55cg8j67a2?:07b;:4;29 6472<hn7c=>f;42?>i2=;0;6)==0;7aa>h49o0=>65`54394?"4:90>nh5a30d926=<g<?;6=4+33291gc<f:;m6;:4;n77b?6=,:8;68lj;o12b?0232e>8h4?:%114?3em2d8=k496:9l11b=83.8>=4:bd9m74`=>>10c8:l:18'776==ko0b>?i:7:8?j33j3:1(><?:4`f?k56n3<276a:4`83>!5583?ii6`<1g85e>=h==31<7*<2186f`=i;8l1:o54o464>5<#;;:19ok4n23e>3e<3f??:7>5$203>0db3g9:j78k;:m600<72-99<7;me:l05c<1m21d99:50;&065<2jl1e?<h56g98k024290/??>55cg8j67a2>:07b;;2;29 6472<hn7c=>f;52?>i2<80;6)==0;7aa>h49o0<>65`52:94?"4:90>nh5a30d936=<g<8o6=4+33291gc<f:;m6::4;n716?6=,:8;68lj;o12b?1232e>584?:%114?3em2d8=k486:9l1=g=83.8>=4:bd9m74`=?>10c89i:18'776==ko0b>?i:6:8?j30<3:1(><?:4`f?k56n3=276a:6883>!5583?ii6`<1g84e>=h=<o1<7*<2186f`=i;8l1;o54o470>5<#;;:19ok4n23e>2e<3f??47>5$203>0db3g9:j79k;:m664<72-99<7;me:l05c<0m21d9?>50;&065<2jl1e?<h57g98m6?f2900e>7m:188k353290/??>56248j67a2910c;=<:18'776=>:<0b>?i:098k355290/??>56248j67a2;10c;=>:18'776=>:<0b>?i:298k357290/??>56248j67a2=10c;<i:18'776=>:<0b>?i:498k34b290/??>56248j67a2?10c;<k:18'776=>:<0b>?i:698k34d290/??>56248j67a2110c;<m:18'776=>:<0b>?i:898m6d1290/??>53e78j67a2910e>l::18'776=;m?0b>?i:098m6d4290/??>53e78j67a2;10e>l=:18'776=;m?0b>?i:298m6d6290/??>53e78j67a2=10e>l?:18'776=;m?0b>?i:498m6ga290/??>53e78j67a2?10e>oj:18'776=;m?0b>?i:698m6gc290/??>53e78j67a2110e>ol:18'776=;m?0b>?i:898m6ge290/??>53e78j67a2h10e>on:18'776=;m?0b>?i:c98m6g?290/??>53e78j67a2j10e>o8:18'776=;m?0b>?i:e98m6g1290/??>53e78j67a2l10e>o::18'776=;m?0b>?i:g98m6g3290/??>53e78j67a28:07d=n3;29 6472:n>7c=>f;32?>o4i;0;6)==0;1g1>h49o0:>65f3`394?"4:908h85a30d956=<a:k;6=4+33297a3<f:;m6<:4;h1:b?6=,:8;6>j:;o12b?7232c8nn4?:%114?5c=2d8=k4>6:9j7gd=83.8>=4<d49m74`=9>10e>ln:18'776=;m?0b>?i:0:8?l5e13:1(><?:2f6?k56n3;276g<b983>!55839o96`<1g82e>=n;k=1<7*<2180`0=i;8l1=o54i2`7>5<#;;:1?i;4n23e>4e<3`9j57>5$203>6b23g9:j7?k;:k0=`<72-99<7=k5:l05c<6m21b?4j50;&065<4l<1e?<h51g98m6`b290/??>546a8j67a2910e>hk:18'776=<>i0b>?i:098m6`d290/??>546a8j67a2;10e>hm:18'776=<>i0b>?i:298m6`f290/??>546a8j67a2=10e>h6:18'776=<>i0b>?i:498m6`?290/??>546a8j67a2?10e>h8:18'776=<>i0b>?i:698m6`2290/??>546a8j67a2110e>h;:18'776=<>i0b>?i:898m6`4290/??>546a8j67a2h10e>h=:18'776=<>i0b>?i:c98m6`6290/??>546a8j67a2j10e>h?:18'776=<>i0b>?i:e98m6ca290/??>546a8j67a2l10e>kj:18'776=<>i0b>?i:g98m6cc290/??>546a8j67a28:07d=jc;29 6472==h7c=>f;32?>o4mh0;6)==0;64g>h49o0:>65f3d;94?"4:90?;n5a30d956=<a:o36=4+332902e<f:;m6<:4;h1f3?6=,:8;699l;o12b?7232c8i;4?:%114?20k2d8=k4>6:9j7`3=83.8>=4;7b9m74`=9>10e>k;:18'776=<>i0b>?i:0:8?l5b;3:1(><?:55`?k56n3;276g<e383>!5583><o6`<1g82e>=n;l;1<7*<21873f=i;8l1=o54i57g>5<#;;:18:m4n23e>4e<3`>>o7>5$203>11d3g9:j7?k;:k71g<72-99<7:8c:l05c<6m21b88o50;&065<3?j1e?<h51g98m13>290/??>546a8j67a2;:07d::8;29 6472==h7c=>f;02?>o3=>0;6)==0;64g>h49o09>65f44494?"4:90?;n5a30d966=<a=?>6=4+332902e<f:;m6?:4;h660?6=,:8;699l;o12b?4232c?9?4?:%114?20k2d8=k4=6:9j007=83.8>=4;7b9m74`=:>10e9;?:18'776=<>i0b>?i:3:8?l23n3:1(><?:55`?k56n38276g;4d83>!5583><o6`<1g81e>=n<=n1<7*<21873f=i;8l1>o54i56`>5<#;;:18:m4n23e>7e<3`>?n7>5$203>11d3g9:j7<k;:k70d<72-99<7:8c:l05c<5m21b89750;&065<3?j1e?<h52g98m120290/??>546a8j67a2::07d:;6;29 6472==h7c=>f;12?>o3<<0;6)==0;64g>h49o08>65f45694?"4:90?;n5a30d976=<a=>86=4+332902e<f:;m6>:4;h676?6=,:8;699l;o12b?5232c?8<4?:%114?20k2d8=k4<6:9j016=83.8>=4;7b9m74`=;>10e9=i:18'776=<>i0b>?i:2:8?l24m3:1(><?:55`?k56n39276g;3b83>!5583><o6`<1g80e>=n<:h1<7*<21873f=i;8l1?o54i51b>5<#;;:18:m4n23e>6e<3`>857>5$203>11d3g9:j7=k;:k77=<72-99<7:8c:l05c<4m21b8>950;&065<3?j1e?<h53g98m151290/??>546a8j67a2=:07d:<5;29 6472==h7c=>f;62?>o3;=0;6)==0;64g>h49o0?>65f42194?"4:90?;n5a30d906=<a=9:6=4+332902e<f:;m69:4;h604?6=,:8;699l;o12b?2232c?>k4?:%114?20k2d8=k4;6:9j07c=83.8>=4;7b9m74`=<>10e9<k:18'776=<>i0b>?i:5:8?l25k3:1(><?:55`?k56n3>276g;2c83>!5583><o6`<1g87e>=n<;k1<7*<21873f=i;8l18o54i50:>5<#;;:18:m4n23e>1e<3`>947>5$203>11d3g9:j7:k;:k763<72-99<7:8c:l05c<3m21b8?;50;&065<3?j1e?<h54g98m143290/??>546a8j67a2<:07d:=3;29 6472==h7c=>f;72?>o3:;0;6)==0;64g>h49o0>>65f43394?"4:90?;n5a30d916=<a=8;6=4+332902e<f:;m68:4;h62b?6=,:8;699l;o12b?3232c?=h4?:%114?20k2d8=k4:6:9j04b=83.8>=4;7b9m74`==>10e9?m:18'776=<>i0b>?i:4:8?l26i3:1(><?:55`?k56n3?276g;1883>!5583><o6`<1g86e>=n<821<7*<21873f=i;8l19o54i534>5<#;;:18:m4n23e>0e<3`>::7>5$203>11d3g9:j7;k;:k750<72-99<7:8c:l05c<2m21b8<:50;&065<3?j1e?<h55g98m174290/??>546a8j67a2?:07d:>2;29 6472==h7c=>f;42?>o3990;6)==0;64g>h49o0=>65f41d94?"4:90?;n5a30d926=<a=:n6=4+332902e<f:;m6;:4;h63`?6=,:8;699l;o12b?0232c?<n4?:%114?20k2d8=k496:9j05d=83.8>=4;7b9m74`=>>10e9>n:18'776=<>i0b>?i:7:8?l2713:1(><?:55`?k56n3<276g;0983>!5583><o6`<1g85e>=n<9=1<7*<21873f=i;8l1:o54i526>5<#;;:18:m4n23e>3e<3`>;87>5$203>11d3g9:j78k;:k746<72-99<7:8c:l05c<1m21b8=<50;&065<3?j1e?<h56g98m166290/??>546a8j67a2>:07d:?0;29 6472==h7c=>f;52?>o4no0;6)==0;64g>h49o0<>65f3g494?"4:90?;n5a30d936=<a:oi6=4+332902e<f:;m6::4;h1f4?6=,:8;699l;o12b?1232c?9>4?:%114?20k2d8=k486:9j01>=83.8>=4;7b9m74`=?>10e9=k:18'776=<>i0b>?i:6:8?l24:3:1(><?:55`?k56n3=276g;2683>!5583><o6`<1g84e>=n<8i1<7*<21873f=i;8l1;o54i532>5<#;;:18:m4n23e>2e<3`>;:7>5$203>11d3g9:j79k;:k0`c<72-99<7:8c:l05c<0m21b?ik50;&065<3?j1e?<h57g98m3422900c>7l:188f602290:6=4?{%10=?76;2B8:95G32d8k4752900qo=<d;29554=83:p(>=6:202?M51<2B8?k5U63824~c=9=0m6<;5b;;9g?g=9>0::7?k:0a954<613;96<o5}og3>5=i9981<6*>a381?!7f;380(<?;:39'543=:2.:=;4=;%323?4<,8;36?5+10;96>"69h097)?>b;08 47d2;1/=<j52:&25`<53-;:j7<4$003>7=#9;;1>6*<3282?!54<3;0(<<;:39'573=:2.:>;4=;%313?4<,8836?5+13;96>"6:h097)?=b;08 44d2;1/=?j52:&26`<53-;9j7<4$013>7=#9:;1>6*>3381?!74;380(<=;:39'563=:2.:?;4=;%303?4<,8936?5+12;96>"6;h097)?<b;08 45d2;1/=>j52:&27`<53-;8j7<4$063>7=#9=;1>6*>4381?!73;380(<:;:39'513=:2.:8;4=;%373?4<,8>36?5+15;96>"6<h097)?;b;08 42d2;1/=9j52:&20`<53-;?j7<4$073>7=#9<;1>6*>5381?!72;380(<;;:39'503=:2.:9;4=;%363?4<,8?36?5+14;96>"6=h097)?:b;08 43d2;1/=8j52:&21`<53-;>j7<4$043>7=#9?;1>6*>6381?!71;380(<8;:39'533=:2.::;4=;%353?4<,8<36?5+17;96>"6>h097)?9b;08 40d2;1/=;j52:&22`<53-;=j7<4$053>7=#9>;1>6*>7381?!70;380(<9;:39'523=:2.:;;4=;%343?4<,8=36?5+16;96>"6?h097)?8b;08 41d2;1/=:j52:&23`<53-;<j7<4$0:3>7=#91;1>6*>8381?!7?;380(<6;:39'5=3=:2.:4;4=;%3;3?4<,8236?5+19;96>"60h097)?7b;08 4>d2;1/=5j52:&2<`<53-;3j7<4$0;3>7=#90;1>6*>9381?!7>;380(<7;:39'5<3=:2.:5;4=;%3:3?4<,8336?5+18;96>"61h097)?6b;08 4?d2;1/=4j52:&2=`<53-;2j7<4$0c3>7=#9h;1>6*<2g8254=#9;81>6*>a7805g=#;;81?<l4$200>67e3g998774n206>72<,:9;6;>4$212>64b3-;j87?4$0c6>4=#;<l1?8k4$243>63b3g9==774n241>72<,8886?5f11g94?=n99n1<75f10294?=n99l1<75f32494?=n;:?1<75f32:94?=n;:=1<75f6e83>>o1k3:17d8i:188m3c=831b??l50;9j77g=831b??j50;9j77e=831b??950;9j770=831b??750;9j77>=831b:>4?::k50?6=3`<>6=44i7494?=h>>0;66a98;29?j0>2900c;o50;9j<f<72-99<76m;o12b?6<3`2j6=4+3329<g=i;8l1=65f8983>!55832i7c=>f;08?l>0290/??>58c9m74`=;21b4;4?:%114?>e3g9:j7:4;h:6>5<#;;:14o5a30d91>=n0=0;6)==0;:a?k56n3<07d6<:18'776=0k1e?<h57:9j<7<72-99<76m;o12b?><3`2:6=4+3329<g=i;8l1565f8183>!55832i7c=>f;c8?l1a290/??>58c9m74`=j21b;i4?:%114?>e3g9:j7m4;h5`>5<#;;:14o5a30d9`>=n?k0;6)==0;:a?k56n3o07d9n:18'776=0k1e?<h5f:9j3<<72-99<76m;o12b?7732c<47>5$203>=d<f:;m6<?4;h54>5<#;;:14o5a30d957=<a><1<7*<218;f>h49o0:?65f7483>!55832i7c=>f;37?>o0<3:1(><?:9`8j67a28?07d7<:18'776=0k1e?<h51798m<4=83.8>=47b:l05c<6?21b5<4?:%114?>e3g9:j7?7;:k:4?6=,:8;65l4n23e>4?<3`2m6=4+3329<g=i;8l1=l54i9g94?"4:903n6`<1g82f>=n0m0;6)==0;:a?k56n3;h76g79;29 64721h0b>?i:0f8?l1b290/??>58c9m74`=9l10e:=50;&065<?j2d8=k4>f:9jf<<72-99<7l7;o12b?6<3`h<6=4+3329f==i;8l1=65fb783>!5583h37c=>f;08?ld2290/??>5b99m74`=;21bmi4?:%114?gd3g9:j7>4;hca>5<#;;:1mn5a30d95>=ni00;6)==0;c`?k56n3807do7:18'776=ij1e?<h53:9je2<72-99<7ol;o12b?2<3`k=6=4+3329ef=i;8l1965fa483>!5583kh7c=>f;48?lg3290/??>5ab9m74`=?21bm>4?:%114?gd3g9:j764;hc1>5<#;;:1mn5a30d9=>=ni80;6)==0;c`?k56n3k07do?:18'776=ij1e?<h5b:9j=`<72-99<7ol;o12b?e<3`3o6=4+3329ef=i;8l1h65f9b83>!5583kh7c=>f;g8?l?e290/??>5ab9m74`=n21b5l4?:%114?gd3g9:j7??;:k:=?6=,:8;6lm4n23e>47<3`336=4+3329ef=i;8l1=?54i8594?"4:90jo6`<1g827>=n1?0;6)==0;c`?k56n3;?76g65;29 6472hi0b>?i:078?ld3290/??>5ab9m74`=9?10eo=50;&065<fk2d8=k4>7:9jf7<72-99<7ol;o12b?7?32ci=7>5$203>de<f:;m6<74;h`3>5<#;;:1mn5a30d95d=<ahl1<7*<218bg>h49o0:n65fad83>!5583kh7c=>f;3`?>ofi3:1(><?:`a8j67a28n07d7i:18'776=ij1e?<h51d98m<2=83.8>=4nc:l05c<6n21bnh4?:%114?dc3g9:j7>4;h``>5<#;;:1ni5a30d95>=njk0;6)==0;`g?k56n3807dln:18'776=jm1e?<h53:9j60<72-99<7<;;o12b?6<3`886=4+332961=i;8l1=65f2383>!55838?7c=>f;08?l46290/??>5259m74`=;21b>=4?:%114?433g9:j7:4;h3e>5<#;;:1>95a30d91>=n:l0;6)==0;07?k56n3<07d<k:18'776=:=1e?<h57:9j6f<72-99<7<;;o12b?><3`8i6=4+332961=i;8l1565f2`83>!55838?7c=>f;c8?l4>290/??>5259m74`=j21b>54?:%114?433g9:j7m4;h04>5<#;;:1>95a30d9`>=n:?0;6)==0;07?k56n3o07d?j:18'776=:=1e?<h5f:9j70<72-99<7=;;o12b?6<3`986=4+332971=i;8l1=65f3383>!55839?7c=>f;08?l56290/??>5359m74`=;21b?=4?:%114?533g9:j7:4;h1f>5<#;;:1?95a30d91>=n;m0;6)==0;17?k56n3<07d=l:18'776=;=1e?<h57:9j7g<72-99<7=;;o12b?><3`9j6=4+332971=i;8l1565f3883>!55839?7c=>f;c8?l5?290/??>5359m74`=j21b?:4?:%114?533g9:j7m4;h15>5<#;;:1?95a30d9`>=n:o0;6)==0;17?k56n3o07d:9:18'776=<<1e?<h50:9j01<72-99<7::;o12b?7<3`>86=4+332900=i;8l1>65f4383>!5583>>7c=>f;18?l26290/??>5449m74`=<21b8=4?:%114?223g9:j7;4;h6e>5<#;;:1885a30d92>=n<l0;6)==0;66?k56n3=07d:k:18'776=<<1e?<h58:9j0f<72-99<7::;o12b??<3`>i6=4+332900=i;8l1m65f4`83>!5583>>7c=>f;`8?l2>290/??>5449m74`=k21b854?:%114?223g9:j7j4;h64>5<#;;:1885a30d9a>=n;o0;6)==0;66?k56n3l07d;9:18'776==<1e?<h50:9j11<72-99<7;:;o12b?7<3`?86=4+332910=i;8l1>65f5383>!5583?>7c=>f;18?l36290/??>5549m74`=<21b9k4?:%114?323g9:j7;4;h7f>5<#;;:1985a30d92>=n=m0;6)==0;76?k56n3=07d;l:18'776==<1e?<h58:9j1g<72-99<7;:;o12b??<3`?j6=4+332910=i;8l1m65f5883>!5583?>7c=>f;`8?l3?290/??>5549m74`=k21b9:4?:%114?323g9:j7j4;h73>5<#;;:1985a30d9a>=n;=h1<7*<21800d=i;8l1<65f35;94?"4:9088l5a30d95>=n;=21<7*<21800d=i;8l1>65f35594?"4:9088l5a30d97>=n;=<1<7*<218000=i;8l1<65f35694?"4:908885a30d95>=n;=91<7*<218000=i;8l1>65f35094?"4:908885a30d97>=n;<n1<7*<21801f=i;8l1<65f34`94?"4:9089n5a30d95>=n;<k1<7*<21801f=i;8l1>65f34;94?"4:9089n5a30d97>=n;<21<7*<21801f=i;8l1865f34594?"4:9089n5a30d91>=n;<<1<7*<21801f=i;8l1:65f34794?"4:9089n5a30d93>=n;<>1<7*<218016=i;8l1<65f34094?"4:9089>5a30d95>=n;<;1<7*<218016=i;8l1>65f34294?"4:9089>5a30d97>=n;=l1<7*<218016=i;8l1865f35g94?"4:9089>5a30d91>=n;=n1<7*<218016=i;8l1:65f35a94?"4:9089>5a30d93>=hl10;6)==0;f4?k56n3:07bj9:18'776=l>1e?<h51:9l`1<72-99<7j8;o12b?4<3fn86=4+3329`2=i;8l1?65`d383>!5583n<7c=>f;68?jb6290/??>5d69m74`==21dh=4?:%114?b03g9:j784;nae>5<#;;:1h:5a30d93>=hkl0;6)==0;f4?k56n3207bmk:18'776=l>1e?<h59:9lgf<72-99<7j8;o12b?g<3fii6=4+3329`2=i;8l1n65`c883>!5583n<7c=>f;a8?je?290/??>5d69m74`=l21do:4?:%114?b03g9:j7k4;na5>5<#;;:1h:5a30d9b>=hk<0;6)==0;f4?k56n3;;76al4;29 6472m=0b>?i:038?je4290/??>5d69m74`=9;10cn<50;&065<c?2d8=k4>3:9lg4<72-99<7j8;o12b?7332eh<7>5$203>a1<f:;m6<;4;nfe>5<#;;:1h:5a30d953=<gmo1<7*<218g3>h49o0:;65`de83>!5583n<7c=>f;3;?>ick3:1(><?:e58j67a28307bjm:18'776=l>1e?<h51`98kag=83.8>=4k7:l05c<6j21dh44?:%114?b03g9:j7?l;:mg1?6=,:8;6i94n23e>4b<3fij6=4+3329`2=i;8l1=h54ocd94?"4:90o;6`<1g82b>=h99=1<7*<218243=i;8l1<65`11794?"4:90:<;5a30d95>=h99>1<7*<218243=i;8l1>65`11194?"4:90:<;5a30d97>=hnh0;6)==0;d:?k56n3:07bh7:18'776=n01e?<h51:9lb3<72-99<7h6;o12b?4<3fl>6=4+3329b<=i;8l1?65`f583>!5583l27c=>f;68?j`4290/??>5f89m74`==21dj?4?:%114?`>3g9:j784;nd2>5<#;;:1j45a30d93>=hn90;6)==0;d:?k56n3207bki:18'776=n01e?<h59:9la`<72-99<7h6;o12b?g<3foo6=4+3329b<=i;8l1n65`ec83>!5583l27c=>f;a8?jcf290/??>5f89m74`=l21di44?:%114?`>3g9:j7k4;ng;>5<#;;:1j45a30d9b>=hm>0;6)==0;d:?k56n3;;76aj6;29 6472o30b>?i:038?jc2290/??>5f89m74`=9;10ch:50;&065<a12d8=k4>3:9la6<72-99<7h6;o12b?7332en>7>5$203>c?<f:;m6<;4;n335?6=,:8;6k74n23e>40<3f;;<7>5$203>c?<f:;m6<94;nde>5<#;;:1j45a30d95==<goo1<7*<218e=>h49o0:565`fe83>!5583l27c=>f;3b?>iak3:1(><?:g;8j67a28h07bhm:18'776=n01e?<h51b98kc1=83.8>=4i9:l05c<6l21din4?:%114?`>3g9:j7?j;:mf5?6=,:8;6k74n23e>4`<3f;;o7>5$203>46e3g9:j7>4;n33e?6=,:8;6<>m;o12b?7<3f;;57>5$203>46e3g9:j7<4;n33<?6=,:8;6<>m;o12b?5<3th8?n4?:021>5<7s-9857==1:J021=O;:l0V;<511yf>42=n3;>6o46:b8b>41=9?0:h7?l:0395<<6:3;j6p`j0;28j465291/=l<52:&2e6<53-;:87<4$036>7=#98<1>6*>1681?!760380(<?6:39'54g=:2.:=o4=;%32g?4<,8;o6?5+10g96>"69o097)?=0;08 4462;1/?>=51:&071<63-;987<4$006>7=#9;<1>6*>2681?!750380(<<6:39'57g=:2.:>o4=;%31g?4<,88o6?5+13g96>"6:o097)?<0;08 4562;1/=><52:&276<53-;887<4$016>7=#9:<1>6*>3681?!740380(<=6:39'56g=:2.:?o4=;%30g?4<,89o6?5+12g96>"6;o097)?;0;08 4262;1/=9<52:&206<53-;?87<4$066>7=#9=<1>6*>4681?!730380(<:6:39'51g=:2.:8o4=;%37g?4<,8>o6?5+15g96>"6<o097)?:0;08 4362;1/=8<52:&216<53-;>87<4$076>7=#9<<1>6*>5681?!720380(<;6:39'50g=:2.:9o4=;%36g?4<,8?o6?5+14g96>"6=o097)?90;08 4062;1/=;<52:&226<53-;=87<4$046>7=#9?<1>6*>6681?!710380(<86:39'53g=:2.::o4=;%35g?4<,8<o6?5+17g96>"6>o097)?80;08 4162;1/=:<52:&236<53-;<87<4$056>7=#9><1>6*>7681?!700380(<96:39'52g=:2.:;o4=;%34g?4<,8=o6?5+16g96>"6?o097)?70;08 4>62;1/=5<52:&2<6<53-;387<4$0:6>7=#91<1>6*>8681?!7?0380(<66:39'5=g=:2.:4o4=;%3;g?4<,82o6?5+19g96>"60o097)?60;08 4?62;1/=4<52:&2=6<53-;287<4$0;6>7=#90<1>6*>9681?!7>0380(<76:39'5<g=:2.:5o4=;%3:g?4<,83o6?5+18g96>"61o097)?n0;08 4g62;1/??h51038 4452;1/=l8530`8 6452:;i7)==3;12f>h4:=027c==5;07?!5483<;7)=<1;11a>"6i=0:7)?n5;38 63a2:?n7)=90;16a>h4>8027c=92;07?!75;380e<>j:188m46c2900e<??:188m46a2900e>=9:188m6522900e>=7:188m6502900e;j50;9j2f<722c=j7>5;h4f>5<<a:8i6=44i20b>5<<a:8o6=44i20`>5<<a:8<6=44i205>5<<a:826=44i20;>5<<a?91<75f6583>>o1=3:17d89:188k31=831d:54?::m5=?6=3f<j6=44i9a94?"4:903n6`<1g83?>o?i3:1(><?:9`8j67a2810e5650;&065<?j2d8=k4=;:k;3?6=,:8;65l4n23e>6=<a1<1<7*<218;f>h49o0?76g75;29 64721h0b>?i:498m=2=83.8>=47b:l05c<132c3?7>5$203>=d<f:;m6:54i9094?"4:903n6`<1g8;?>o?93:1(><?:9`8j67a2010e5>50;&065<?j2d8=k4n;:k4b?6=,:8;65l4n23e>g=<a>n1<7*<218;f>h49o0h76g8c;29 64721h0b>?i:e98m2d=83.8>=47b:l05c<b32c<m7>5$203>=d<f:;m6k54i6;94?"4:903n6`<1g824>=n?10;6)==0;:a?k56n3;:76g87;29 64721h0b>?i:008?l11290/??>58c9m74`=9:10e:;50;&065<?j2d8=k4>4:9j31<72-99<76m;o12b?7232c2?7>5$203>=d<f:;m6<84;h;1>5<#;;:14o5a30d952=<a0;1<7*<218;f>h49o0:465f9183>!55832i7c=>f;3:?>o?n3:1(><?:9`8j67a28k07d6j:18'776=0k1e?<h51c98m=b=83.8>=47b:l05c<6k21b444?:%114?>e3g9:j7?k;:k4a?6=,:8;65l4n23e>4c<3`=86=4+3329<g=i;8l1=k54ic;94?"4:90i46`<1g83?>oe?3:1(><?:c:8j67a2810eo850;&065<e02d8=k4=;:ka1?6=,:8;6o64n23e>6=<ahn1<7*<218bg>h49o0;76gnb;29 6472hi0b>?i:098md?=83.8>=4nc:l05c<532cj47>5$203>de<f:;m6>54i`594?"4:90jo6`<1g87?>of>3:1(><?:`a8j67a2<10el;50;&065<fk2d8=k49;:kb0?6=,:8;6lm4n23e>2=<ah91<7*<218bg>h49o0376gn2;29 6472hi0b>?i:898md7=83.8>=4nc:l05c<f32cj<7>5$203>de<f:;m6o54i8g94?"4:90jo6`<1g8`?>o>l3:1(><?:`a8j67a2m10e4m50;&065<fk2d8=k4j;:k:f?6=,:8;6lm4n23e>c=<a0k1<7*<218bg>h49o0:<65f9883>!5583kh7c=>f;32?>o>03:1(><?:`a8j67a28807d78:18'776=ij1e?<h51298m<0=83.8>=4nc:l05c<6<21b584?:%114?gd3g9:j7?:;:ka0?6=,:8;6lm4n23e>40<3`h86=4+3329ef=i;8l1=:54ic094?"4:90jo6`<1g82<>=nj80;6)==0;c`?k56n3;276gm0;29 6472hi0b>?i:0c8?lga290/??>5ab9m74`=9k10elk50;&065<fk2d8=k4>c:9jed<72-99<7ol;o12b?7c32c2j7>5$203>de<f:;m6<k4;h;7>5<#;;:1mn5a30d95c=<ako1<7*<218a`>h49o0;76gmc;29 6472kn0b>?i:098mgd=83.8>=4md:l05c<532cim7>5$203>gb<f:;m6>54i3794?"4:90986`<1g83?>o5;3:1(><?:368j67a2810e?<50;&065<5<2d8=k4=;:k15?6=,:8;6?:4n23e>6=<a;:1<7*<21810>h49o0?76g>f;29 6472;>0b>?i:498m7c=83.8>=4=4:l05c<132c9h7>5$203>72<f:;m6:54i3a94?"4:90986`<1g8;?>o5j3:1(><?:368j67a2010e?o50;&065<5<2d8=k4n;:k1=?6=,:8;6?:4n23e>g=<a;21<7*<21810>h49o0h76g=7;29 6472;>0b>?i:e98m70=83.8>=4=4:l05c<b32c:i7>5$203>72<f:;m6k54i2794?"4:90886`<1g83?>o4;3:1(><?:268j67a2810e><50;&065<4<2d8=k4=;:k05?6=,:8;6>:4n23e>6=<a::1<7*<21800>h49o0?76g<e;29 6472:>0b>?i:498m6b=83.8>=4<4:l05c<132c8o7>5$203>62<f:;m6:54i2`94?"4:90886`<1g8;?>o4i3:1(><?:268j67a2010e>750;&065<4<2d8=k4n;:k0<?6=,:8;6>:4n23e>g=<a:=1<7*<21800>h49o0h76g<6;29 6472:>0b>?i:e98m7`=83.8>=4<4:l05c<b32c?:7>5$203>13<f:;m6=54i5694?"4:90?96`<1g82?>o3;3:1(><?:578j67a2;10e9<50;&065<3=2d8=k4<;:k75?6=,:8;69;4n23e>1=<a=:1<7*<21871>h49o0>76g;f;29 6472=?0b>?i:798m1c=83.8>=4;5:l05c<032c?h7>5$203>13<f:;m6554i5a94?"4:90?96`<1g8:?>o3j3:1(><?:578j67a2h10e9o50;&065<3=2d8=k4m;:k7=?6=,:8;69;4n23e>f=<a=21<7*<21871>h49o0o76g;7;29 6472=?0b>?i:d98m6`=83.8>=4;5:l05c<a32c>:7>5$203>03<f:;m6=54i4694?"4:90>96`<1g82?>o2;3:1(><?:478j67a2;10e8<50;&065<2=2d8=k4<;:k65?6=,:8;68;4n23e>1=<a<l1<7*<21861>h49o0>76g:e;29 6472<?0b>?i:798m0b=83.8>=4:5:l05c<032c>o7>5$203>03<f:;m6554i4`94?"4:90>96`<1g8:?>o2i3:1(><?:478j67a2h10e8750;&065<2=2d8=k4m;:k6<?6=,:8;68;4n23e>f=<a<=1<7*<21861>h49o0o76g:0;29 6472<?0b>?i:d98m62e290/??>535c8j67a2910e>:6:18'776=;=k0b>?i:098m62?290/??>535c8j67a2;10e>:8:18'776=;=k0b>?i:298m621290/??>53578j67a2910e>:;:18'776=;=?0b>?i:098m624290/??>53578j67a2;10e>:=:18'776=;=?0b>?i:298m63c290/??>534a8j67a2910e>;m:18'776=;<i0b>?i:098m63f290/??>534a8j67a2;10e>;6:18'776=;<i0b>?i:298m63?290/??>534a8j67a2=10e>;8:18'776=;<i0b>?i:498m631290/??>534a8j67a2?10e>;::18'776=;<i0b>?i:698m633290/??>53418j67a2910e>;=:18'776=;<90b>?i:098m636290/??>53418j67a2;10e>;?:18'776=;<90b>?i:298m62a290/??>53418j67a2=10e>:j:18'776=;<90b>?i:498m62c290/??>53418j67a2?10e>:l:18'776=;<90b>?i:698ka>=83.8>=4k7:l05c<732eo:7>5$203>a1<f:;m6<54oe694?"4:90o;6`<1g81?>ic;3:1(><?:e58j67a2:10ci<50;&065<c?2d8=k4;;:mg5?6=,:8;6i94n23e>0=<gm:1<7*<218g3>h49o0=76alf;29 6472m=0b>?i:698kfc=83.8>=4k7:l05c<?32ehh7>5$203>a1<f:;m6454oba94?"4:90o;6`<1g8b?>idj3:1(><?:e58j67a2k10cn750;&065<c?2d8=k4l;:m`<?6=,:8;6i94n23e>a=<gj=1<7*<218g3>h49o0n76al6;29 6472m=0b>?i:g98kf3=83.8>=4k7:l05c<6821do94?:%114?b03g9:j7?>;:m`7?6=,:8;6i94n23e>44<3fi96=4+3329`2=i;8l1=>54ob394?"4:90o;6`<1g820>=hk90;6)==0;f4?k56n3;>76akf;29 6472m=0b>?i:048?jbb290/??>5d69m74`=9>10cij50;&065<c?2d8=k4>8:9l`f<72-99<7j8;o12b?7>32eon7>5$203>a1<f:;m6<o4;nfb>5<#;;:1h:5a30d95g=<gm31<7*<218g3>h49o0:o65`d483>!5583n<7c=>f;3g?>idi3:1(><?:e58j67a28o07bli:18'776=l>1e?<h51g98k460290/??>51148j67a2910c<>::18'776=99<0b>?i:098k463290/??>51148j67a2;10c<><:18'776=99<0b>?i:298kcg=83.8>=4i9:l05c<732em47>5$203>c?<f:;m6<54og494?"4:90m56`<1g81?>ia=3:1(><?:g;8j67a2:10ck:50;&065<a12d8=k4;;:me7?6=,:8;6k74n23e>0=<go81<7*<218e=>h49o0=76ai1;29 6472o30b>?i:698kc6=83.8>=4i9:l05c<?32enj7>5$203>c?<f:;m6454odg94?"4:90m56`<1g8b?>ibl3:1(><?:g;8j67a2k10chl50;&065<a12d8=k4l;:mfe?6=,:8;6k74n23e>a=<gl31<7*<218e=>h49o0n76aj8;29 6472o30b>?i:g98k`1=83.8>=4i9:l05c<6821di;4?:%114?`>3g9:j7?>;:mf1?6=,:8;6k74n23e>44<3fo?6=4+3329b<=i;8l1=>54od194?"4:90m56`<1g820>=hm;0;6)==0;d:?k56n3;>76a>0083>!5583l27c=>f;35?>i6890;6)==0;d:?k56n3;<76aif;29 6472o30b>?i:0:8?j`b290/??>5f89m74`=9010ckj50;&065<a12d8=k4>a:9lbf<72-99<7h6;o12b?7e32emn7>5$203>c?<f:;m6<m4;nd4>5<#;;:1j45a30d95a=<gli1<7*<218e=>h49o0:i65`e083>!5583l27c=>f;3e?>i68j0;6)==0;33f>h49o0;76a>0`83>!5583;;n6`<1g82?>i6800;6)==0;33f>h49o0976a>0983>!5583;;n6`<1g80?>{e;:h1<7??2;294~"4;008><5G3768L65a3S<96<>te;37>c<6=3h157m5a;34>40=9m0:o7?>:0;957<6i3wei=4?;o336?6<,8k96?5+1`196>"69=097)?>5;08 4712;1/=<952:&25=<53-;:57<4$03b>7=#98h1>6*>1b81?!76l380(<?j:39'54`=:2.:>=4=;%315?4<,:986<5+32695>"6:=097)?=5;08 4412;1/=?952:&26=<53-;957<4$00b>7=#9;h1>6*>2b81?!75l380(<<j:39'57`=:2.:?=4=;%305?4<,8996?5+12196>"6;=097)?<5;08 4512;1/=>952:&27=<53-;857<4$01b>7=#9:h1>6*>3b81?!74l380(<=j:39'56`=:2.:8=4=;%375?4<,8>96?5+15196>"6<=097)?;5;08 4212;1/=9952:&20=<53-;?57<4$06b>7=#9=h1>6*>4b81?!73l380(<:j:39'51`=:2.:9=4=;%365?4<,8?96?5+14196>"6==097)?:5;08 4312;1/=8952:&21=<53-;>57<4$07b>7=#9<h1>6*>5b81?!72l380(<;j:39'50`=:2.::=4=;%355?4<,8<96?5+17196>"6>=097)?95;08 4012;1/=;952:&22=<53-;=57<4$04b>7=#9?h1>6*>6b81?!71l380(<8j:39'53`=:2.:;=4=;%345?4<,8=96?5+16196>"6?=097)?85;08 4112;1/=:952:&23=<53-;<57<4$05b>7=#9>h1>6*>7b81?!70l380(<9j:39'52`=:2.:4=4=;%3;5?4<,8296?5+19196>"60=097)?75;08 4>12;1/=5952:&2<=<53-;357<4$0:b>7=#91h1>6*>8b81?!7?l380(<6j:39'5=`=:2.:5=4=;%3:5?4<,8396?5+18196>"61=097)?65;08 4?12;1/=4952:&2==<53-;257<4$0;b>7=#90h1>6*>9b81?!7>l380(<7j:39'5<`=:2.:m=4=;%3b5?4<,:8m6<?>;%316?4<,8k=6>?m;%116?56j2.8>>4<1c9m772=12d8>84=4:&075<182.8?<4<2d9'5d2=92.:m84>;%16b?52m2.8:=4<5d9m737=12d8:?4=4:&266<53`;;i7>5;h33`?6=3`;:<7>5;h33b?6=3`98:7>5;h101?6=3`9847>5;h103?6=3`<o6=44i7a94?=n>o0;66g9e;29?l55j3:17d==a;29?l55l3:17d==c;29?l55?3:17d==6;29?l5513:17d==8;29?l042900e;:50;9j20<722c=:7>5;n44>5<<g?21<75`6883>>i1i3:17d6l:18'776=0k1e?<h50:9j<d<72-99<76m;o12b?7<3`236=4+3329<g=i;8l1>65f8683>!55832i7c=>f;18?l>1290/??>58c9m74`=<21b484?:%114?>e3g9:j7;4;h:7>5<#;;:14o5a30d92>=n0:0;6)==0;:a?k56n3=07d6=:18'776=0k1e?<h58:9j<4<72-99<76m;o12b??<3`2;6=4+3329<g=i;8l1m65f7g83>!55832i7c=>f;`8?l1c290/??>58c9m74`=k21b;n4?:%114?>e3g9:j7j4;h5a>5<#;;:14o5a30d9a>=n?h0;6)==0;:a?k56n3l07d96:18'776=0k1e?<h51198m2>=83.8>=47b:l05c<6921b;:4?:%114?>e3g9:j7?=;:k42?6=,:8;65l4n23e>45<3`=>6=4+3329<g=i;8l1=954i6694?"4:903n6`<1g821>=n1:0;6)==0;:a?k56n3;=76g62;29 64721h0b>?i:058?l?6290/??>58c9m74`=9110e4>50;&065<?j2d8=k4>9:9j<c<72-99<76m;o12b?7f32c3i7>5$203>=d<f:;m6<l4;h:g>5<#;;:14o5a30d95f=<a131<7*<218;f>h49o0:h65f7d83>!55832i7c=>f;3f?>o0;3:1(><?:9`8j67a28l07dl6:18'776=j11e?<h50:9jf2<72-99<7l7;o12b?7<3`h=6=4+3329f==i;8l1>65fb483>!5583h37c=>f;18?lgc290/??>5ab9m74`=821bmo4?:%114?gd3g9:j7?4;hc:>5<#;;:1mn5a30d96>=ni10;6)==0;c`?k56n3907do8:18'776=ij1e?<h54:9je3<72-99<7ol;o12b?3<3`k>6=4+3329ef=i;8l1:65fa583>!5583kh7c=>f;58?lg4290/??>5ab9m74`=021bm?4?:%114?gd3g9:j774;hc2>5<#;;:1mn5a30d9e>=ni90;6)==0;c`?k56n3h07d7j:18'776=ij1e?<h5c:9j=a<72-99<7ol;o12b?b<3`3h6=4+3329ef=i;8l1i65f9c83>!5583kh7c=>f;d8?l?f290/??>5ab9m74`=9910e4750;&065<fk2d8=k4>1:9j==<72-99<7ol;o12b?7532c2;7>5$203>de<f:;m6<=4;h;5>5<#;;:1mn5a30d951=<a0?1<7*<218bg>h49o0:965fb583>!5583kh7c=>f;35?>oe;3:1(><?:`a8j67a28=07dl=:18'776=ij1e?<h51998mg7=83.8>=4nc:l05c<6121bn=4?:%114?gd3g9:j7?n;:kbb?6=,:8;6lm4n23e>4d<3`kn6=4+3329ef=i;8l1=n54i`c94?"4:90jo6`<1g82`>=n1o0;6)==0;c`?k56n3;n76g64;29 6472hi0b>?i:0d8?ldb290/??>5be9m74`=821bnn4?:%114?dc3g9:j7?4;h`a>5<#;;:1ni5a30d96>=njh0;6)==0;`g?k56n3907d<::18'776=:=1e?<h50:9j66<72-99<7<;;o12b?7<3`896=4+332961=i;8l1>65f2083>!55838?7c=>f;18?l47290/??>5259m74`=<21b=k4?:%114?433g9:j7;4;h0f>5<#;;:1>95a30d92>=n:m0;6)==0;07?k56n3=07d<l:18'776=:=1e?<h58:9j6g<72-99<7<;;o12b??<3`8j6=4+332961=i;8l1m65f2883>!55838?7c=>f;`8?l4?290/??>5259m74`=k21b>:4?:%114?433g9:j7j4;h05>5<#;;:1>95a30d9a>=n9l0;6)==0;07?k56n3l07d=::18'776=;=1e?<h50:9j76<72-99<7=;;o12b?7<3`996=4+332971=i;8l1>65f3083>!55839?7c=>f;18?l57290/??>5359m74`=<21b?h4?:%114?533g9:j7;4;h1g>5<#;;:1?95a30d92>=n;j0;6)==0;17?k56n3=07d=m:18'776=;=1e?<h58:9j7d<72-99<7=;;o12b??<3`926=4+332971=i;8l1m65f3983>!55839?7c=>f;`8?l50290/??>5359m74`=k21b?;4?:%114?533g9:j7j4;h0e>5<#;;:1?95a30d9a>=n<?0;6)==0;66?k56n3:07d:;:18'776=<<1e?<h51:9j06<72-99<7::;o12b?4<3`>96=4+332900=i;8l1?65f4083>!5583>>7c=>f;68?l27290/??>5449m74`==21b8k4?:%114?223g9:j784;h6f>5<#;;:1885a30d93>=n<m0;6)==0;66?k56n3207d:l:18'776=<<1e?<h59:9j0g<72-99<7::;o12b?g<3`>j6=4+332900=i;8l1n65f4883>!5583>>7c=>f;a8?l2?290/??>5449m74`=l21b8:4?:%114?223g9:j7k4;h1e>5<#;;:1885a30d9b>=n=?0;6)==0;76?k56n3:07d;;:18'776==<1e?<h51:9j16<72-99<7;:;o12b?4<3`?96=4+332910=i;8l1?65f5083>!5583?>7c=>f;68?l3a290/??>5549m74`==21b9h4?:%114?323g9:j784;h7g>5<#;;:1985a30d93>=n=j0;6)==0;76?k56n3207d;m:18'776==<1e?<h59:9j1d<72-99<7;:;o12b?g<3`?26=4+332910=i;8l1n65f5983>!5583?>7c=>f;a8?l30290/??>5549m74`=l21b9=4?:%114?323g9:j7k4;h17f?6=,:8;6>:n;o12b?6<3`9?57>5$203>62f3g9:j7?4;h17<?6=,:8;6>:n;o12b?4<3`9?;7>5$203>62f3g9:j7=4;h172?6=,:8;6>::;o12b?6<3`9?87>5$203>6223g9:j7?4;h177?6=,:8;6>::;o12b?4<3`9?>7>5$203>6223g9:j7=4;h16`?6=,:8;6>;l;o12b?6<3`9>n7>5$203>63d3g9:j7?4;h16e?6=,:8;6>;l;o12b?4<3`9>57>5$203>63d3g9:j7=4;h16<?6=,:8;6>;l;o12b?2<3`9>;7>5$203>63d3g9:j7;4;h162?6=,:8;6>;l;o12b?0<3`9>97>5$203>63d3g9:j794;h160?6=,:8;6>;<;o12b?6<3`9>>7>5$203>6343g9:j7?4;h165?6=,:8;6>;<;o12b?4<3`9><7>5$203>6343g9:j7=4;h17b?6=,:8;6>;<;o12b?2<3`9?i7>5$203>6343g9:j7;4;h17`?6=,:8;6>;<;o12b?0<3`9?o7>5$203>6343g9:j794;nf;>5<#;;:1h:5a30d94>=hl?0;6)==0;f4?k56n3;07bj;:18'776=l>1e?<h52:9l`6<72-99<7j8;o12b?5<3fn96=4+3329`2=i;8l1865`d083>!5583n<7c=>f;78?jb7290/??>5d69m74`=>21dok4?:%114?b03g9:j794;naf>5<#;;:1h:5a30d9<>=hkm0;6)==0;f4?k56n3307bml:18'776=l>1e?<h5a:9lgg<72-99<7j8;o12b?d<3fi26=4+3329`2=i;8l1o65`c983>!5583n<7c=>f;f8?je0290/??>5d69m74`=m21do;4?:%114?b03g9:j7h4;na6>5<#;;:1h:5a30d955=<gj>1<7*<218g3>h49o0:=65`c283>!5583n<7c=>f;31?>id:3:1(><?:e58j67a28907bm>:18'776=l>1e?<h51598kf6=83.8>=4k7:l05c<6=21dhk4?:%114?b03g9:j7?9;:mga?6=,:8;6i94n23e>41<3fno6=4+3329`2=i;8l1=554oea94?"4:90o;6`<1g82=>=hlk0;6)==0;f4?k56n3;j76aka;29 6472m=0b>?i:0`8?jb>290/??>5d69m74`=9j10ci;50;&065<c?2d8=k4>d:9lgd<72-99<7j8;o12b?7b32eij7>5$203>a1<f:;m6<h4;n333?6=,:8;6<>9;o12b?6<3f;;97>5$203>4613g9:j7?4;n330?6=,:8;6<>9;o12b?4<3f;;?7>5$203>4613g9:j7=4;ndb>5<#;;:1j45a30d94>=hn10;6)==0;d:?k56n3;07bh9:18'776=n01e?<h52:9lb0<72-99<7h6;o12b?5<3fl?6=4+3329b<=i;8l1865`f283>!5583l27c=>f;78?j`5290/??>5f89m74`=>21dj<4?:%114?`>3g9:j794;nd3>5<#;;:1j45a30d9<>=hmo0;6)==0;d:?k56n3307bkj:18'776=n01e?<h5a:9laa<72-99<7h6;o12b?d<3foi6=4+3329b<=i;8l1o65`e`83>!5583l27c=>f;f8?jc>290/??>5f89m74`=m21di54?:%114?`>3g9:j7h4;ng4>5<#;;:1j45a30d955=<gl<1<7*<218e=>h49o0:=65`e483>!5583l27c=>f;31?>ib<3:1(><?:g;8j67a28907bk<:18'776=n01e?<h51598k`4=83.8>=4i9:l05c<6=21d==?50;&065<a12d8=k4>6:9l556=83.8>=4i9:l05c<6?21djk4?:%114?`>3g9:j7?7;:mea?6=,:8;6k74n23e>4?<3flo6=4+3329b<=i;8l1=l54oga94?"4:90m56`<1g82f>=hnk0;6)==0;d:?k56n3;h76ai7;29 6472o30b>?i:0f8?jcd290/??>5f89m74`=9l10ch?50;&065<a12d8=k4>f:9l55e=83.8>=4>0c9m74`=821d==o50;&065<68k1e?<h51:9l55?=83.8>=4>0c9m74`=:21d==650;&065<68k1e?<h53:9~f65f290:<?4?:1y'76?=;;;0D>8;;I10b>\1:3;;wh4>4;d950<e200h6l4>7;35>4b=9j0:=7?6:0095d<zfl:1<6`>0383?!7f:380(<o<:39'542=:2.:=84=;%322?4<,8;<6?5+10:96>"690097)?>a;08 47e2;1/=<m52:&25a<53-;:i7<4$03e>7=#9;:1>6*>2081?!54;3;0(>=;:09'572=:2.:>84=;%312?4<,88<6?5+13:96>"6:0097)?=a;08 44e2;1/=?m52:&26a<53-;9i7<4$00e>7=#9::1>6*>3081?!74:380(<=<:39'562=:2.:?84=;%302?4<,89<6?5+12:96>"6;0097)?<a;08 45e2;1/=>m52:&27a<53-;8i7<4$01e>7=#9=:1>6*>4081?!73:380(<:<:39'512=:2.:884=;%372?4<,8><6?5+15:96>"6<0097)?;a;08 42e2;1/=9m52:&20a<53-;?i7<4$06e>7=#9<:1>6*>5081?!72:380(<;<:39'502=:2.:984=;%362?4<,8?<6?5+14:96>"6=0097)?:a;08 43e2;1/=8m52:&21a<53-;>i7<4$07e>7=#9?:1>6*>6081?!71:380(<8<:39'532=:2.::84=;%352?4<,8<<6?5+17:96>"6>0097)?9a;08 40e2;1/=;m52:&22a<53-;=i7<4$04e>7=#9>:1>6*>7081?!70:380(<9<:39'522=:2.:;84=;%342?4<,8=<6?5+16:96>"6?0097)?8a;08 41e2;1/=:m52:&23a<53-;<i7<4$05e>7=#91:1>6*>8081?!7?:380(<6<:39'5=2=:2.:484=;%3;2?4<,82<6?5+19:96>"600097)?7a;08 4>e2;1/=5m52:&2<a<53-;3i7<4$0:e>7=#90:1>6*>9081?!7>:380(<7<:39'5<2=:2.:584=;%3:2?4<,83<6?5+18:96>"610097)?6a;08 4?e2;1/=4m52:&2=a<53-;2i7<4$0;e>7=#9h:1>6*>a081?!55n3;:=6*>2381?!7f>39:n6*<23805g=#;;91?<l4n207><=i;;?1>95+322925=#;:;1??k4$0c7>4=#9h?1=6*<5g801`=#;?:1?8k4n242><=i;?81>95+13196>o68l0;66g>0e83>>o6990;66g>0g83>>o4;?0;66g<3483>>o4;10;66g<3683>>o1l3:17d8l:188m3`=831b:h4?::k06g<722c8>l4?::k06a<722c8>n4?::k062<722c8>;4?::k06<<722c8>54?::k57?6=3`<?6=44i7794?=n>?0;66a97;29?j0?2900c;750;9l2d<722c3o7>5$203>=d<f:;m6=54i9c94?"4:903n6`<1g82?>o?03:1(><?:9`8j67a2;10e5950;&065<?j2d8=k4<;:k;2?6=,:8;65l4n23e>1=<a1?1<7*<218;f>h49o0>76g74;29 64721h0b>?i:798m=5=83.8>=47b:l05c<032c3>7>5$203>=d<f:;m6554i9394?"4:903n6`<1g8:?>o?83:1(><?:9`8j67a2h10e:h50;&065<?j2d8=k4m;:k4`?6=,:8;65l4n23e>f=<a>i1<7*<218;f>h49o0o76g8b;29 64721h0b>?i:d98m2g=83.8>=47b:l05c<a32c<57>5$203>=d<f:;m6<>4;h5;>5<#;;:14o5a30d954=<a>=1<7*<218;f>h49o0:>65f7783>!55832i7c=>f;30?>o0=3:1(><?:9`8j67a28>07d9;:18'776=0k1e?<h51498m<5=83.8>=47b:l05c<6>21b5?4?:%114?>e3g9:j7?8;:k:5?6=,:8;65l4n23e>4><3`3;6=4+3329<g=i;8l1=454i9d94?"4:903n6`<1g82e>=n0l0;6)==0;:a?k56n3;i76g7d;29 64721h0b>?i:0a8?l>>290/??>58c9m74`=9m10e:k50;&065<?j2d8=k4>e:9j36<72-99<76m;o12b?7a32ci57>5$203>g><f:;m6=54ic594?"4:90i46`<1g82?>oe>3:1(><?:c:8j67a2;10eo;50;&065<e02d8=k4<;:kb`?6=,:8;6lm4n23e>5=<ahh1<7*<218bg>h49o0:76gn9;29 6472hi0b>?i:398md>=83.8>=4nc:l05c<432cj;7>5$203>de<f:;m6954i`494?"4:90jo6`<1g86?>of=3:1(><?:`a8j67a2?10el:50;&065<fk2d8=k48;:kb7?6=,:8;6lm4n23e>==<ah81<7*<218bg>h49o0276gn1;29 6472hi0b>?i:`98md6=83.8>=4nc:l05c<e32c2i7>5$203>de<f:;m6n54i8f94?"4:90jo6`<1g8g?>o>k3:1(><?:`a8j67a2l10e4l50;&065<fk2d8=k4i;:k:e?6=,:8;6lm4n23e>46<3`326=4+3329ef=i;8l1=<54i8:94?"4:90jo6`<1g826>=n1>0;6)==0;c`?k56n3;876g66;29 6472hi0b>?i:068?l?2290/??>5ab9m74`=9<10eo:50;&065<fk2d8=k4>6:9jf6<72-99<7ol;o12b?7032ci>7>5$203>de<f:;m6<64;h`2>5<#;;:1mn5a30d95<=<ak:1<7*<218bg>h49o0:m65fag83>!5583kh7c=>f;3a?>ofm3:1(><?:`a8j67a28i07don:18'776=ij1e?<h51e98m<`=83.8>=4nc:l05c<6m21b594?:%114?gd3g9:j7?i;:kaa?6=,:8;6oj4n23e>5=<aki1<7*<218a`>h49o0:76gmb;29 6472kn0b>?i:398mgg=83.8>=4md:l05c<432c997>5$203>72<f:;m6=54i3194?"4:90986`<1g82?>o5:3:1(><?:368j67a2;10e??50;&065<5<2d8=k4<;:k14?6=,:8;6?:4n23e>1=<a8l1<7*<21810>h49o0>76g=e;29 6472;>0b>?i:798m7b=83.8>=4=4:l05c<032c9o7>5$203>72<f:;m6554i3`94?"4:90986`<1g8:?>o5i3:1(><?:368j67a2h10e?750;&065<5<2d8=k4m;:k1<?6=,:8;6?:4n23e>f=<a;=1<7*<21810>h49o0o76g=6;29 6472;>0b>?i:d98m4c=83.8>=4=4:l05c<a32c897>5$203>62<f:;m6=54i2194?"4:90886`<1g82?>o4:3:1(><?:268j67a2;10e>?50;&065<4<2d8=k4<;:k04?6=,:8;6>:4n23e>1=<a:o1<7*<21800>h49o0>76g<d;29 6472:>0b>?i:798m6e=83.8>=4<4:l05c<032c8n7>5$203>62<f:;m6554i2c94?"4:90886`<1g8:?>o413:1(><?:268j67a2h10e>650;&065<4<2d8=k4m;:k03?6=,:8;6>:4n23e>f=<a:<1<7*<21800>h49o0o76g=f;29 6472:>0b>?i:d98m10=83.8>=4;5:l05c<732c?87>5$203>13<f:;m6<54i5194?"4:90?96`<1g81?>o3:3:1(><?:578j67a2:10e9?50;&065<3=2d8=k4;;:k74?6=,:8;69;4n23e>0=<a=l1<7*<21871>h49o0=76g;e;29 6472=?0b>?i:698m1b=83.8>=4;5:l05c<?32c?o7>5$203>13<f:;m6454i5`94?"4:90?96`<1g8b?>o3i3:1(><?:578j67a2k10e9750;&065<3=2d8=k4l;:k7<?6=,:8;69;4n23e>a=<a==1<7*<21871>h49o0n76g<f;29 6472=?0b>?i:g98m00=83.8>=4:5:l05c<732c>87>5$203>03<f:;m6<54i4194?"4:90>96`<1g81?>o2:3:1(><?:478j67a2:10e8?50;&065<2=2d8=k4;;:k6b?6=,:8;68;4n23e>0=<a<o1<7*<21861>h49o0=76g:d;29 6472<?0b>?i:698m0e=83.8>=4:5:l05c<?32c>n7>5$203>03<f:;m6454i4c94?"4:90>96`<1g8b?>o213:1(><?:478j67a2k10e8650;&065<2=2d8=k4l;:k63?6=,:8;68;4n23e>a=<a<:1<7*<21861>h49o0n76g<4c83>!55839?m6`<1g83?>o4<00;6)==0;17e>h49o0:76g<4983>!55839?m6`<1g81?>o4<>0;6)==0;17e>h49o0876g<4783>!55839?96`<1g83?>o4<=0;6)==0;171>h49o0:76g<4283>!55839?96`<1g81?>o4<;0;6)==0;171>h49o0876g<5e83>!55839>o6`<1g83?>o4=k0;6)==0;16g>h49o0:76g<5`83>!55839>o6`<1g81?>o4=00;6)==0;16g>h49o0876g<5983>!55839>o6`<1g87?>o4=>0;6)==0;16g>h49o0>76g<5783>!55839>o6`<1g85?>o4=<0;6)==0;16g>h49o0<76g<5583>!55839>?6`<1g83?>o4=;0;6)==0;167>h49o0:76g<5083>!55839>?6`<1g81?>o4=90;6)==0;167>h49o0876g<4g83>!55839>?6`<1g87?>o4<l0;6)==0;167>h49o0>76g<4e83>!55839>?6`<1g85?>o4<j0;6)==0;167>h49o0<76ak8;29 6472m=0b>?i:198ka0=83.8>=4k7:l05c<632eo87>5$203>a1<f:;m6?54oe194?"4:90o;6`<1g80?>ic:3:1(><?:e58j67a2=10ci?50;&065<c?2d8=k4:;:mg4?6=,:8;6i94n23e>3=<gjl1<7*<218g3>h49o0<76ale;29 6472m=0b>?i:998kfb=83.8>=4k7:l05c<>32eho7>5$203>a1<f:;m6l54ob`94?"4:90o;6`<1g8a?>id13:1(><?:e58j67a2j10cn650;&065<c?2d8=k4k;:m`3?6=,:8;6i94n23e>`=<gj<1<7*<218g3>h49o0m76al5;29 6472m=0b>?i:028?je3290/??>5d69m74`=9810cn=50;&065<c?2d8=k4>2:9lg7<72-99<7j8;o12b?7432eh=7>5$203>a1<f:;m6<:4;na3>5<#;;:1h:5a30d950=<gml1<7*<218g3>h49o0::65`dd83>!5583n<7c=>f;34?>icl3:1(><?:e58j67a28207bjl:18'776=l>1e?<h51898kad=83.8>=4k7:l05c<6i21dhl4?:%114?b03g9:j7?m;:mg=?6=,:8;6i94n23e>4e<3fn>6=4+3329`2=i;8l1=i54obc94?"4:90o;6`<1g82a>=hjo0;6)==0;f4?k56n3;m76a>0683>!5583;;:6`<1g83?>i68<0;6)==0;332>h49o0:76a>0583>!5583;;:6`<1g81?>i68:0;6)==0;332>h49o0876aia;29 6472o30b>?i:198kc>=83.8>=4i9:l05c<632em:7>5$203>c?<f:;m6?54og794?"4:90m56`<1g80?>ia<3:1(><?:g;8j67a2=10ck=50;&065<a12d8=k4:;:me6?6=,:8;6k74n23e>3=<go;1<7*<218e=>h49o0<76ai0;29 6472o30b>?i:998k``=83.8>=4i9:l05c<>32eni7>5$203>c?<f:;m6l54odf94?"4:90m56`<1g8a?>ibj3:1(><?:g;8j67a2j10cho50;&065<a12d8=k4k;:mf=?6=,:8;6k74n23e>`=<gl21<7*<218e=>h49o0m76aj7;29 6472o30b>?i:028?jc1290/??>5f89m74`=9810ch;50;&065<a12d8=k4>2:9la1<72-99<7h6;o12b?7432en?7>5$203>c?<f:;m6<:4;ng1>5<#;;:1j45a30d950=<g8::6=4+3329b<=i;8l1=;54o023>5<#;;:1j45a30d952=<gol1<7*<218e=>h49o0:465`fd83>!5583l27c=>f;3:?>ial3:1(><?:g;8j67a28k07bhl:18'776=n01e?<h51c98kcd=83.8>=4i9:l05c<6k21dj:4?:%114?`>3g9:j7?k;:mfg?6=,:8;6k74n23e>4c<3fo:6=4+3329b<=i;8l1=k54o02`>5<#;;:1==l4n23e>5=<g8:j6=4+332955d<f:;m6<54o02:>5<#;;:1==l4n23e>7=<g8:36=4+332955d<f:;m6>54}r401?6=9;?pR>7l;_40f>X1;=1U:>=4^711?[0492T=?=5Q63d8Z34b3W<9h6P92b9]27d<5:<>6<?=;<10`?54>278?i4<349>76b=;:201>=k:214?854l399;63<3e8063=:;:n1??74=21g>64?3498h78<;<10`?033498h78:;<10`?013498h76l;<10`?>f3498h767;<10`?>03498h769;<10`?>23498h76;;<10`?>43498h76=;<10`?>63498h76?;<10`?1a3498h79k;<10`?1d3498h79m;<10`?1f3498h796;<10`?1?3498h798;<10`?113498h79:;<10`?133498h77<;<10`??53498h7l6;<10`?d03498h7l9;<10`?d23498h7lj;<10`?dd3498h7lm;<10`?df3498h7<:;<10`?403498h7<9;<10`?7b3498h7=8;<10`?513498h7<i;<10`?213498h7:n;<10`?2>3498h7:7;<10`?203498h7=i;<10`?3f3498h7;6;<10`?3?3498h7;8;<10`?373498h7=:d:?07a<4=k16?>j534c8965c2:?270=<d;160>;4;m089?5232f9707<5:9o6>;?;<10g?54>278?n4<349>76e=;:201>=l:214?854k399;63<3b8063=:;:i1??74=21`>64?3498o78<;<10g?033498o78:;<10g?013498o76l;<10g?>f3498o767;<10g?>03498o769;<10g?>23498o76;;<10g?>43498o76=;<10g?>63498o76?;<10g?1a3498o79k;<10g?1d3498o79m;<10g?1f3498o796;<10g?1?3498o798;<10g?113498o79:;<10g?133498o77<;<10g??53498o7l6;<10g?d03498o7l9;<10g?d23498o7lj;<10g?dd3498o7lm;<10g?df3498o7<:;<10g?403498o7<9;<10g?7b3498o7=8;<10g?513498o7<i;<10g?213498o7:n;<10g?2>3498o7:7;<10g?203498o7=i;<10g?3f3498o7;6;<10g?3?3498o7;8;<10g?373498o7=:d:?07f<4=k16?>m534c8965d2:?270=<c;160>;4;j089?5232a9707<5:9h6>;?;<10f?54>278?o4<349>76d=;:201>=m:214?854j399;63<3c8063=:;:h1??74=21a>64?3498n78<;<10f?033498n78:;<10f?013498n76l;<10f?>f3498n767;<10f?>03498n769;<10f?>23498n76;;<10f?>43498n76=;<10f?>63498n76?;<10f?1a3498n79k;<10f?1d3498n79m;<10f?1f3498n796;<10f?1?3498n798;<10f?113498n79:;<10f?133498n77<;<10f??53498n7l6;<10f?d03498n7l9;<10f?d23498n7lj;<10f?dd3498n7lm;<10f?df3498n7<:;<10f?403498n7<9;<10f?7b3498n7=8;<10f?513498n7<i;<10f?213498n7:n;<10f?2>3498n7:7;<10f?203498n7=i;<10f?3f3498n7;6;<10f?3?3498n7;8;<10f?373498n7=:d:?07g<4=k16?>l534c8965e2:?270=<b;160>;4;k089?5232`9707<5:9i6>;?;<10e?54>278?l4<349>76g=;:201>=n:214?854i399;63<3`8063=:;:k1??74=21b>64?3498m78<;<10e?033498m78:;<10e?013498m76l;<10e?>f3498m767;<10e?>03498m769;<10e?>23498m76;;<10e?>43498m76=;<10e?>63498m76?;<10e?1a3498m79k;<10e?1d3498m79m;<10e?1f3498m796;<10e?1?3498m798;<10e?113498m79:;<10e?133498m77<;<10e??53498m7l6;<10e?d03498m7l9;<10e?d23498m7lj;<10e?dd3498m7lm;<10e?df3498m7<:;<10e?403498m7<9;<10e?7b3498m7=8;<10e?513498m7<i;<10e?213498m7:n;<10e?2>3498m7:7;<10e?203498m7=i;<10e?3f3498m7;6;<10e?3?3498m7;8;<10e?373498m7=:d:?07d<4=k16?>o534c8965f2:?270=<a;160>;4;h089?5232c9707<5:9j6>;?;|q567<720qU:?<4=21g>46b3498h7??d:?07f<68l16?>m511f8965e28:n70=<b;33`>;4;h0:<h5232c955b<uz<9?7>59z\566=:;:n1=<>4=21g>46a3498o7?>0:?07f<68o16?>l51028965e28:m70=<a;324>;4;h0:<k5rs2;b>5<69rT85l5232f92a=:;:n1:n5232f977d<5:9o6><n;<10g?0c3498o78l;<10g?55j278?n4<2`9>76d=>m16?>l56b9>76d=;;h01>=m:20b?854i3<o70=<a;4`?854i399n63<3`806d=z{:3i6=4>1z\0=g=:;:n1:k5232f92`=:;:n1??j4=21g>64d3498o78i;<10g?0b3498o7==d:?07f<4:j16?>l56g9>76d=>l16?>l533f8965e2:8h70=<a;4e?854i3<n70=<a;11`>;4;h08>n5rs43;>5<5sW>m463<3e8g`>{t=8<1<7<t^5d4?854l3nh7p}:1583>7}Y<o?01>=k:e`8yv36;3:1>vP;f59>76b=lh1v8?=:181[2a;278?i4k9:p147=838pR9h=;<10`?b23ty>==4?:3y]0c7<5:9o6no4}r73b?6=:rT?j=5232f9fc=z{<:n6=4={_6fb>;4;j0oh6s|51f94?4|V=on70=<c;f`?xu28j0;6?uQ4df8965d2mh0q~;?b;296~X3mj16?>m5d`9~w06>2909wS:ja:?07f<c12wx9=650;0xZ1c>3498o7j:;|q642<72;qU8h64=21`>fg<uz?;:7>52z\7a2=:;:i1nk5rs426>5<5sW>n:63<3c8g`>{t=9>1<7<t^5g6?854j3nh7p}:0283>7}Y<l>01>=m:e`8yv37:3:1>vP;e29>76d=lh1v8>>:181[2b:278?o4k9:p156=838pR9k>;<10f?b23ty>=k4?:3y]0cc<5:9i6no4}r72a?6=:rT?ji5232`9fc=z{<;o6=4={_6eg>;4;h0oh6s|50a94?4|V=li70=<a;f`?xu29k0;6?uQ4gc8965f2mh0q~;>a;296~X3n016?>o5d`9~w07>2909wS:i6:?07d<c12wx9<;50;0xZ1ce3498m7j:;|q64d<72;qU8h>4=21b>fg<uz>mj7>52z\7`c=:;:k1nk5rs4`e>5<5sW??<63<3e8ee>{t=kn1<7<t^41e?854l3l37p}:bb83>7}Y=:o01>=k:g48yv3ej3:1>vP:3e9>76b=n<1v8ln:181[34k278?i4i4:p1g?=838pR8=m;<10`?`43ty>n54?:3y]16g<5:9o6k<4}r7a3?6=:rT>?45232f9b4=z{<h>6=4={_703>;4;j0mm6s|5c694?4|V<9=70=<c;d;?xu2j:0;6?uQ5278965d2o<0q~;m2;296~X2;=16?>m5f49~w0d62909wS;<3:?07f<a<2wx9o>50;0xZ0553498o7h<;|q6ec<72;qU9>?4=21`>c4<uz?ji7>52z\675=:;:i1j<5rs4cg>5<5sW?9j63<3c8ee>{t=hi1<7<t^40f?854j3l37p}:a`83>7}Y=;i01>=m:g48yv3f13:1>vP:2c9>76d=n<1v8o7:181[35i278?o4i4:p1d1=838pR8<6;<10f?`43ty>m;4?:3y]17><5:9i6k<4}r7b1?6=:rT>>:5232`9b4=z{<k?6=4={_712>;4;h0mm6s|5`194?4|V<8>70=<a;d;?xu2i;0;6?uQ5368965f2o<0q~;n1;296~X2::16?>o5f49~w37a2909wS;6f:?07d<a<2wx:<k50;0xZ0?b3498m7h<;|q55a<72;qU94j4=21b>c4<uz<:o7>52z\6=f=:;:k1j<5rs73a>5<5sW?2n63<3e8e4>{t>8k1<7<t^4;b?854l3om7p}91883>7}Y=0301>=k:dg8yv0603:1>vP:999>76b=mm1v;?8:181[3>?278?i4jb:p240=838pR879;<10`?cf3ty==94?:3y]1<2<5:9o6h74}r427?6=:rT>5>5232f9a==z{?;96=4={_7:6>;4;j0m<6s|60394?4|V<3:70=<c;ge?xu1990;6?uQ5828965d2lo0q~8?f;296~X20o16?>m5ee9~w36b2909wS;7e:?07f<bj2wx:=j50;0xZ0>c3498o7kn;|q54f<72;qU95m4=21`>`?<uz<;n7>52z\6<g=:;:i1i55rs72:>5<5sW?3563<3c8e4>{t>921<7<t^4:;?854j3om7p}90683>7}Y=1=01>=m:dg8yv07>3:1>vP:879>76d=mm1v;>::181[3?=278?o4jb:p252=838pR86;;<10f?cf3ty=<>4?:3y]1=5<5:9i6h74}r436?6=:rT>4?5232`9a==z{?::6=4={_7;5>;4;h0m<6s|61294?4|V<2;70=<a;ge?xu2nl0;6?uQ56g8965f2lo0q~;id;296~X2?m16?>o5ee9~w0`d2909wS;8c:?07d<bj2wx9kl50;0xZ01e3498m7kn;|q6bd<72;qU9:o4=21b>`?<uz?m57>52z\63<=:;:k1i55rs4d;>5<5sW?<463<3e8f3>{t=o=1<7<t^454?854l3o=7p}:f783>7}Y=><01>=k:d78yv3a=3:1>vP:749>76b=m=1v8h<:181[30;278?i4j3:p1c4=838pR89=;<10`?c53ty>j<4?:3y]127<5:9o6<>>;|q6b5<72;qU9:>4=21g>4673ty>ik4?:3y]13`<5:9h6h94}r7fa?6=:rT>:h5232a9a3=z{<oo6=4={_75`>;4;j0n96s|5da94?4|V<<h70=<c;g7?xu2mk0;6?uQ57`8965d2l90q~;ja;296~X2>h16?>m5e39~w0c?2909wS;98:?07f<6881v8k8:181[31?278?n4>019~w0c12909wS;96:?07g<b?2wx9h;50;0xZ0023498n7k9;|q6a1<72;qU9;:4=21a>`3<uz?n?7>52z\626=:;:h1i95rs4g1>5<5sW?=>63<3c8f7>{t=l;1<7<t^442?854j3o97p}:e183>7}Y=?:01>=m:022?xu2lo0;6?uQ54d8965e28:;7p}:de83>7}Y=<n01>=n:d58yv3ck3:1>vP:5b9>76g=m?1v8jm:181[32j278?l4j5:p1ag=838pR8;n;<10e?c33ty>h44?:3y]10?<5:9j6h=4}r7g<?6=:rT>955232c9a7=z{<n<6=4={_763>;4;h0:<<5rs4f5>5<5sW?>:63<3`8245=z{<n>6=4={_761>;4;m0mj6s|5e694?4|V<??70=<d;df?xu2l;0;6?uQ5408965c2on0q~;k1;296~X2=816?>j5fb9~w0b72909wS;:0:?07a<aj2wx9nh50;0xZ02a3498h7h8;|q6g`<72;qU99k4=21g>`e<uz?hh7>52z\60a=:;:n1i<5rs4a`>5<5sW??o63<3b8eb>{t=jh1<7<t^46a?854k3ln7p}:c`83>7}Y==k01>=l:gf8yv3d13:1>vP:489>76e=nj1v8m8:181[33?278?n4ib:p1f0=838pR8:9;<10g?`03ty>o84?:3y]113<5:9h6hm4}r7`0?6=:rT>895232a9a4=z{<i86=4={_777>;4;k0mj6s|5b094?4|V<>970=<b;df?xu2k80;6?uQ5538965e2on0q~;l0;296~X2;116?>l5fb9~w0d12909wS;=d:?07g<aj2wx9ll50;0xZ0453498n7h8;|q565<72;qU94;4=21a>`e<uz<:97>52z\6<d=:;:h1i<5rs72b>5<5sW?<j63<3`8eb>{t=ol1<7<t^457?854i3ln7p}:f583>7}Y=?301>=n:gf8yv3b13:1>vP:5d9>76g=nj1v8jj:181[32;278?l4ib:p1a5=838pR8:7;<10e?`03ty>o54?:3y]177<5:9j6hm4}r7b4?6=:rT>>=5232c9a4=z{?>>6=46{_474>;4;m088o5232f971?<5:9o6>:7;<10`?53?278?i4<479>76b=;=>01>=k:260?854l39?>6s|65194??|V?9m70=<c;17f>;4;j08845232a971><5:9h6>:8;<10g?53>278?n4<459>76e=;=901>=l:261?xu1<;0;64uQ62g8965e2:>i70=<b;17=>;4;k08855232`9711<5:9i6>:9;<10f?53<278?o4<429>76d=;=80q~8;1;29=~X1;m16?>o535`8965f2:>270=<a;17<>;4;h088:5232c9710<5:9j6>:;;<10e?53;278?l4<439~w33c2908wS8;d:?07a<4=116?>j535d8yv02j3:1?vP94b9>76e=;<201>=l:26e?xu1=h0;6>uQ65`8965e2:?370=<b;17b>{t><31<7=t^76b?854i39>463<3`800c=z{??36=4<{_47=>;4;m089:5232f971c<uz<>;7>53z\50==:;:i1?894=21`>62b3ty=:;4?:2y]203<5:9i6>;8;<10f?53m2wx:;;50;1xZ3333498m7=:7:?07d<4<l1v;8;:180[02;278?i4<579>76b=;=n0q~893;297~X1=;16?>m53448965d2:>o7p}96383>6}Y><;01>=m:275?854j39?h6s|67394?5|V??;70=<a;162>;4;h088i5rs743>5<4sW<?j63<3e8010=:;:n1?9m4}r46b?6=;rT=8h5232a9703<5:9h6>:l;|q51`<72:qU:994=21a>6323498n7=;c:p200=839pR;:9;<10e?52=278?l4<4b9~w61f2902wS=9e:?07a<5;278?i4<5:?07f<5;278?n4<5:?07g<5;278?o4<5:?07d<5;278?l4<5:p72>=833pR>8k;<10`?453498h7=<;<10g?453498o7=<;<10f?453498n7=<;<10e?453498m7=<;|q0<6<720qU?:84=21g>77<5:9o6><4=21`>77<5:9h6><4=21a>77<5:9i6><4=21b>77<5:9j6><4}r1;6?6=1rT8;85232f965=:;:n1?<5232a965=:;:i1?<5232`965=:;:h1?<5232c965=:;:k1?<5rs2:2>5<>sW9<863<3e82b>;4;m08<63<3b82b>;4;j08<63<3c82b>;4;k08<63<3`82b>;4;h08<6s|39294??|V:=870=<d;0f?854l39n70=<c;0f?854k39n70=<b;0f?854j39n70=<a;0f?854i39n7p}<7g83><}Y;>801>=k:3f8965c2:n01>=l:3f8965d2:n01>=m:3f8965e2:n01>=n:3f8965f2:n0q~=8e;29=~X4?816?>j52b9>76b=;j16?>m52b9>76e=;j16?>l52b9>76d=;j16?>o52b9>76g=;j1v>9k:18:[508278?i4=b:?07a<4j278?n4=b:?07f<4j278?o4=b:?07g<4j278?l4=b:?07d<4j2wx?:m50;;xZ60a3498h7<n;<10`?5f3498o7<n;<10g?5f3498n7<n;<10f?5f3498m7<n;<10e?5f3ty8;o4?:8y]73e<5:9o6?74=21g>6?<5:9h6?74=21`>6?<5:9i6?74=21a>6?<5:9j6?74=21b>6?<uz9<;7>59z\02g=:;:n1>55232f97==:;:i1>55232a97==:;:h1>55232`97==:;:k1>55232c97==z{:336=46{_1;`>;4;m0?863<3e862>;4;j0?863<3b862>;4;k0?863<3c862>;4;h0?863<3`862>{t;0<1<77t^2:`?854l3>870=<d;77?854k3>870=<c;77?854j3>870=<b;77?854i3>870=<a;77?xu41<0;64uQ39`8965c2=801>=k:418965d2=801>=l:418965e2=801>=m:418965f2=801>=n:418yv5><3:15vP<8`9>76b=<816?>j5539>76e=<816?>m5539>76d=<816?>l5539>76g=<816?>o5539~w6?42902wS=79:?07a<38278?i4:1:?07f<38278?n4:1:?07g<38278?o4:1:?07d<38278?l4:1:p7<4=833pR>67;<10`?2a3498h7;i;<10g?2a3498o7;i;<10f?2a3498n7;i;<10e?2a3498m7;i;|q0=4<720qU?594=21g>1c<5:9o68k4=21`>1c<5:9h68k4=21a>1c<5:9i68k4=21b>1c<5:9j68k4}r1:4?6=1rT84;5232f90a=:;:n19i5232a90a=:;:i19i5232`90a=:;:h19i5232c90a=:;:k19i5rs2:e>5<>sW93963<3e87g>;4;m0>o63<3b87g>;4;j0>o63<3c87g>;4;k0>o63<3`87g>;4;h0>o6s|39g94??|V:2?70=<d;6a?854l3?i70=<c;6a?854k3?i70=<b;6a?854j3?i70=<a;6a?854i3?i7p}<d783>7}Y;k<01>=k:838yv5c<3:1>vP<b49>76b=191v>j=:181[5e;278?i47f:p7a7=838pR>l=;<10`?>b3ty8h=4?:3y]7g7<5:9o65j4}r1`b?6=:rT8n=5232f9<<=z{:in6=4={_1bb>;4;m0<i6s|3bf94?4|V:kn70=<d;50?xu4kj0;6?uQ3`f8965d20;0q~=lb;296~X4ij16?>m5919~w6ef2909wS=nb:?07f<?n2wx?n750;0xZ6gf3498o76j;|q0g2<72;qU?l64=21`>=b<uz9h:7>52z\0e2=:;:i1445rs2a6>5<5sW9j:63<3b84a>{t;j>1<7<t^2c6?854k3=87p}<c283>7}Y;h>01>=m:838yv5d:3:1>vP<a29>76d=191v>m>:181[5f:278?o47f:p7f6=838pR>o>;<10f?>b3ty8nk4?:3y]7d6<5:9i65j4}r1aa?6=:rT85k5232`9<<=z{:no6=4={_1ag>;4;k0<i6s|3ea94?4|V:hi70=<b;50?xu4lk0;6?uQ3cc8965f20;0q~=ka;296~X4j016?>o5919~w6b>2909wS=m8:?07d<?n2wx?i650;0xZ6d03498m76j;|q0`2<72;qU?o:4=21b>=b<uz9o?7>52z\0e<=:;:k1445rs2a;>5<5sW92i63<3`84a>{t;kn1<7<t^2;g?854i3=87p};7e83>7}Y;oo01>=k:`f8yv20j3:1>vP<fe9>76b=ik1v99n:181[5ak278?i4n9:p02?=838pR>hm;<10`?g?3ty?;54?:3y]7cg<5:9o6l94}r643?6=:rT8j45232f9e3=z{===6=4={_1e<>;4;m0j96s|46794?4|V:l<70=<d;c7?xu3?:0;6?uQ3g78965d2hn0q~:82;296~X4n=16?>m5ac9~w1162909wS=i3:?07f<f12wx8:>50;0xZ6`53498o7o7;|q72c<72;qU?k?4=21`>d1<uz>=i7>52z\0b5=:;:i1m;5rs54g>5<5sW9nj63<3b8b1>{t<?i1<7<t^2gf?854k3k?7p};6c83>7}Y;ln01>=m:`f8yv21i3:1>vP<eb9>76d=ik1v987:181[5bi278?o4n9:p031=838pR>k6;<10f?g?3ty?:;4?:3y]7`><5:9i6l94}r651?6=:rT8i:5232`9e3=z{=<?6=4={_1f2>;4;k0j96s|47194?4|V:o>70=<b;c7?xu3>;0;6?uQ3d68965f2hn0q~:91;296~X4m:16?>o5ac9~w1072909wS=j2:?07d<f12wx88h50;0xZ6c63498m7o7;|q7`a<72;qU88j4=21b>d1<uz>oo7>52z\71f=:;:k1m;5rs5fa>5<5sW>>n63<3`8b1>{t<mk1<7<t^57b?854i3k?7p};d883>7}Y<<301>=k:`18yv2c03:1>vP;599>76b=i;1v9j8:181[22?278?i4n1:p0a0=838pR9;9;<10`?g73ty?h84?:3y]003<5:9o64k4}r6g0?6=:rT?995232f9=a=z{=n96=4={_666>;4;m02o6s|4e394?4|V=?:70=<d;;a?xu3l90;6?uQ4428965d2h90q~:lf;296~X3<o16?>m5a39~w1eb2909wS:;e:?07f<f92wx8nj50;0xZ12c3498o7o?;|q7gf<72;qU89m4=21`><c<uz>hn7>52z\70g=:;:i15i5rs5ab>5<5sW>?m63<3b8:g>{t<j31<7<t^56:?854k33i7p};c683>7}Y<==01>=m:`18yv2d>3:1>vP;479>76d=i;1v9m::181[23=278?o4n1:p0f2=838pR9:;;<10f?g73ty?o>4?:3y]015<5:9i64k4}r6`6?6=:rT?8?5232`9=a=z{=i:6=4={_675>;4;k02o6s|4b294?4|V=>;70=<b;;a?xu3jo0;6?uQ42d8965f2h90q~:me;296~X3;l16?>o5a39~w1dd2909wS:<c:?07d<f92wx8ol50;0xZ15e3498m7o?;|q7fd<72;qU8>o4=21b><c<uz>i57>52z\77<=:;:k15i5rs5`;>5<5sW>8463<3`8:g>{t<k=1<7<t^514?854i33i7p};b783>7}Y<:<01>=k:8c8yv2e=3:1>vP;349>76b=101v9l;:181[24<278?i468:p0g5=838pR9=<;<10`??03ty?n<4?:3y]067<5:9o6484}r6a4?6=:rT??=5232f9=0=z{=km6=4={_61b>;4;m0i86s|4`g94?4|V=8n70=<d;`0?xu3im0;6?uQ43f8965d20k0q~:nc;296~X3:j16?>m5989~w1ge2909wS:=b:?07f<>02wx8lo50;0xZ14f3498o778;|q7e<<72;qU8?74=21`><0<uz>j47>52z\76==:;:i1585rs5c5>5<5sW>9:63<3b8a0>{t<h?1<7<t^506?854k3h87p};a583>7}Y<;>01>=m:8c8yv2f;3:1>vP;229>76d=101v9o=:181[25:278?o468:p0d7=838pR9<>;<10f??03ty?m=4?:3y]076<5:9i6484}r6:b?6=:rT?=k5232`9=0=z{=3n6=4={_62a>;4;k0i86s|48f94?4|V=;o70=<b;`0?xu31k0;6?uQ40`8965f20k0q~:6a;296~X39h16?>o5989~w1?>2909wS:>9:?07d<>02wx84650;0xZ17?3498m778;|q7=2<72;qU8<94=21b><0<uz>2:7>52z\753=:;:k1585rs5;6>5<5sW>:963<3`8a0>{t<0>1<7<t^537?854i3h87p};9283>7}Y<8901>=k:c08yv2>:3:1>vP;139>76b=j81v97?:181[268278?i4m0:p0=`=838pR9>i;<10`?ga3ty?4h4?:3y]05c<5:9o6lk4}r6;`?6=:rT?<i5232f9ed=z{=2h6=4={_63g>;4;m02j6s|49`94?4|V=:i70=<d;;7?xu30h0;6?uQ41c8965d2k80q~:79;296~X38016?>m5b09~w1>?2909wS:?8:?07f<e82wx85950;0xZ1603498o7oi;|q7<0<72;qU8=;4=21`>dc<uz>387>52z\741=:;:i1ml5rs5:0>5<5sW>;?63<3b8:b>{t<181<7<t^521?854k33?7p};8083>7}Y<9;01>=m:c08yv2?83:1>vP;019>76d=j81v99i:181[5an278?o4m0:p02c=838pR>h9;<10f?ga3ty?;94?:3y]7`d<5:9i6lk4}r65=?6=:rT8i=5232`9ed=z{=nn6=4={_667>;4;k02j6s|4e194?4|V=>370=<b;;7?xu3k10;6?uQ42f8965f2k80q~:md;296~X3;;16?>o5b09~w1d52909wS:=7:?07d<e82wx8l950;0xZ17d3498m7oi;|q7=f<72;qU8<?4=21b>dc<uz>2=7>52z\743=:;:k1ml5rs5:5>5<5sW9oj63<3`8:b>{t<<o1<7<t^2ff?854i33?7ps|38c94?4|V:3j708>:2;b?!54m38:56s|63094?4|V?89708>:701?!54m38om6s|65794?4|V?>;708>:763?!54m38nj6s|65194?4|V?9m708>:71e?!54m38mm6s|65094?4|V?9n708>:71f?!54m39;96s|65394?4|V?9o708>:71g?!54m39;i6s|36c94?4|V:<n708>:24f?!54m3;jn6s|36:94?4|V:<o708>:24g?!54m3;i:6s|39194?4|V:==708>:255?!54m3;h=6s|39094?4|V:=>708>:256?!54m3;ho6s|39394?4|V:=?708>:257?!54m3;o;6s|39294?4|V:=8708>:250?!54m3;n>6s|36d94?4|V:=9708>:251?!54m3;nh6s|36g94?4|V:=:708>:252?!54m3;m46s|36f94?4|V:=;708>:253?!54m38;?6s|36a94?4|V:<m708>:24e?!54m38;i6s|36`94?4|V:<h708>:24`?!54m38:m6s|36594?4|V:<i708>:24a?!54m38996s|3e494?4|V:h=708>:2`5?!54m388<6s|3e694?4|V:h>708>:2`6?!54m388n6s|3e094?4|V:h8708>:2`0?!54m38?:6s|3e394?4|V:h9708>:2`1?!54m38>=6s|3e294?4|V:h:708>:2`2?!54m38>o6s|3bd94?4|V:h;708>:2`3?!54m38=;6s|3bg94?4|V:km708>:2ce?!54m38<>6s|3bf94?4|V:kn708>:2cf?!54m38<h6s|3ba94?4|V:ko708>:2cg?!54m38346s|3b`94?4|V:kh708>:2c`?!54m382?6s|3bc94?4|V:ki708>:2ca?!54m382i6s|3b;94?4|V:kj708>:2cb?!54m38j56s|3b594?4|V:k3708>:2c;?!54m38i86s|3b494?4|V:k<708>:2c4?!54m38ij6s|3b794?4|V:k=708>:2c5?!54m38hm6s|3b694?4|V:k>708>:2c6?!54m38o96s|3b194?4|V:k?708>:2c7?!54m38o46s|3b094?4|V:k8708>:2c0?!54m38o56s|3b394?4|V:k9708>:2c1?!54m38on6s|3b294?4|V:k:708>:2c2?!54m38oo6s|3cd94?4|V:k;708>:2c3?!54m38oh6s|3cg94?4|V:3m708>:2;e?!54m38oi6s|3ef94?4|V:hh708>:2``?!54m38oj6s|3ea94?4|V:hi708>:2`a?!54m38n<6s|3e`94?4|V:hj708>:2`b?!54m38n=6s|3ec94?4|V:h2708>:2`:?!54m38n>6s|3e;94?4|V:h3708>:2`;?!54m38n?6s|3e:94?4|V:h<708>:2`4?!54m38n86s|3e594?4|V:h?708>:2`7?!54m38n96s|3e194?4|V:k2708>:2c:?!54m38n:6s|3b:94?4|V:3n708>:2;f?!54m38n;6s|3cf94?4|V:3o708>:2;g?!54m38n46s|50:94?4|V=l3708>:5d;?!54m38n56s|50494?4|V=l<708>:5d4?!54m38nm6s|50694?4|V=l>708>:5d6?!54m38nn6s|50194?4|V=l?708>:5d7?!54m38no6s|50094?4|V=l8708>:5d0?!54m38nh6s|50394?4|V=l9708>:5d1?!54m38ni6s|50294?4|V=l:708>:5d2?!54m38m<6s|51d94?4|V=l;708>:5d3?!54m38m=6s|51g94?4|V=om708>:5ge?!54m38m>6s|51f94?4|V=on708>:5gf?!54m38m?6s|51a94?4|V=oo708>:5gg?!54m38m86s|51`94?4|V=oh708>:5g`?!54m38m96s|51;94?4|V=oj708>:5gb?!54m38m:6s|51:94?4|V=o2708>:5g:?!54m38m;6s|51594?4|V=o3708>:5g;?!54m38m46s|51494?4|V=o<708>:5g4?!54m38m56s|51794?4|V=o=708>:5g5?!54m38mn6s|51694?4|V=o>708>:5g6?!54m38mo6s|51194?4|V=o?708>:5g7?!54m38mh6s|51094?4|V=o8708>:5g0?!54m38mi6s|51394?4|V=o9708>:5g1?!54m38mj6s|51294?4|V=o:708>:5g2?!54m39;<6s|50d94?4|V=ln708>:5df?!54m39;=6s|50g94?4|V=lo708>:5dg?!54m39;>6s|50f94?4|V=lh708>:5d`?!54m39;?6s|50a94?4|V=li708>:5da?!54m39;86s|50`94?4|V=lj708>:5db?!54m39;:6s|50c94?4|V=l2708>:5d:?!54m39;;6s|50;94?4|V=l=708>:5d5?!54m39;46s|50794?4|V=oi708>:5ga?!54m39;56s|51c94?4|V=o;708>:5g3?!54m39;m6s|4gd94?4|V=nm708>:5fe?!54m39;n6s|38`94?4|V:3i708>:2;a?!54m39;o6s|63194?4|V?88708>:700?!54m39;h6s|64f94?4|V?>o708>:76g?!54m39;j6s|64`94?4|V?>h708>:76`?!54m39:<6s|64c94?4|V?>i708>:76a?!54m39:=6s|64;94?4|V?>j708>:76b?!54m39:>6s|64:94?4|V?>2708>:76:?!54m39:?6s|64594?4|V?>3708>:76;?!54m39:86s|67494?4|V??>708>:776?!54m39:96s|67794?4|V???708>:777?!54m39::6s|67694?4|V??8708>:770?!54m39:;6s|67194?4|V??9708>:771?!54m39:46s|67094?4|V??:708>:772?!54m3;jo6s|67394?4|V??;708>:773?!54m3;jh6s|67294?4|V?>m708>:76e?!54m3;ji6s|64d94?4|V?>n708>:76f?!54m3;jj6s|64g94?4|V?><708>:764?!54m3;i<6s|64494?4|V?>=708>:765?!54m3;i=6s|38:94?4|V:2o708>:2:g?!54m3;i>6s|38494?4|V:2h708>:2:`?!54m3;i?6s|38794?4|V:2i708>:2:a?!54m3;i86s|38694?4|V:2j708>:2:b?!54m3;i96s|38194?4|V:22708>:2::?!54m3;i;6s|38094?4|V:23708>:2:;?!54m3;i46s|38394?4|V:2<708>:2:4?!54m3;i56s|38294?4|V:2=708>:2:5?!54m3;im6s|39d94?4|V:2>708>:2:6?!54m3;in6s|39g94?4|V:2?708>:2:7?!54m3;io6s|46f94?4|V:ln708>:2df?!54m3;ih6s|46`94?4|V:lo708>:2dg?!54m3;ii6s|46c94?4|V:lh708>:2d`?!54m3;ij6s|46;94?4|V:li708>:2da?!54m3;h<6s|46:94?4|V:lj708>:2db?!54m3;h>6s|46594?4|V:l2708>:2d:?!54m3;h?6s|46494?4|V:l3708>:2d;?!54m3;h86s|46794?4|V:l<708>:2d4?!54m3;h96s|46194?4|V:l>708>:2d6?!54m3;h:6s|46094?4|V:l?708>:2d7?!54m3;h;6s|46394?4|V:l8708>:2d0?!54m3;h46s|46294?4|V:l9708>:2d1?!54m3;h56s|47d94?4|V:l:708>:2d2?!54m3;hm6s|47g94?4|V:l;708>:2d3?!54m3;hn6s|47f94?4|V:om708>:2ge?!54m3;hh6s|47a94?4|V:on708>:2gf?!54m3;hi6s|47`94?4|V:oo708>:2gg?!54m3;hj6s|47c94?4|V:oh708>:2g`?!54m3;o<6s|47:94?4|V:oj708>:2gb?!54m3;o=6s|47594?4|V:o2708>:2g:?!54m3;o>6s|47494?4|V:o3708>:2g;?!54m3;o?6s|47794?4|V:o<708>:2g4?!54m3;o86s|47694?4|V:o=708>:2g5?!54m3;o96s|47194?4|V:o>708>:2g6?!54m3;o:6s|47094?4|V:o?708>:2g7?!54m3;o46s|47394?4|V:o8708>:2g0?!54m3;o56s|47294?4|V:o9708>:2g1?!54m3;om6s|44d94?4|V:o:708>:2g2?!54m3;on6s|4ef94?4|V=?o708>:57g?!54m3;oo6s|4ea94?4|V=?h708>:57`?!54m3;oh6s|4e`94?4|V=?i708>:57a?!54m3;oi6s|4ec94?4|V=?j708>:57b?!54m3;oj6s|4e;94?4|V=?2708>:57:?!54m3;n<6s|4e:94?4|V=?3708>:57;?!54m3;n=6s|4e594?4|V=?<708>:574?!54m3;n?6s|4e494?4|V=?=708>:575?!54m3;n86s|4e794?4|V=?>708>:576?!54m3;n96s|4e694?4|V=??708>:577?!54m3;n:6s|4e094?4|V=?9708>:571?!54m3;n;6s|4e394?4|V=?:708>:572?!54m3;n46s|4e294?4|V=?;708>:573?!54m3;n56s|4bd94?4|V=>m708>:56e?!54m3;nm6s|4bg94?4|V=>n708>:56f?!54m3;nn6s|4bf94?4|V=>o708>:56g?!54m3;no6s|4ba94?4|V=>h708>:56`?!54m3;ni6s|4b`94?4|V=>i708>:56a?!54m3;nj6s|4bc94?4|V=>j708>:56b?!54m3;m<6s|4b;94?4|V=>2708>:56:?!54m3;m=6s|4b594?4|V=><708>:564?!54m3;m>6s|4b494?4|V=>=708>:565?!54m3;m?6s|4b794?4|V=>>708>:566?!54m3;m86s|4b694?4|V=>?708>:567?!54m3;m96s|4b194?4|V=>8708>:560?!54m3;m:6s|4b094?4|V=>9708>:561?!54m3;m;6s|4b394?4|V=>:708>:562?!54m3;m56s|4b294?4|V=>;708>:563?!54m3;mm6s|4cd94?4|V=9m708>:51e?!54m3;mn6s|4cg94?4|V=9n708>:51f?!54m3;mo6s|4ca94?4|V=9h708>:51`?!54m3;mh6s|4c`94?4|V=9i708>:51a?!54m3;mi6s|4cc94?4|V=9j708>:51b?!54m3;mj6s|4c;94?4|V=92708>:51:?!54m38;<6s|4c:94?4|V=93708>:51;?!54m38;=6s|4c594?4|V=9<708>:514?!54m38;>6s|4c494?4|V=9=708>:515?!54m38;86s|4c794?4|V=9>708>:516?!54m38;96s|4c694?4|V=9?708>:517?!54m38;:6s|4c194?4|V=98708>:510?!54m38;;6s|4c394?4|V=9:708>:512?!54m38;46s|4c294?4|V=9;708>:513?!54m38;56s|4`d94?4|V=8m708>:50e?!54m38;m6s|4`g94?4|V=8n708>:50f?!54m38;n6s|4`f94?4|V=8o708>:50g?!54m38;o6s|4`a94?4|V=8h708>:50`?!54m38;h6s|4``94?4|V=8i708>:50a?!54m38;j6s|4`c94?4|V=8j708>:50b?!54m38:<6s|4`;94?4|V=82708>:50:?!54m38:=6s|4`:94?4|V=83708>:50;?!54m38:>6s|4`494?4|V=8=708>:505?!54m38:?6s|4`794?4|V=8>708>:506?!54m38:86s|4`694?4|V=8?708>:507?!54m38:96s|4`194?4|V=88708>:500?!54m38::6s|4`094?4|V=89708>:501?!54m38:;6s|4`394?4|V=8:708>:502?!54m38:46s|4`294?4|V=8;708>:503?!54m38:n6s|48d94?4|V=;m708>:53e?!54m38:o6s|48g94?4|V=;n708>:53f?!54m38:h6s|48f94?4|V=;o708>:53g?!54m38:i6s|48`94?4|V=;i708>:53a?!54m38:j6s|48c94?4|V=;j708>:53b?!54m389<6s|48;94?4|V=;2708>:53:?!54m389=6s|48:94?4|V=;3708>:53;?!54m389>6s|48594?4|V=;<708>:534?!54m389?6s|48494?4|V=;=708>:535?!54m38986s|48794?4|V=;>708>:536?!54m389:6s|48694?4|V=;?708>:537?!54m389;6s|48194?4|V=;8708>:530?!54m38946s|48094?4|V=;9708>:531?!54m38956s|48294?4|V=;;708>:533?!54m389m6s|49d94?4|V=:m708>:52e?!54m389n6s|49g94?4|V=:n708>:52f?!54m389o6s|49f94?4|V=:o708>:52g?!54m389h6s|49a94?4|V=:h708>:52`?!54m389i6s|49`94?4|V=:i708>:52a?!54m389j6s|49c94?4|V=:j708>:52b?!54m388=6s|49;94?4|V=:2708>:52:?!54m388>6s|49:94?4|V=:3708>:52;?!54m388?6s|49594?4|V=:<708>:524?!54m38886s|49794?4|V=:>708>:526?!54m38896s|49694?4|V=:?708>:527?!54m388:6s|49194?4|V=:8708>:520?!54m388;6s|49094?4|V=:9708>:521?!54m38846s|49394?4|V=::708>:522?!54m38856s|49294?4|V=:;708>:523?!54m388m6s|46d94?4|V:lm708>:2de?!54m388o6s|46g94?4|V:l=708>:2d5?!54m388h6s|46694?4|V:oi708>:2ga?!54m388i6s|47;94?4|V:o;708>:2g3?!54m388j6s|4eg94?4|V=?8708>:570?!54m38?<6s|4e194?4|V=>3708>:56;?!54m38?=6s|4b:94?4|V=9o708>:51g?!54m38?>6s|4cf94?4|V=99708>:511?!54m38??6s|4c094?4|V=8<708>:504?!54m38?86s|4`594?4|V=;h708>:53`?!54m38?96s|48a94?4|V=;:708>:532?!54m38?;6s|48394?4|V=:=708>:525?!54m38?46s|49494?4|V:nm708>:2fe?!54m38?56s|44g94?4|V:nn708>:2ff?!54m38?m6s|5cd94?4|V<>;708>:463?!54m38?n6s|5cf94?4|V<9m708>:41e?!54m38?o6s|5ca94?4|V<9n708>:41f?!54m38?h6s|5c`94?4|V<9o708>:41g?!54m38?i6s|5cc94?4|V<9h708>:41`?!54m38?j6s|5c;94?4|V<9i708>:41a?!54m38><6s|5c:94?4|V<9j708>:41b?!54m38>>6s|5c594?4|V<92708>:41:?!54m38>?6s|5c794?4|V<9<708>:414?!54m38>86s|5c694?4|V<9=708>:415?!54m38>96s|5c194?4|V<9>708>:416?!54m38>:6s|5c094?4|V<9?708>:417?!54m38>;6s|5c394?4|V<98708>:410?!54m38>46s|5c294?4|V<99708>:411?!54m38>56s|5`d94?4|V<9:708>:412?!54m38>m6s|5`g94?4|V<9;708>:413?!54m38>n6s|5`f94?4|V<8m708>:40e?!54m38>h6s|5`a94?4|V<8n708>:40f?!54m38>i6s|5`c94?4|V<8h708>:40`?!54m38>j6s|5`;94?4|V<8i708>:40a?!54m38=<6s|5`:94?4|V<8j708>:40b?!54m38==6s|5`594?4|V<82708>:40:?!54m38=>6s|5`494?4|V<83708>:40;?!54m38=?6s|5`794?4|V<8<708>:404?!54m38=86s|5`694?4|V<8=708>:405?!54m38=96s|5`194?4|V<8>708>:406?!54m38=:6s|5`094?4|V<8?708>:407?!54m38=46s|5`394?4|V<88708>:400?!54m38=56s|60d94?4|V<3m708>:4;e?!54m38=m6s|60g94?4|V<3n708>:4;f?!54m38=n6s|60f94?4|V<3o708>:4;g?!54m38=o6s|60a94?4|V<3h708>:4;`?!54m38=h6s|60`94?4|V<3i708>:4;a?!54m38=i6s|60c94?4|V<3j708>:4;b?!54m38=j6s|60;94?4|V<32708>:4;:?!54m38<<6s|60:94?4|V<33708>:4;;?!54m38<=6s|60594?4|V<3<708>:4;4?!54m38<?6s|60494?4|V<3=708>:4;5?!54m38<86s|60694?4|V<3?708>:4;7?!54m38<96s|60194?4|V<38708>:4;0?!54m38<:6s|60094?4|V<39708>:4;1?!54m38<;6s|60394?4|V<3:708>:4;2?!54m38<46s|60294?4|V<3;708>:4;3?!54m38<56s|61d94?4|V<2m708>:4:e?!54m38<m6s|61g94?4|V<2n708>:4:f?!54m38<n6s|61f94?4|V<2o708>:4:g?!54m38<o6s|61a94?4|V<2h708>:4:`?!54m38<i6s|61`94?4|V<2i708>:4:a?!54m38<j6s|61;94?4|V<22708>:4::?!54m383<6s|61:94?4|V<23708>:4:;?!54m383=6s|61594?4|V<2<708>:4:4?!54m383>6s|61494?4|V<2=708>:4:5?!54m383?6s|61794?4|V<2>708>:4:6?!54m38386s|61694?4|V<2?708>:4:7?!54m38396s|61194?4|V<28708>:4:0?!54m383:6s|61094?4|V<29708>:4:1?!54m383;6s|61394?4|V<2:708>:4:2?!54m38356s|61294?4|V<2;708>:4:3?!54m383m6s|5gg94?4|V<=n708>:45f?!54m383n6s|5gf94?4|V<=o708>:45g?!54m383o6s|5ga94?4|V<=h708>:45`?!54m383h6s|5g`94?4|V<=i708>:45a?!54m383i6s|5gc94?4|V<=j708>:45b?!54m383j6s|5g;94?4|V<=2708>:45:?!54m382<6s|5g:94?4|V<=3708>:45;?!54m382=6s|5g594?4|V<=<708>:454?!54m382>6s|5g494?4|V<==708>:455?!54m38286s|5g794?4|V<=>708>:456?!54m38296s|5g194?4|V<=8708>:450?!54m382:6s|5g094?4|V<=9708>:451?!54m382;6s|5g394?4|V<=:708>:452?!54m38246s|5g294?4|V<=;708>:453?!54m38256s|5dd94?4|V<<m708>:44e?!54m382m6s|5dg94?4|V<<n708>:44f?!54m382n6s|5df94?4|V<<o708>:44g?!54m382o6s|5da94?4|V<<h708>:44`?!54m382h6s|5d`94?4|V<<i708>:44a?!54m382j6s|5dc94?4|V<<j708>:44b?!54m38j<6s|5d:94?4|V<<3708>:44;?!54m38j=6s|5d594?4|V<<<708>:444?!54m38j>6s|5d494?4|V<<=708>:445?!54m38j?6s|5d794?4|V<<>708>:446?!54m38j86s|5d694?4|V<<?708>:447?!54m38j96s|5d194?4|V<<8708>:440?!54m38j:6s|5d094?4|V<<9708>:441?!54m38j;6s|5d394?4|V<<:708>:442?!54m38j46s|5d294?4|V<<;708>:443?!54m38jm6s|5ed94?4|V<?m708>:47e?!54m38jn6s|5ef94?4|V<?o708>:47g?!54m38jo6s|5ea94?4|V<?h708>:47`?!54m38jh6s|5e`94?4|V<?i708>:47a?!54m38ji6s|5ec94?4|V<?j708>:47b?!54m38jj6s|5e;94?4|V<?2708>:47:?!54m38i<6s|5e:94?4|V<?3708>:47;?!54m38i=6s|5e594?4|V<?<708>:474?!54m38i>6s|5e494?4|V<?=708>:475?!54m38i?6s|5e794?4|V<?>708>:476?!54m38i96s|5e694?4|V<??708>:477?!54m38i:6s|5e094?4|V<?9708>:471?!54m38i;6s|5e394?4|V<?:708>:472?!54m38i46s|5e294?4|V<?;708>:473?!54m38i56s|5bd94?4|V<>m708>:46e?!54m38im6s|5bg94?4|V<>n708>:46f?!54m38in6s|5bf94?4|V<>o708>:46g?!54m38io6s|5ba94?4|V<>h708>:46`?!54m38ih6s|5b`94?4|V<>i708>:46a?!54m38ii6s|5bc94?4|V<>j708>:46b?!54m38h<6s|5b;94?4|V<>2708>:46:?!54m38h=6s|5b594?4|V<><708>:464?!54m38h>6s|5b494?4|V<>=708>:465?!54m38h?6s|5b794?4|V<>>708>:466?!54m38h86s|5b694?4|V<>?708>:467?!54m38h96s|5b194?4|V<>8708>:460?!54m38h:6s|5b094?4|V<>9708>:461?!54m38h;6s|5b394?4|V<>:708>:462?!54m38h46s|5b294?4|V<93708>:41;?!54m38h56s|5c494?4|V<8o708>:40g?!54m38hn6s|5``94?4|V<89708>:401?!54m38ho6s|63294?4|V<3>708>:4;6?!54m38hh6s|60794?4|V<2j708>:4:b?!54m38hi6s|61c94?4|V<=m708>:45e?!54m38hj6s|5gd94?4|V<=?708>:457?!54m38o<6s|5g694?4|V<<2708>:44:?!54m38o=6s|5d;94?4|V<?n708>:47f?!54m38o>6s|5eg94?4|V<?8708>:470?!54m38o?6s|5e194?4|V<>3708>:46;?!54m38o86s|5b:94?4|V<8:708>:402?!54m38o:6s|5`294?4|V<8;708>:403?!54m38o;6srn95a>5<5sA98j6sa86a94?4|@:9m7p`77e83>7}O;:l0qc68e;296~N4;o1vb59i:181M54n2we45>50;0xL65a3td34<4?:3yK76`<ug23>7>52zJ07c=zf1286=4={I10b>{i01>1<7<tH21e?xh?0<0;6?uG32d8yk>?>3:1>vF<3g9~j=>02909wE=<f:m<=>=838pD>=i;|l;<<<72;qC?>h4}o:;e?6=:rB8?k5rn9:a>5<5sA98j6sa89a94?4|@:9m7p`78e83>7}O;:l0qc67e;296~N4;o1vb56i:181M54n2we44>50;0xL65a3td35<4?:3yK76`<ug22>7>52zJ07c=zf1386=4={I10b>{i00>1<7<tH21e?xh?1<0;6?uG32d8yk>>>3:1>vF<3g9~j=?02909wE=<f:m<<>=838pD>=i;|l;=<<72;qC?>h4}o::e?6=:rB8?k5rn9;a>5<5sA98j6sa88a94?4|@:9m7p`79e83>7}O;:l0qc66e;296~N4;o1vb57i:181M54n2we4l>50;0xL65a3td3m<4?:3yK76`<ug2j>7>52zJ07c=zf1k86=4={I10b>{i0h>1<7<tH21e?xh?i<0;6?uG32d8yk>f>3:1>vF<3g9~j=g02909wE=<f:m<d>=838pD>=i;|l;e<<72;qC?>h4}o:be?6=:rB8?k5rn9ca>5<5sA98j6sa8`a94?4|@:9m7p`7ae83>7}O;:l0qc6ne;296~N4;o1vb5oi:181M54n2we4o>50;0xL65a3td3n<4?:3yK76`<ug2i>7>52zJ07c=zf1h86=4={I10b>{i0k>1<7<tH21e?xh?j<0;6?uG32d8yk>e>3:1>vF<3g9~j=d02909wE=<f:m<g>=838pD>=i;|l;f<<72;qC?>h4}o:ae?6=:rB8?k5rn9`a>5<5sA98j6sa8ca94?4|@:9m7p`7be83>7}O;:l0qc6me;296~N4;o1vb5li:181M54n2we4n>50;0xL65a3td3o<4?:3yK76`<ug2h>7>52zJ07c=zf1i86=4={I10b>{i0j>1<7<tH21e?xh?k<0;6?uG32d8yk>d>3:1>vF<3g9~j=e02909wE=<f:m<f>=838pD>=i;|l;g<<72;qC?>h4}o:`e?6=:rB8?k5rn9aa>5<5sA98j6sa8ba94?4|@:9m7p`7ce83>7}O;:l0qc6le;296~N4;o1vb5mi:181M54n2we4i>50;0xL65a3td3h<4?:3yK76`<ug2o>7>52zJ07c=zf1n86=4={I10b>{i0m>1<7<tH21e?xh?l<0;6?uG32d8yk>c>3:1>vF<3g9~j=b02909wE=<f:m<a>=838pD>=i;|l;`<<72;qC?>h4}o:ge?6=:rB8?k5rn9fa>5<5sA98j6sa8ea94?4|@:9m7p`7de83>7}O;:l0qc6ke;296~N4;o1vb5ji:181M54n2we4h>50;0xL65a3td3i<4?:3yK76`<ug2n>7>52zJ07c=zf1o86=4={I10b>{i0l>1<7<tH21e?xh?m<0;6?uG32d8yk>b>3:1>vF<3g9~j=c02909wE=<f:m<`>=838pD>=i;|l;a<<72;qC?>h4}o:fe?6=:rB8?k5rn9ga>5<5sA98j6sa8da94?4|@:9m7p`7ee83>7}O;:l0qc6je;296~N4;o1vb5ki:181M54n2we4k>50;0xL65a3td3j<4?:3yK76`<ug2m>7>52zJ07c=zf1l86=4={I10b>{i0o>1<7<tH21e?xh?n<0;6?uG32d8yk>a>3:1>vF<3g9~j=`02909wE=<f:m<c>=838pD>=i;|l;b<<72;qC?>h4}o:ee?6=:rB8?k5rn9da>5<5sA98j6sa8ga94?4|@:9m7p`7fe83>7}O;:l0qc6ie;296~N4;o1vb5hi:181M54n2we5=>50;0xL65a3td2<<4?:3yK76`<ug3;>7>52zJ07c=zf0:86=4={I10b>{i19>1<7<tH21e?xh>8<0;6?uG32d8yk?7>3:1>vF<3g9~j<602909wE=<f:m=5>=838pD>=i;|l:4<<72;qC?>h4}o;3e?6=:rB8?k5rn82a>5<5sA98j6sa91a94?4|@:9m7p`60e83>7}O;:l0qc7?e;296~N4;o1vb4>i:181M54n2we5<>50;0xL65a3td2=<4?:3yK76`<ug3:>7>52zJ07c=zf0;86=4={I10b>{i18>1<7<tH21e?xh>9<0;6?uG32d8yk?6>3:1>vF<3g9~j<702909wE=<f:m=4>=838pD>=i;|l:5<<72;qC?>h4}o;2e?6=:rB8?k5rn83a>5<5sA98j6sa90a94?4|@:9m7p`61e83>7}O;:l0qc7>e;296~N4;o1vb4?i:181M54n2we5?>50;0xL65a3td2><4?:3yK76`<ug39>7>52zJ07c=zf0886=4={I10b>{i1;>1<7<tH21e?xh>:<0;6?uG32d8yk?5>3:1>vF<3g9~j<402909wE=<f:m=7>=838pD>=i;|l:6<<72;qC?>h4}o;1e?6=:rB8?k5rn80a>5<5sA98j6sa93a94?4|@:9m7p`62e83>7}O;:l0qc7=e;296~N4;o1vb4<i:181M54n2we5>>50;0xL65a3td2?<4?:3yK76`<ug38>7>52zJ07c=zf0986=4={I10b>{i1:>1<7<tH21e?xh>;<0;6?uG32d8yk?4>3:1>vF<3g9~j<502909wE=<f:m=6>=838pD>=i;|l:7<<72;qC?>h4}o;0e?6=:rB8?k5rn81a>5<5sA98j6sa92a94?4|@:9m7p`63e83>7}O;:l0qc7<e;296~N4;o1vb4=i:181M54n2we59>50;0xL65a3td28<4?:3yK76`<ug3?>7>52zJ07c=zf0>86=4={I10b>{i1=>1<7<tH21e?xh><<0;6?uG32d8yk?3>3:1>vF<3g9~j<202909wE=<f:m=1>=838pD>=i;|l:0<<72;qC?>h4}o;7e?6=:rB8?k5rn86a>5<5sA98j6sa95a94?4|@:9m7p`64e83>7}O;:l0qc7;e;296~N4;o1vb4:i:181M54n2we58>50;0xL65a3td29<4?:3yK76`<ug3>>7>52zJ07c=zf0?86=4={I10b>{i1<>1<7<tH21e?xh>=<0;6?uG32d8yk?2>3:1>vF<3g9~j<302909wE=<f:m=0>=838pD>=i;|l:1<<72;qC?>h4}o;6e?6=:rB8?k5rn87a>5<5sA98j6sa94a94?4|@:9m7p`65e83>7}O;:l0qc7:e;296~N4;o1vb4;i:181M54n2we5;>50;0xL65a3td2:<4?:3yK76`<ug3=>7>52zJ07c=zf0<86=4={I10b>{i1?>1<7<tH21e?xh>><0;6?uG32d8yk?1>3:1>vF<3g9~j<002909wE=<f:m=3>=838pD>=i;|l:2<<72;qC?>h4}o;5e?6=:rB8?k5rn84a>5<5sA98j6sa97a94?4|@:9m7p`66e83>7}O;:l0qc79e;296~N4;o1vb48i:181M54n2we5:>50;0xL65a3td2;<4?:3yK76`<ug3<>7>52zJ07c=zf0=86=4={I10b>{i1>>1<7<tH21e?xh>?<0;6?uG32d8yk?0>3:1>vF<3g9~j<102909wE=<f:m=2>=838pD>=i;|l:3<<72;qC?>h4}o;4e?6=:rB8?k5rn85a>5<5sA98j6sa96a94?4|@:9m7p`67e83>7}O;:l0qc78e;296~N4;o1vb49i:181M54n2we55>50;0xL65a3td24<4?:3yK76`<ug33>7>52zJ07c=zf0286=4={I10b>{i11>1<7<tH21e?xh>0<0;6?uG32d8yk??>3:1>vF<3g9~j<>02909wE=<f:m==>=838pD>=i;|l:<<<72;qC?>h4}o;;e?6=:rB8?k5rn8:a>5<5sA98j6sa99a94?4|@:9m7p`68e83>7}O;:l0qc77e;296~N4;o1vb46i:181M54n2we54>50;0xL65a3td25<4?:3yK76`<ug32>7>52zJ07c=zf0386=4={I10b>{i10>1<7<tH21e?xh>1<0;6?uG32d8yk?>>3:1>vF<3g9~j<?02909wE=<f:m=<>=838pD>=i;|l:=<<72;qC?>h4}o;:e?6=:rB8?k5rn8;a>5<5sA98j6sa98a94?4|@:9m7p`69e83>7}O;:l0qc76e;296~N4;o1vb47i:181M54n2we5l>50;0xL65a3td2m<4?:3yK76`<ug3j>7>52zJ07c=zf0k86=4={I10b>{i1h>1<7<tH21e?xh>i<0;6?uG32d8yk?f>3:1>vF<3g9~j<g02909wE=<f:m=d>=838pD>=i;|l:e<<72;qC?>h4}o;be?6=:rB8?k5rn8ca>5<5sA98j6sa9`a94?4|@:9m7p`6ae83>7}O;:l0qc7ne;296~N4;o1vb4oi:181M54n2we5o>50;0xL65a3td2n<4?:3yK76`<ug3i>7>52zJ07c=zf0h86=4={I10b>{i1k>1<7<tH21e?xh>j<0;6?uG32d8yk?e>3:1>vF<3g9~j<d02909wE=<f:m=g>=838pD>=i;|l:f<<72;qC?>h4}o;ae?6=:rB8?k5rn8`a>5<5sA98j6sa9ca94?4|@:9m7p`6be83>7}O;:l0qc7me;296~N4;o1vb4li:181M54n2we5n>50;0xL65a3td2o<4?:3yK76`<ug3h>7>52zJ07c=zf0i86=4={I10b>{i1j>1<7<tH21e?xh>k<0;6?uG32d8yk?d>3:1>vF<3g9~j<e02909wE=<f:m=f>=838pD>=i;|l:g<<72;qC?>h4}o;`e?6=:rB8?k5rn8aa>5<5sA98j6sa9ba94?4|@:9m7p`6ce83>7}O;:l0qc7le;296~N4;o1vb4mi:181M54n2we5i>50;0xL65a3td2h<4?:3yK76`<ug3o>7>52zJ07c=zf0n86=4={I10b>{i1m>1<7<tH21e?xh>l<0;6?uG32d8yk?c>3:1>vF<3g9~j<b02909wE=<f:m=a>=838pD>=i;|l:`<<72;qC?>h4}o;ge?6=:rB8?k5rn8fa>5<5sA98j6sa9ea94?4|@:9m7p`6de83>7}O;:l0qc7ke;296~N4;o1vb4ji:181M54n2we5h>50;0xL65a3td2i<4?:3yK76`<ug3n>7>52zJ07c=zf0o86=4={I10b>{i1l>1<7<tH21e?xh>m<0;6?uG32d8yk?b>3:1>vF<3g9~j<c02909wE=<f:m=`>=838pD>=i;|l44f<728qC?>h4}|~DEE|j<21j9kj51f6yEFEs9wKL]ur@A
/ml501/sim/bin/Makefile
144,15 → 144,15
 
# BootROM code, which generates a verilog array select values
BOOTROM_FILE=bootrom.v
BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom
BOOTROM_SRC=$(shell ls $(BOOTROM_SW_DIR)/* | grep -v $(BOOTROM_FILE))
BOOTROM_VERILOG=$(BOOTROM_SW_DIR)/$(BOOTROM_FILE)
BOARD_BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom
BOOTROM_SRC=$(shell ls $(BOARD_BOOTROM_SW_DIR)/* | grep -v $(BOOTROM_FILE))
BOOTROM_VERILOG=$(BOARD_BOOTROM_SW_DIR)/$(BOOTROM_FILE)
 
bootrom: $(BOOTROM_VERILOG)
 
$(BOOTROM_VERILOG): $(BOOTROM_SRC)
$(Q)echo; echo "\t### Generating bootup ROM ###"; echo
$(Q)$(MAKE) -C $(BOOTROM_SW_DIR) $(BOOTROM_FILE)
$(Q)$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) $(BOOTROM_FILE)
 
# Suffix of file to check after each test for the string
TEST_OUT_FILE_SUFFIX=-general.log
161,6 → 161,7
# Dynamically generated verilog file defining configuration for various things
# Rule actually generating this is found in definesgen.inc file.
TEST_DEFINES_VLG=test-defines.v
.PHONY: $(TEST_DEFINES_VLG)
# Set V=1 when calling make to enable verbose output
# mainly for debugging purposes.
ifeq ($(V), 1)
355,7 → 356,7
# DUT compile script
modelsim_dut.scr: rtl $(RTL_VERILOG_SRC) $(RTL_VERILOG_INCLUDES) $(BOOTROM_VERILOG)
$(Q)echo "+incdir+"$(BOARD_RTL_VERILOG_INCLUDE_DIR) > $@;
$(Q)echo "+incdir+"$(BOOTROM_SW_DIR) >> $@;
$(Q)echo "+incdir+"$(BOARD_BOOTROM_SW_DIR) >> $@;
$(Q)echo "+incdir+"$(BOARD_BENCH_VERILOG_INCLUDE_DIR) >> $@;
$(Q)echo "+libext+.v" >> $@;
$(Q)for module in $(BOARD_RTL_VERILOG_MODULES); do if [ -d $(BOARD_RTL_VERILOG_DIR)/$$module ]; then echo "-y " $(BOARD_RTL_VERILOG_DIR)/$$module >> $@; fi; done
473,6 → 474,9
SIM_SW_IMAGE ?=flash.in
endif
 
# Amount to pad the image we'll load into the SPI flash
HEX_IMAGE_PADDING ?=0x1c0000
 
.PHONY : sw
sw: $(SIM_SW_IMAGE)
 
488,7 → 492,8
.PHONY: $(SW_TEST_DIR)/$(TEST).flashin
$(SW_TEST_DIR)/$(TEST).flashin:
$(Q) echo; echo "\t### Compiling software ###"; echo;
$(Q)$(MAKE) -C $(SW_TEST_DIR) $(TEST).flashin
$(Q)$(MAKE) -C $(SW_TEST_DIR) $(TEST).flashin \
HEX_IMAGE_PADDING=$(HEX_IMAGE_PADDING)
 
.PHONY: $(SW_TEST_DIR)/$(TEST).vmem
$(SW_TEST_DIR)/$(TEST).vmem:
514,7 → 519,7
# No VPI support for now. $(Q) if [ -e $(VPI_SRC_C_DIR) ]; then $(MAKE) -C $(VPI_SRC_C_DIR) clean; fi
 
clean-bootrom:
$(MAKE) -C $(BOOTROM_SW_DIR) clean
$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) clean
 
clean-out:
$(Q)rm -rf $(RTL_SIM_RESULTS_DIR)/*.*
/ml501/sw/board/include/board.h
16,11 → 16,18
// file, which is compiled and converted into Verilog for inclusion at
// synthesis time. See bootloader/bootloader.S for details on each option.
 
//#define BOOTROM_SPI_FLASH
#define BOOTROM_GOTO_RESET
#define BOOTROM_SPI_FLASH
//#define BOOTROM_GOTO_RESET
//#define BOOTROM_LOOP_AT_ZERO
//#define BOOTROM_LOOP_IN_ROM
 
// Address bootloader should start from in FLASH
#define BOOTROM_ADDR_BYTE2 0x1c
#define BOOTROM_ADDR_BYTE1 0x00
#define BOOTROM_ADDR_BYTE0 0x00
// Causes SPI bootloader to loop if SPI didn't give correct size of image
#define SPI_RETRY_IF_INSANE_SIZEWORD
 
//
// Defines for each core (memory map base, OR1200 interrupt line number, etc.)
//
/ml501/syn/timescale.v File deleted
/ml501/syn/ml501_ddr2_wb_if_cache.ngc File deleted \ No newline at end of file
/ml501/syn/ml501.xcf File deleted
/ml501/syn/Makefile File deleted \ No newline at end of file
/ml501/syn/xst/run/Makefile
0,0 → 1,2
include ../bin/Makefile
 
/ml501/syn/xst/bin/Makefile
0,0 → 1,301
######################################################################
#### ####
#### ORPSoC Xilinx Synthesis Makefile ####
#### ####
#### Author(s): ####
#### - Julius Baxter, julius@opencores.org ####
#### ####
#### ####
######################################################################
#### ####
#### Copyright (C) 2009,2010 Authors and OPENCORES.ORG ####
#### ####
#### 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 ####
#### ####
######################################################################
 
# Name of the directory we're currently in
CUR_DIR=$(shell pwd)
 
# The root path of the board build
BOARD_DIR ?=$(CUR_DIR)/../../..
PROJECT_ROOT=$(BOARD_DIR)/../../..
 
DESIGN_NAME=orpsoc
 
SYN_DIR=$(BOARD_DIR)/syn/xst
SYN_RUN_DIR=$(SYN_DIR)/run
 
# Paths to other important parts of this test suite
COMMON_RTL_DIR = $(PROJECT_ROOT)/rtl
COMMON_RTL_VERILOG_DIR = $(COMMON_RTL_DIR)/verilog
#COMMON_RTL_VHDL_DIR = $(COMMON_RTL_DIR)/vhdl
 
BOARD_RTL_DIR=$(BOARD_DIR)/rtl
BOARD_RTL_VERILOG_DIR=$(BOARD_RTL_DIR)/verilog
# Only 1 include path for board builds - their own!
BOARD_RTL_VERILOG_INCLUDE_DIR=$(BOARD_RTL_VERILOG_DIR)/include
BOARD_DESIGN_VERILOG_DEFINES=$(BOARD_RTL_VERILOG_INCLUDE_DIR)/$(DESIGN_NAME)-defines.v
#BOARD_RTL_VHDL_DIR = $(BOARD_RTL_DIR)/vhdl
 
BACKEND_DIR=$(BOARD_DIR)/backend
BACKEND_BIN_DIR=$(BACKEND_DIR)/bin
 
# Set V=1 when calling make to enable verbose output
# mainly for debugging purposes.
ifeq ($(V), 1)
Q=
else
Q ?=@
endif
 
 
DEFINES_FILE_CUTOFF=$(shell grep -n "end of included module defines" $(BOARD_DESIGN_VERILOG_DEFINES) | cut -d ':' -f 1)
DESIGN_DEFINES=$(shell cat $(BOARD_DESIGN_VERILOG_DEFINES) | sed s://.*::g | sed s:\`:\#:g | sed 's:^[ ]*::' | awk '{print};/^\#define/{printf "_%s=%s\n",$$2,$$2}' | grep -v PERIOD | cpp -P | sed s:^_::g | sed s:=$$::g )
# Rule to look at what defines are being extracted from main file
print-defines:
@echo; echo "\t### Design defines ###"; echo
@echo "\tParsing "$(BOARD_DESIGN_VERILOG_DEFINES)" and exporting:"
@echo $(DESIGN_DEFINES)
 
 
# Backend tool path
# Check that the XILINX_PATH variable is set
ifeq ($(XILINX_PATH),)
$(error XILINX_PATH environment variable not set. Set it and rerun)
endif
XILINX_SETTINGS_SCRIPT=$(XILINX_PATH)/settings32.sh
XILINX_SETTINGS_SCRIPT_EXISTS=$(shell if [ -e $(XILINX_SETTINGS_SCRIPT) ]; then echo 1; else echo 0; fi)
ifeq ($(XILINX_SETTINGS_SCRIPT_EXISTS),0)
$(error XILINX_PATH variable not set correctly. Cannot find $$XILINX_PATH/settings32.sh)
endif
 
#
# Verilog DUT source variables
#
# First we get a list of modules in the RTL path of the board's path.
# Next we check which modules not in the board's RTL path are in the root RTL
# path (modules which can be commonly instantiated, but over which board
# build-specific versions take precedence.)
 
# Paths under board/***/rtl/verilog we wish to exclude when getting modules
BOARD_VERILOG_MODULES_EXCLUDE= include
BOARD_VERILOG_MODULES_DIR_LIST=$(shell ls $(BOARD_RTL_VERILOG_DIR))
# Apply exclude to list of modules
BOARD_RTL_VERILOG_MODULES=$(filter-out $(BOARD_VERILOG_MODULES_EXCLUDE),$(BOARD_VERILOG_MODULES_DIR_LIST))
 
# Rule for debugging this script
print-board-modules:
$(Q)echo echo; echo "\t### Board verilog modules ###"; echo;
$(Q)echo $(BOARD_RTL_VERILOG_MODULES)
 
# Now get list of modules that we don't have a version of in the board path
# List others that cause clahes (ie. source listed, due to utterly pathetic XST
# not supporting ability to specify search paths, and requiring includes but
# not used in this board build, hence its includes are not there and result
# in error.)
COMMON_VERILOG_MODULES_EXCLUDE= include usbhostslave
COMMON_VERILOG_MODULES_EXCLUDE += $(BOARD_RTL_VERILOG_MODULES)
 
COMMON_RTL_VERILOG_MODULES_DIR_LIST=$(shell ls $(COMMON_RTL_VERILOG_DIR))
COMMON_RTL_VERILOG_MODULES=$(filter-out $(COMMON_VERILOG_MODULES_EXCLUDE), $(COMMON_RTL_VERILOG_MODULES_DIR_LIST))
 
# Rule for debugging this script
print-common-modules-exclude:
$(Q)echo echo; echo "\t### Common verilog modules being excluded due to board versions ###"; echo;
$(Q)echo "$(COMMON_VERILOG_MODULES_EXCLUDE)"
 
print-common-modules:
$(Q)echo echo; echo "\t### Verilog modules from common RTL dir ###"; echo
$(Q)echo $(COMMON_RTL_VERILOG_MODULES)
 
# List of verilog source files (only .v files!)
# Board RTL modules first
VERILOG_SRC_PATHS=$(addprefix $(BOARD_RTL_VERILOG_DIR)/,$(BOARD_RTL_VERILOG_MODULES))
VERILOG_SRC_PATHS +=$(addprefix $(COMMON_RTL_VERILOG_DIR)/,$(COMMON_RTL_VERILOG_MODULES))
RTL_VERILOG_SRC=$(shell for modulepath in $(VERILOG_SRC_PATHS); do \
if [ -d $$modulepath ]; then \
ls $$modulepath/*.v; \
fi; done)
 
# List of verilog includes from board RTL path - only for rule sensitivity
RTL_VERILOG_INCLUDES=$(shell ls $(BOARD_RTL_VERILOG_INCLUDE_DIR)/*.*)
 
#
# VHDL DUT source variables
#
# VHDL modules
#RTL_VHDL_MODULES=$(shell ls $(RTL_VHDL_DIR))
# VHDL sources
#RTL_VHDL_SRC=$(shell for module in $(RTL_VHDL_MODULES); do if [ -d $(RTL_VHDL_DIR)/$$module ]; then ls $(RTL_VHDL_DIR)/$$module/*.vhd; fi; done)
 
 
#
# Dynamically created files included by different parts of the defines
#
 
BOARD_SW_DIR=$(BOARD_DIR)/sw
 
# BootROM code, which generates a verilog array select values
BOOTROM_FILE=bootrom.v
BOARD_BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom
BOOTROM_VERILOG=$(BOARD_BOOTROM_SW_DIR)/$(BOOTROM_FILE)
# Export BOARD_PATH for the software makefiles
BOARD_PATH=$(BOARD_DIR)
export BOARD_PATH
bootrom: $(BOOTROM_VERILOG)
$(BOOTROM_VERILOG):
$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) $(BOOTROM_FILE)
 
TIMESCALE_FILE=timescale.v
SYNDIR_TIMESCALE_FILE=$(SYN_RUN_DIR)/$(TIMESCALE_FILE)
$(SYNDIR_TIMESCALE_FILE):
$(Q)echo "" > $@
 
SYN_VERILOG_DEFINES=synthesis-defines.v
SYNDIR_SYN_VERILOG_DEFINES=$(SYN_RUN_DIR)/$(SYN_VERILOG_DEFINES)
$(SYNDIR_SYN_VERILOG_DEFINES):
$(Q)echo "\`define SYNTHESIS" > $@
$(Q)echo "\`define XILINX" >> $@
$(Q)echo "" >> $@
 
GENERATED_DEFINES = $(BOOTROM_VERILOG)
GENERATED_DEFINES += $(SYNDIR_TIMESCALE_FILE)
GENERATED_DEFINES += $(SYNDIR_SYN_VERILOG_DEFINES)
 
 
FPGA_PART ?=xc5vlx50-ff676-1
OPT_MODE ?=Speed
OPT_LEVEL ?=2
 
 
XILINX_FLAGS ?=-intstyle silent
XILINX_XST_FLAGS ?= -power NO -glob_opt AllClockNets -write_timing_constraints NO -cross_clock_analysis NO -slice_utilization_ratio 100 -bram_utilization_ratio 100 -dsp_utilization_ratio 100 -safe_implementation No -fsm_style lut -ram_extract Yes -ram_style Auto -rom_extract Yes -rom_style Auto -auto_bram_packing NO -mux_extract YES -mux_style Auto -decoder_extract YES -priority_extract YES -shreg_extract YES -shift_extract YES -xor_collapse YES -resource_sharing YES -async_to_sync NO -use_dsp48 auto -iobuf YES -max_fanout 100000 -bufg 32 -register_duplication YES -equivalent_register_removal YES -register_balancing No -slice_packing YES -optimize_primitives NO -use_clock_enable Auto -use_sync_set Auto -use_sync_reset Auto -iob Auto -slice_utilization_ratio_maxmargin 5
 
XCF_FILE=$(DESIGN_NAME).xcf
XST_FILE=$(DESIGN_NAME).xst
PRJ_FILE=$(DESIGN_NAME).prj
NGC_FILE=$(DESIGN_NAME).ngc
NETLIST_FILE=$(DESIGN_NAME).v
 
XST_PRJ_FILE_SRC_DECLARE=verilog work
 
print-config:
$(Q)echo; echo "\t### Synthesis make configuration ###"; echo
$(Q)echo "\tFPGA_PART="$(FPGA_PART)
$(Q)echo "\tOPT_MODE="$(OPT_MODE)
$(Q)echo "\tOTP_LEVEL="$(OPT_LEVEL)
$(Q)echo "\tXILINX_XST_FLAGS="$(XILINX_XST_FLAGS)
$(Q)echo
 
all: $(NGC_FILE)
 
# Generate the .xst file
# See this page for information on options:
# http://www.xilinx.com/itp/xilinx4/data/docs/xst/command_line5.html
$(XST_FILE):
$(Q)echo; echo "\t#### Generating XST file ####"; echo
$(Q)echo "# XST Script for ORPSoC Synthesis" > $@
$(Q)echo "# This file is autogenerated - any changes will be overwritten" >> $@
$(Q)echo "# See the Makefile in syn/xst/bin to make changes" >> $@
$(Q)echo "run" >> $@
$(Q)echo "-ifn "$(PRJ_FILE) >> $@
$(Q)echo "-ifmt mixed" >> $@
$(Q)echo "-top "$(DESIGN_NAME)"_top" >> $@
$(Q)echo "-ofmt NGC" >> $@
$(Q)echo "-ofn "$(NGC_FILE) >> $@
$(Q)echo "-p "$(FPGA_PART) >> $@
$(Q)echo "-opt_level "$(OPT_LEVEL) >> $@
$(Q)echo "-opt_mode "$(OPT_MODE) >> $@
$(Q)echo "-uc "$(XCF_FILE) >> $@
# $(Q)echo "elaborate " >> $@
# $(Q)echo -n "-vlgpath \"" >> $@
# option missing from XST - wtf?! $(Q)for vlogpath in $(VERILOG_SRC_PATHS); do \
echo -n $$vlogpath" "; done >> $@
# $(Q)echo "\"" >> $@
$(Q)echo "-vlgincdir { "$(BOARD_RTL_VERILOG_INCLUDE_DIR)" "$(BOARD_BOOTROM_SW_DIR) " }" >> $@
$(Q)echo >> $@
 
# Generate Xilinx project (.prj) file
$(PRJ_FILE): $(RTL_VERILOG_SRC)
$(Q)echo; echo "\t#### Generating Xilinx PRJ file ####";
# $(Q)echo "# Autogenerated XST .prj file" > $@
# $(Q)echo "# Any changes will be written over." >> $@
$(Q)for file in $(RTL_VERILOG_SRC); do \
echo $(XST_PRJ_FILE_SRC_DECLARE) $$file >> $@ ; \
done
$(Q)echo >> $@
$(Q)echo
 
# Constraints file
$(XCF_FILE):
$(Q)echo; echo "\t#### Generating Xilinx PRJ file ####"; echo
$(Q)echo "# Autogenerated XST .prj file" > $@
$(Q)echo "#" >> $@
$(Q)echo "# Not much here, XST is smart enough to determine clocks through DCMs" >> $@
$(Q)echo "#" >> $@
$(Q)echo "# TODO: Potentially use the other XTAL for DDR RAM clocking" >> $@
$(Q)echo "#" >> $@
$(Q)echo "# 200MHz diff. XTAL used as main system clock" >> $@
$(Q)echo "NET \"sys_clk_in_p\" TNM_NET = \"sys_clk_in_p_grp\";" >> $@
$(Q)echo "NET \"sys_clk_in_n\" TNM_NET = \"sys_clk_in_n_grp\";" >> $@
$(Q)echo "TIMESPEC \"TS_sys_clk_in_p_grp\" = PERIOD \"sys_clk_in_p_grp\" 5 ns HIGH 50 %;" >> $@
$(Q)echo "TIMESPEC \"TS_sys_clk_in_n_grp\" = PERIOD \"sys_clk_in_n_grp\" 5 ns LOW 50 %;" >> $@
$(Q)echo "# 100 MHz user clock" >> $@
$(Q)echo "#NET \"sys_clk_in\" TNM_NET = \"sys_clk_in_grp\";" >> $@
$(Q)echo "#TIMESPEC \"TS_sys_clk_in\" = PERIOD \"sys_clk_in_grp\" 10 ns HIGH 50%;" >> $@
$(Q)echo "# Ignore the reset logic" >> $@
$(Q)echo "NET rst_n_pad_i* TIG;" >> $@
$(Q)echo "# SSRAM multicylce constraints:" >> $@
$(Q)echo "# Define the two clock domains as timespecs" >> $@
$(Q)echo "#NET dcm0_clkdv TNM_NET=\"wb_clk\";" >> $@
$(Q)echo "#TIMESPEC \"TS_wb_clk\" = PERIOD \"wb_clk\" 20 ns HIGH 10;" >> $@
$(Q)echo "#NET dcm0_clk0 TNM_NET = \"ssram_clk200\";" >> $@
$(Q)echo "#TIMESPEC \"TS_ssram_clk200\" = PERIOD \"ssram_clk200\" \"TS_wb_clk\" / 4;" >> $@
$(Q)echo "# Now define their relationship - logic should be configured so that there's" >> $@
$(Q)echo "# 1 WB cycle at all times before anything is sampled across domains" >> $@
$(Q)echo "#TIMESPEC \"TS_wb_clk_ssram_clk200\" = from \"wb_clk\" TO \"ssram_clk200\" 15 ns;" >> $@
$(Q)echo "#TIMESPEC \"TS_ssram_clk200_wb_clk\" = from \"ssram_clk200\" TO \"wb_clk\" 20 ns;" >> $@
 
# XST command
$(NGC_FILE): $(PRJ_FILE) $(XST_FILE) $(XCF_FILE) $(GENERATED_DEFINES)
$(Q)echo; echo "\t#### Running XST ####"; echo;
$(Q)(. $(XILINX_SETTINGS_SCRIPT) ; xst -ifn $(XST_FILE) $(XILINX_FLAGS) $(XST_FLAGS) )
$(Q)echo
 
# Netlist generation command
$(NETLIST_FILE): $(NGC_FILE)
$(Q)echo; echo "\t#### Generating verilog netlist ####"; echo;
$(Q)(. $(XILINX_SETTINGS_SCRIPT) ; \
netgen -sim -aka -dir . -ofmt verilog $< -w $@ )
 
 
clean:
$(Q)rm -rf *.* xst
 
clean-sw:
$(MAKE) -C $(PROJECT_ROOT)/sw/lib clean-all
 
clean-all: clean-sw clean
 
 
.PRECIOUS : $(NGC_FILE) $(XST_FILE) $(XCF_FILE)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.