#@ # #@ # Running dc_shell Version G-2012.06-SP2 for linux -- Aug 31, 2012 #@ # Date: Wed Nov 7 12:07:49 2012 #@ # Run by: borowcm@linux-test-64bit #@ source /opt/CAD/Synopsys/Current/syn/admin/setup/.synopsys_dc.setup #@ # -- Starting source /opt/CAD/Synopsys/Current/syn/admin/setup/.synopsys_dc.setup #@ # #@ # ".synopsys_dc.setup" Initialization File for #@ # #@ # Dc_Shell and Design_Analyzer #@ # #@ # The variables in this file define the behavior of many parts #@ # of the Synopsys Synthesis Tools. Upon installation, they should #@ # be reviewed and modified to fit your site's needs. Each engineer #@ # can have a .synopsys file in his/her home directory or current #@ # directory to override variable settings in this file. #@ # #@ # Each logical grouping of variables is commented as to their #@ # nature and effect on the Synthesis Commands. Examples of #@ # variable groups are the Compile Variable Group, which affects #@ # the designs produced by the COMPILE command, and the Schematic #@ # Variable Group, which affects the output of the create_schematic #@ # command. #@ # #@ # You can type "man _variables" in dc_shell or #@ # design_analyzer to get help about a group of variables. #@ # For instance, to get help about the "system" variable group, #@ # type "help system_variables". You can also type #@ # "man ", to get help on the that variable's #@ # group. #@ # #@ #@ # System variables #@ set sh_command_abbrev_mode "Anywhere" #@ set sh_continue_on_error "true" #@ update_app_var -default true sh_continue_on_error #@ set sh_enable_page_mode "true" #@ update_app_var -default true sh_enable_page_mode #@ set sh_source_uses_search_path "true" #@ update_app_var -default true sh_source_uses_search_path #@ if {$synopsys_program_name == "dc_shell"} { #@ set sh_new_variable_message "false" #@ update_app_var -default false sh_new_variable_message #@ } else { #@ set sh_new_variable_message "true" #@ update_app_var -default true sh_new_variable_message #@ } #@ #@ if {$synopsys_program_name == "dc_shell"} { #@ set html_log_enable "false" #@ set html_log_filename "default.html" #@ } #@ #@ if {$synopsys_program_name == "de_shell"} { #@ set de_log_html_filename "default.html" #@ } #@ #@ if { [string compare $dc_shell_mode "tcl"] == 0 } { #@ set sh_enable_line_editing "true" #@ set sh_line_editing_mode "emacs" #@ } #@ #@ if {$synopsys_program_name == "icc_shell"} { #@ if {"$sh_output_log_file" == ""} { #@ set sh_output_log_file "icc_output.txt" #@ } #@ #@ ## the variable sh_redirect_progress_messages only makes it possible #@ ## for some commands to redirect progress messages to the log file,thereby #@ ## bypassing the console and reducing the volume of messages on the console. #@ set sh_redirect_progress_messages true #@ } #@ #@ #@ # Suppress new variable messages for the following variables #@ array set auto_index {} #@ set auto_oldpath "" #@ #@ # Enable debug output on fatal #@ if { $sh_arch == "sparc" || $sh_arch == "sparcOS5" || $sh_arch == "sparc64" || $sh_arch == "hpux10" || $sh_arch == "hp700" || $sh_arch == "hp32" || $sh_arch == "hp64" || $sh_arch == "linux" } { #@ setenv SYNOPSYS_TRACE "" #@ } #@ #@ # #@ # Load the procedures which make up part of the user interface. #@ # #@ if { [string compare $dc_shell_mode "tcl"] == 0 } { #@ source $synopsys_root/auxx/syn/.dc_common_procs.tcl #@ source $synopsys_root/auxx/syn/.dc_procs.tcl #@ alias list_commands help #@ } #@ # -- Starting source /opt/CAD/Synopsys/Current/syn/auxx/syn/.dc_common_procs.tcl #@ ############################################################################## #@ # #@ # #@ # FILE: auxx/syn/.dc_common_procs.tcl #@ # #@ # ABSTRACT: These procedures are part of the PrimeTime and DC #@ # user interface. #@ # They are loaded by .synopsys_pt.setup and .synopsys_dc.setup. #@ # #@ ############################################################################## #@ # #@ # #@ #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: group_variable #@ # #@ # ABSTRACT: Add a variable to the specified variable group. #@ # This command is typically used by the system #@ # administrator only. #@ # #@ # Below the proc is the command which creates the command #@ # help information and semantic data for the argument. #@ # #@ # RETURNS: 1 if it is successful. #@ # error code if the variable does not exist. #@ # error code of the variable is already in the group. #@ # #@ # SYNTAX: group_variable group_name variable_name #@ # #@ ############################################################################## #@ # #@ #@ #@ proc group_variable { args } { #@ global _Variable_Groups #@ #@ parse_proc_arguments -args $args resarr #@ set group $resarr(group) #@ set var $resarr(variable_name) #@ #@ if { ![info exists _Variable_Groups($group)] } { #@ set _Variable_Groups($group) "" #@ } #@ #@ # Verify that var exists as a global variable #@ #@ set cmd "uplevel #0 \{info exists $var\}" #@ if { ![eval $cmd] } { #@ return -code error "Variable '$var' is not defined." #@ } #@ #@ # Only add it if it's not already there #@ #@ if { [lsearch $_Variable_Groups($group) $var] == -1 } { #@ lappend _Variable_Groups($group) $var #@ } #@ #@ return 1 #@ } #@ #@ define_proc_attributes group_variable -info "Add a variable to a variable group" -command_group "Builtins" -permanent -dont_abbrev -define_args { #@ {group "Variable group name" group} #@ {variable_name "Variable name" variable_name}} #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: print_variable_group #@ # #@ # ABSTRACT: Shows variables and their values defined in the given group. #@ #@ # #@ # Below the proc is the command which creates the command #@ # help information and semantic data for the argument. #@ # #@ # RETURNS: 1 if it is successful. #@ # error code of the variable group does not exist. #@ # #@ # SYNTAX: print_variable_group group_name #@ # #@ ############################################################################## #@ # #@ #@ proc print_variable_group { args } { #@ global _Variable_Groups #@ #@ parse_proc_arguments -args $args resarr #@ set group $resarr(group) #@ #@ if { [string compare $group "all"] == 0 } { #@ set cmd "uplevel #0 \{printvar\}" #@ return [eval $cmd] #@ } #@ #@ if { ![info exists _Variable_Groups($group)] } { #@ return -code error "Variable group '$group' does not exist." #@ } #@ #@ # Print out each global variable in the list. To be totally bulletproof, #@ # test that each variable in the group is still defined. If not, remove #@ # it from the list. #@ #@ foreach var [lsort $_Variable_Groups($group)] { #@ set cmd "uplevel #0 \{info exists $var\}" #@ if { ![eval $cmd] } { #@ # Remove it #@ set n [lsearch $_Variable_Groups($group) $var] #@ set $_Variable_Groups($group) [lreplace $_Variable_Groups($group) $n $n] #@ } else { #@ # Print it. #@ set cmd "uplevel #0 \{set $var\}" #@ set val [eval $cmd] #@ echo [format "%-25s = \"%s\"" $var $val] #@ } #@ } #@ #@ return 1 #@ } #@ #@ define_proc_attributes print_variable_group -info "Print the contents of a variable group" -command_group "Builtins" -permanent -define_args {{group "Variable group name" group}} #@ #@ #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: _Variable_Groups_Get_Groups #@ # #@ # ABSTRACT: Return a list of all variable groups. This command is hidden #@ # and is used by Design Vision. #@ # #@ # RETURNS: Tcl list of all variable groups including group all #@ # #@ # SYNTAX: _Variable_Groups_Get_Groups #@ ############################################################################## #@ # #@ #@ proc _Variable_Groups_Get_Groups { } { #@ global _Variable_Groups #@ #@ set groups [array names _Variable_Groups] #@ append groups " all" #@ return $groups #@ } #@ define_proc_attributes _Variable_Groups_Get_Groups -hidden #@ #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: _Variable_Groups_Get_Variables_Of_Group #@ # #@ # ABSTRACT: Return a list of all variables of a variable group. #@ # It also works for pseudo group all. #@ # #@ # RETURNS: Tcl list of all variables of a variable group including #@ # pseudo group all #@ # #@ # SYNTAX: _Variable_Groups_Get_Groups #@ ############################################################################## #@ # #@ #@ proc _Variable_Groups_Get_Variables_Of_Group { group } { #@ global _Variable_Groups #@ #@ if { [string compare $group "all"] == 0 } { #@ set itr [array startsearch _Variable_Groups] #@ for { } { [array anymore _Variable_Groups $itr]} { } { #@ set index [array nextelement _Variable_Groups $itr] #@ append vars $_Variable_Groups($index) #@ } #@ array donesearch _Variable_Groups $itr #@ return $vars #@ } #@ #@ if { ![info exists _Variable_Groups($group)] } { #@ return -code error "Variable group '$group' does not exist." #@ } #@ #@ # Test if all variables in the list of variables are still defined. #@ # Remove not existing variables. #@ foreach var [lsort $_Variable_Groups($group)] { #@ set cmd "uplevel #0 \{info exists $var\}" #@ if { ![eval $cmd] } { #@ # Remove it #@ set n [lsearch $_Variable_Groups($group) $var] #@ set $_Variable_Groups($group) [lreplace $_Variable_Groups($group) $n $n] #@ } #@ } #@ return $_Variable_Groups($group) #@ } #@ define_proc_attributes _Variable_Groups_Get_Variables_Of_Group -hidden #@ #@ # -- End source /opt/CAD/Synopsys/Current/syn/auxx/syn/.dc_common_procs.tcl #@ # -- Starting source /opt/CAD/Synopsys/Current/syn/auxx/syn/.dc_procs.tcl #@ ############################################################################## #@ # #@ # #@ # FILE: auxx/syn/.dc_procs.tcl #@ # #@ # ABSTRACT: These procedures are part of the Design Compiler Tcl #@ # user interface. #@ # They are loaded by .synopsys_dc.setup. #@ # #@ ############################################################################## #@ # #@ # #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: read_verilog #@ # #@ # ABSTRACT: Emulate PT's read_verilog command in DC: #@ # #@ # Usage: read_verilog # Read one or more verilog files #@ # *[-hdl_compiler] (Use HDL Compiler (ignored)) #@ # file_names (Files to read) #@ # #@ # Modified: Bharat 11/17/99. Use uplevel to ensure that the command #@ # sees user/hidden variables from the top level. Star 92970. #@ # #@ # Modified: Evan Rosser, 12/5/01. Support -netlist and -rtl flags. #@ # #@ ############################################################################## #@ # #@ #@ if { $synopsys_program_name != "icc_shell" } { #@ proc read_verilog { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {read_file -format verilog %s %s [list %s]} [array names ra -rtl] [array names ra -netlist] $ra(file_names)] #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes read_verilog -info " Read one or more verilog files" -permanent -define_args { #@ {file_names "Files to read" file_names list required} #@ {-netlist "Use structural Verilog netlist reader" "" boolean optional} #@ {-rtl "Use RTL Verilog compiler (Presto or HDLC)" "" boolean optional} #@ {-hdl_compiler "Use HDL Compiler (ignored)" "" boolean {hidden optional}} #@ } #@ } #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: read_sverilog #@ # #@ # ABSTRACT: Emulate PT's read_sverilog command in DC: #@ # #@ # Usage: read_sverilog # Read one or more systemverilog files #@ # *[-hdl_compiler] (Use HDL Compiler (ignored)) #@ # file_names (Files to read) #@ # #@ # Modified: Yong Xiao, 01/31/2003: Copied from read_verilog to support #@ # systemverilog input. #@ # #@ ############################################################################## #@ # #@ #@ proc read_sverilog { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {read_file -format sverilog %s %s [list %s]} [array names ra -rtl] [array names ra -netlist] $ra(file_names)] #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes read_sverilog -info " Read one or more systemverilog files" -permanent -define_args { #@ {file_names "Files to read" file_names list required} #@ {-netlist "Use structural Verilog netlist reader" "" boolean optional} #@ {-rtl "Use RTL Systemverilog compiler (Presto or HDLC)" "" boolean optional} #@ {-hdl_compiler "Use HDL Compiler (ignored)" "" boolean {hidden optional}} #@ } #@ #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: read_vhdl #@ # #@ # ABSTRACT: Emulate PT's read_vhdl command in DC: #@ # #@ # Usage: read_vhdl # Read one or more vhdl files #@ # file_names (Files to read) #@ # #@ # #@ ############################################################################## #@ # #@ #@ proc read_vhdl { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {read_file -format vhdl %s [list %s]} [array names ra -netlist] $ra(file_names)] #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes read_vhdl -info " Read one or more vhdl files" -permanent -define_args { #@ {file_names "Files to read" file_names list required} #@ {-netlist "Use structural VHDL netlist reader" "" boolean optional} #@ } #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: read_db #@ # #@ # ABSTRACT: Emulate PT's read_db command in DC: #@ # #@ # Usage: #@ # read_db # Read one or more db files #@ # *[-netlist_only] (Do not read any attributes from db (ignored)) #@ # *[-library] (File is a library DB (ignored)) #@ # file_names (Files to read) #@ # #@ # #@ ############################################################################## #@ # #@ #@ proc read_db { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {read_file -format db [list %s]} $ra(file_names)] #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes read_db -info " Read one or more db files" -permanent -define_args { #@ {file_names "Files to read" file_names list required} #@ {-netlist_only "Do not read any attributes from db (ignored)" "" boolean {hidden optional}} #@ {-library "File is a library DB (ignored)" "" boolean {hidden optional}} #@ } #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: read_edif #@ # #@ # ABSTRACT: Emulate PT's read_edif command in DC: #@ # #@ # Usage: #@ # read_edif # Read one or more edif files #@ # *[-complete_language] (Use ptxr to read the file (ignored)) #@ # file_names (Files to read) #@ # #@ # #@ ############################################################################## #@ # #@ proc read_edif { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {read_file -format edif [list %s]} $ra(file_names)] #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes read_edif -info " Read one or more edif files" -permanent -define_args { #@ {file_names "Files to read" file_names list required} #@ {-complete_language "Use ptxr to read the file (ignored)" "" boolean {hidden optional}} #@ } #@ #@ #@ ############################################################################## #@ # #@ # #@ # PROCEDURE: read_ddc #@ # #@ # ABSTRACT: Shorthand for "read_file -format ddc": #@ # #@ # Usage: #@ # read_ddc # Read one or more ddc files #@ # *[-scenarios] only read constraints for specified scenarios #@ # *[-active_scenarios] only activate the specified scenarios #@ # file_names (Files to read) #@ # #@ # #@ ############################################################################## #@ # #@ #@ proc read_ddc { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd "read_file -format ddc" #@ if { [ info exists ra(-scenarios) ] } { #@ set cmd "$cmd -scenarios { $ra(-scenarios) }" #@ } #@ if { [ info exists ra(-active_scenarios) ] } { #@ set cmd "$cmd -active_scenarios { $ra(-active_scenarios) }" #@ } #@ set cmd "$cmd { $ra(file_names) }" #@ return [uplevel \#0 $cmd] #@ } #@ #@ define_proc_attributes read_ddc -info "Read one or more ddc files" -permanent -define_args { #@ {file_names "Files to read" file_names list required} #@ {-scenarios "list of scenarios to be read from ddc file" #@ scenario_list list optional} #@ {-active_scenarios "list of scenarios to be made active" #@ active_scenario_list list optional}} #@ #@ #@ #@ ############################################################################## #@ # #@ # PROCEDURE: source_tcl_file #@ # #@ # ABSTRACT: generic procedure to source another tcl file #@ # #@ # Arguments: #@ # filename tcl filename #@ # dir directory to check for file #@ # msg verbose message #@ # verbose verbose mode #@ # #@ # Usage: #@ # #@ ############################################################################## #@ # #@ proc source_tcl_file { filename dir msg {verbose 1} } { #@ set __qual_pref_file [file join $dir $filename] #@ if {[file exists $__qual_pref_file]} { #@ if { $verbose } { #@ echo $msg $__qual_pref_file #@ } #@ # use catch to recover from errors in the pref file #@ echo_trace "Sourcing " $__qual_pref_file #@ # to speed up sourcing use read and eval #@ set f [open $__qual_pref_file] #@ if {[catch {namespace eval :: [read -nonewline $f]} __msg]} { #@ echo Error: Error during sourcing of $__qual_pref_file #@ if {$__msg != ""} { echo $__msg } #@ # actually, it looks like $__msg is always null after #@ # source fails #@ } #@ close $f #@ } else { #@ echo_trace "Info: File '" $__qual_pref_file "' does not exist!" #@ } #@ } #@ define_proc_attributes source_tcl_file -hidden #@ #@ #@ #@ ############################################################################## #@ # #@ # PROCEDURE: echo_trace #@ # #@ # ABSTRACT: echo only in trace modus #@ # #@ ############################################################################## #@ # #@ proc echo_trace { args } { #@ if { [info exists ::env(TCL_TRACE)] } { #@ echo TRACE\> [join $args "" ] #@ } #@ } #@ define_proc_attributes echo_trace -hidden #@ #@ ############################################################################# #@ # #@ # Following procedures added for PC write_script #@ # #@ # #@ # #@ ############################################################################ #@ #@ proc set_cell_restriction { args } { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {set_attribute %s -type integer restrictions %s } $ra(cell) $ra(value)] #@ return [uplevel #0 $cmd] #@ #@ } #@ define_proc_attributes set_cell_restriction -hidden -define_args { {cell "cell_name" cell string required} {value "value" value string required} } #@ #@ #@ proc set_cell_soft_keepout {args} { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {set_keepout_margin -type soft -outer {%d %d %d %d} [list %s] } $ra(llx) $ra(lly) $ra(urx) $ra(ury) $ra(objects)] #@ return [uplevel #0 $cmd] #@ #@ #@ } #@ #@ define_proc_attributes set_cell_soft_keepout -hidden -define_args { {llx "llx" llx float required} {lly "lly" lly float required} {urx "urx" urx float required} {ury "ury" ury float required} {objects "objects" objects list required} } #@ #@ proc set_cell_hard_keepout {args} { #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {set_keepout_margin -type soft -outer {%d %d %d %d} [list %s] } $ra(llx) $ra(lly) $ra(urx) $ra(ury) $ra(objects)] #@ return [uplevel #0 $cmd] #@ #@ #@ } #@ #@ define_proc_attributes set_cell_hard_keepout -hidden -define_args { {llx "llx" llx float required} {lly "lly" lly float required} {urx "urx" urx float required} {ury "ury" ury float required} {objects "objects" objects list required} } #@ #@ set mw_use_pdb_lib_format false #@ #@ ############################################################################## #@ # #@ # PROCEDURE: write_milkyway #@ # #@ # ABSTRACT: wrapper around save_mw_cel to support original write_milkyway #@ # interface #@ # if { [info commands open_mw_cel] == "open_mw_cel" } {} #@ # #@ ############################################################################## #@ #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ #@ proc write_milkyway args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {save_mw_cel -as %s %s %s %s %s} $ra(-output) [array names ra -overwrite] [array names ra -create] [array names ra -all] [array names ra -dps]] #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes write_milkyway -hidden -info " Saves the design as milkyway CEL" -define_args {{-output fileName "Name" string {optional}} {-overwrite "Overwrite the current version" "" boolean {optional}} {-create "Create from scratch" "" boolean {hidden optional}} {-all "Save all modified cells" "" boolean {hidden optional}} {-dps "Save internal DPS design" "" boolean {hidden optional}}} #@ #@ ############################################################################## #@ # #@ # PROCEDURE: read_milkyway #@ # #@ # ABSTRACT: wrapper around open_mw_cel to support original read_milkyway #@ # interface #@ # MODIFIED: To support DPS in Galileo we need to pass the filtering #@ # parameters to the DPS command. (Pankaj Goswami, Mar09 2005) #@ # #@ ############################################################################## #@ #@ proc read_milkyway args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {open_mw_cel %s} $ra() ] #@ #@ if {[info exists ra(-library)]} { #@ set cmd [concat [concat $cmd " -library " ] " $ra(-library) "] #@ } #@ #@ if {[info exists ra(-read_only)]} { #@ lappend cmd {-readonly} #@ } #@ #@ # DPS specific stuff #@ set dps_cmd "vh_set_current_partition " #@ set read_mw_with_dps_filter false #@ #@ if {[info exists ra(-vh_module_only)]} { #@ append dps_cmd "-vh_module_only " #@ set read_mw_with_dps_filter true #@ } #@ #@ if {[info exists ra(-vh_include)]} { #@ append dps_cmd [concat " -vh_include " " \{ $ra(-vh_include) \}"] #@ append dps_cmd " " #@ set read_mw_with_dps_filter true #@ } #@ #@ if {[info exists ra(-vh_exclude)]} { #@ append dps_cmd [concat " -vh_exclude" " \{ $ra(-vh_exclude) \}"] #@ set read_mw_with_dps_filter true #@ } #@ #@ if { $read_mw_with_dps_filter == true } { #@ # Call the DPS command to store the DPS filtering params. #@ uplevel #0 $dps_cmd #@ } else { #@ # If there is no DPS filtering params, then we need to reset the #@ # params which might have been stored from the provious command. #@ append dps_cmd " -vh_reset_partition" #@ uplevel #0 $dps_cmd #@ } #@ # End of DPS stuff #@ #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes read_milkyway -hidden -info " Read milkyway CEL from disk" -define_args {{-library "library name" "lib_name" string {optional}} {-read_only "open design in read only mode" "" boolean {optional}} {-version "version number of the CEL" "number" string {optional}} {-vh_module_only "open design for DPS module only partition" "" boolean {hidden optional}} {-vh_include "list of designs to be included in the DPS partition" "include_designs" list {hidden optional}} {-vh_exclude "list of designs to be excluded in the DPS partition" "exclude_designs" list {hidden optional}} {"" fileName "CEL name" string {required}}} #@ #@ } #@ #@ ############################################################################## #@ # #@ # PROCEDURE: set_mw_technology_file #@ # #@ # ABSTRACT: wrapper around update_mw_lib #@ # #@ # HISTORY : 2009/6/21, yunz, support ALF reader in ICC #@ # #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] || #@ ([string match -nocase {*d[ce]_shell*} $synopsys_program_name] && [shell_is_mwlib_enabled]) } { #@ #@ proc set_mw_technology_file args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd "" #@ set lib_name "" #@ set pdb_file "tech.pdb" #@ set log_file "log_file" #@ set alf_file "" #@ #@ if {[info exists ra(-technology)] && [info exists ra(-plib)]} { #@ echo "Error: the $ra(-technology) and $ra(-plib) options are mutually exclusive." #@ return [uplevel #0 $cmd] #@ } elseif {[info exists ra(-technology)] && [info exists ra(-alf)]} { #@ echo "Error: the $ra(-technology) and $ra(-alf) options are mutually exclusive." #@ return [uplevel #0 $cmd] #@ } elseif {[info exists ra(-plib)] && [info exists ra(-alf)]} { #@ echo "Error: the $ra(-plib) and $ra(-alf) options are mutually exclusive." #@ return [uplevel #0 $cmd] #@ } #@ #@ if {[info exists ra(-technology)]} { #@ #@ set cmd [format {update_mw_lib -technology %s %s} $ra(-technology) $ra() ] #@ } #@ #@ if {[info exists ra(-plib)]} { #@ #@ set cmd [format {update_mw_lib %s} $ra() ] #@ #@ if {[string match -nocase {*.pdb} $ra(-plib) ] } { #@ set cmd [concat [concat $cmd " -plib " ] " $ra(-plib) "] #@ } #@ if {[string match -nocase {*.plib} $ra(-plib) ] } { #@ set subcmd [format {read_lib %s} $ra(-plib)] #@ redirect -file log_file {uplevel #0 $subcmd} #@ set f1 [open $log_file] #@ while {[gets $f1 line] >= 0} { #@ set msg1 [lindex $line 3] #@ set msg2 [lindex $line 4] #@ if {[string match {read} $msg1] && #@ [string match {successfully} $msg2] } { #@ set msg [lindex $line 2] #@ set len [string length $msg] #@ set lib_name [string range $msg 1 [expr $len-2] ] #@ break #@ } #@ if {[string match {old} $msg1] && #@ [string match {technology} $msg2] } { #@ set msg [lindex $line 6] #@ set len [string length $msg] #@ set path [string range $msg 1 [expr $len-2] ] #@ set name1 [lindex [split $path {/}] end] #@ regexp {(.+?).pdb} $name1 match lib_name #@ break #@ } #@ } #@ if {$lib_name != ""} { #@ set subcmd [format {write_lib %s -output %s} $lib_name $pdb_file] #@ uplevel #0 $subcmd #@ #@ echo "Command is : " #@ echo $cmd #@ #@ set cmd [concat [concat $cmd " -plib " ] " $pdb_file "] #@ #@ echo "Command is : " #@ echo $cmd #@ #@ } else { #@ echo "Error: Can not compile $ra(-plib) to pdb successfully" #@ return 0; #@ } #@ } #@ } #@ if {[info exists ra(-alf)]} { #@ #@ set cmd [format {update_mw_lib %s} $ra() ] #@ #@ set cmd [concat [concat $cmd " -alf " ] " $ra(-alf) "] #@ } #@ #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes set_mw_technology_file -hide_body -info " Set technology file for the library " -define_args {{-technology "Technology file name" "tech_file" string {optional}} {-plib "Plib file name" "file_name" string {optional}} {-alf "alf file name" "file_name" string {optional}} {"" "Library name" "libName" string {required}}} #@ #@ ############################################################################## #@ # #@ # PROCEDURE: rebuild_mw_lib #@ # #@ # ABSTRACT: wrapper around update_mw_lib #@ # #@ ############################################################################## #@ #@ proc rebuild_mw_lib args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {update_mw_lib -rebuild %s} $ra() ] #@ #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes rebuild_mw_lib -hide_body -info " Rebuild the library " -define_args {{"" "Library name" "libName" string {required}}} #@ #@ ############################################################################## #@ # #@ # PROCEDURE: set_mw_lib_reference #@ # #@ # ABSTRACT: Procedure to set ref lib list or ref ctrl file #@ # #@ ############################################################################## #@ #@ proc set_mw_lib_reference args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd "" #@ #@ if {[info exists ra(-mw_reference_library)]} { #@ set cmd [format {set_reference_control_file -reference_libraries {%s} %s} $ra(-mw_reference_library) $ra() ] #@ } #@ #@ if {[info exists ra(-reference_control_file)]} { #@ set cmd [format {set_reference_control_file -file %s %s} $ra(-reference_control_file) $ra() ] #@ } #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes set_mw_lib_reference -hide_body -info " Set reference for the library " -define_args {{-mw_reference_library "List of reference libraries" "lib_list" list {optional}} {-reference_control_file "Reference control file" "file_name" string {optional}} {"" "Library name" "libName" string {required}}} #@ #@ # #@ ############################################################################## #@ # #@ # PROCEDURE: create_mw_lib #@ # #@ # ABSTRACT: wrapper around MWUI create_mw_lib #@ # #@ ############################################################################## #@ #@ proc create_mw_lib args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd "" #@ set lib_name "" #@ set pdb_file "tech.pdb" #@ set log_file "log_file" #@ #@ if {[info exists ra(-ignore_case)]} { #@ set cmd [format {org_create_mw_lib %s} $ra() ] #@ } else { #@ set cmd [format {org_create_mw_lib -case_sensitive %s} $ra() ] #@ } #@ #@ if {[info exists ra(-technology)]} { #@ set cmd [concat [concat $cmd " -technology " ] " $ra(-technology) "] #@ } #@ #@ if {[info exists ra(-ignore_tf_error)]} { #@ set cmd [concat $cmd " -ignore_tf_error " ] #@ } #@ #@ if {[info exists ra(-hier_separator)]} { #@ set cmd [concat [concat $cmd " -hier_seperator " ] " $ra(-hier_separator) "] #@ } #@ #@ if {[info exists ra(-bus_naming_style)]} { #@ set cmd [concat [concat $cmd " -bus_naming_style " ] " {$ra(-bus_naming_style)} "] #@ } #@ #@ #@ if {[info exists ra(-reference_control_file)]} { #@ set cmd [concat [concat $cmd " -reference_control_file " ] " $ra(-reference_control_file) "] #@ } #@ #@ if {[info exists ra(-mw_reference_library)]} { #@ set cmd [concat [concat [concat $cmd " -mw_reference_library {" ] " $ra(-mw_reference_library) "] "}"] #@ } #@ #@ if {[info exists ra(-plib)]} { #@ if {[string match -nocase {*.pdb} $ra(-plib) ] } { #@ set cmd [concat [concat $cmd " -plib " ] " $ra(-plib) "] #@ } #@ if {[string match -nocase {*.plib} $ra(-plib) ] } { #@ set subcmd [format {read_lib %s} $ra(-plib)] #@ redirect -file log_file {uplevel #0 $subcmd} #@ set f1 [open $log_file] #@ while {[gets $f1 line] >= 0} { #@ set msg1 [lindex $line 3] #@ set msg2 [lindex $line 4] #@ if {[string match {read} $msg1] && #@ [string match {successfully} $msg2] } { #@ set msg [lindex $line 2] #@ set len [string length $msg] #@ set lib_name [string range $msg 1 [expr $len-2] ] #@ break #@ } #@ if {[string match {old} $msg1] && #@ [string match {technology} $msg2] } { #@ set msg [lindex $line 6] #@ set len [string length $msg] #@ set path [string range $msg 1 [expr $len-2] ] #@ set name1 [lindex [split $path {/}] end] #@ regexp {(.+?).pdb} $name1 match lib_name #@ break #@ } #@ } #@ if {$lib_name != ""} { #@ set subcmd [format {write_lib %s -output %s} $lib_name $pdb_file] #@ uplevel #0 $subcmd #@ set cmd [concat [concat $cmd " -plib " ] " $pdb_file "] #@ } else { #@ echo "Error: Can not compile $ra(-plib) to pdb successfully" #@ return 0; #@ } #@ } #@ } #@ #@ if { ![uplevel #0 $cmd] } { #@ return 0 #@ } #@ #@ set cmd "" #@ #@ if {[info exists ra(-open)]} { #@ uplevel #0 $cmd #@ set cmd [format {open_mw_lib %s} $ra() ] #@ } #@ #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes create_mw_lib -hide_body -info " Create a milkyway library " -define_args {{-technology "Technology file name" "file_name" string {optional}} {-ignore_tf_error "Ignore the error in technology file" "" boolean {hidden optional}} {-plib "Plib file name" "file_name" string {optional}} {-hier_separator "Hierarchical separator, default is backslash / " "separator" string {hidden optional}} {-bus_naming_style "Bus naming style" "bus_naming_style" string {optional}} {-ignore_case "Make case insensitive" "" boolean {hidden optional}} {-case_sensitive "Make case sensitive" "" boolean {hidden optional}} {-mw_reference_library "List of reference libraries" "lib_list" list {optional}} {-reference_control_file "Reference control file" "file_name" string {optional}} {-open "Open the library after creation" "" boolean {optional}} {"" "Library name to create" "libName" string {required}}} #@ #@ # #@ ############################################################################## #@ # #@ # PROCEDURE: report_mw_lib #@ # #@ # ABSTRACT: wrapper around MWUI report_mw_lib #@ # #@ ############################################################################## #@ #@ proc report_mw_lib args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd "" #@ #@ if {[info exists ra(-mw_reference_library)]} { #@ if {[info exists ra()]} { #@ set cmd [format {report_mw_lib_ref_lib_list %s} $ra() ] #@ } else { #@ set cmd [format {report_mw_lib_ref_lib_list} ] #@ } #@ return [uplevel #0 $cmd] #@ } #@ #@ if {[info exists ra(-unit_range)]} { #@ if {[info exists ra()]} { #@ set cmd [format {org_report_mw_lib -unit_range %s} $ra() ] #@ } else { #@ echo "Error : Library name must be specified when using this option" #@ return 0; #@ } #@ return [uplevel #0 $cmd] #@ } #@ #@ } #@ #@ define_proc_attributes report_mw_lib -hide_body -info " Report information about the library " -define_args {{-unit_range "Report unit range of library" "" boolean {optional}} {-mw_reference_library "Report list of reference libraries" "" boolean {optional}} {"" "Library to be reported" "libName" string {optional}}} #@ #@ ############################################################################## #@ # #@ # PROCEDURE: close_mw_lib #@ # #@ # ABSTRACT: Wrapper around close_mw_lib to handle -save option properly #@ # - save_mw_cel to save current cel with dc_netlist #@ # - close_mw_cel to close current cel #@ # - save_open_cels to save other open cels before closing library #@ # #@ ############################################################################## #@ #@ proc close_mw_lib args { #@ #@ parse_proc_arguments -args $args ra #@ #@ if {$args == ""} { #@ set cmd [format {icc_is_dc_up} ] #@ if {[uplevel #0 $cmd]} { #@ set cmd [format {remove_design -quiet -designs} ] #@ if {[uplevel #0 $cmd]} { #@ set cmd [format {org_close_mw_lib } ] #@ return [uplevel #0 $cmd] #@ } else { #@ return 0 #@ } #@ } else { #@ set cmd [format {org_close_mw_lib } ] #@ return [uplevel #0 $cmd] #@ } #@ } #@ #@ if {[info exists ra(-save)]} { #@ #@ set cmd [format {save_mw_cel} ] #@ if {![uplevel #0 $cmd]} { #@ return #@ } #@ #@ set cmd [format {close_mw_cel} ] #@ if {![uplevel #0 $cmd]} { #@ return #@ } #@ #@ set cmd [format {save_open_cels} ] #@ if {![uplevel #0 $cmd]} { #@ return #@ } #@ } #@ #@ set cmd [format {org_close_mw_lib} ] #@ return [uplevel #0 $cmd] #@ } #@ #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ define_proc_attributes close_mw_lib -hide_body -info " Closes the milkyway library " -define_args {{-save "Save open cels" "" boolean {optional}} {"" "libraries to be closed" "lib list" list {hidden optional}}} #@ } else { #@ define_proc_attributes close_mw_lib -hide_body -info " Closes the milkyway library " -define_args {{-no_save "Don't save open cels" "" boolean {hidden optional}} {"" "libraries to be closed" "lib list" list {hidden optional}}} #@ } #@ ############################################################################## #@ # #@ # PROCEDURE: write_mw_lib_files #@ # #@ # ABSTRACT: Write technology or reference control file #@ # History: Yun Zhang 2011/12/5. add new hidden option -stream_layer_map_file #@ # #@ ############################################################################## #@ proc write_mw_lib_files args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd "" #@ #@ if {[info exists ra(-reference_control_file)]} { #@ #Option -reference_contrl_file, -plib and -technology are exclusive. #@ # If both of them are set at the same time, error reported. #@ # 9000273455, by xqsun, 2009/2/4 #@ if {[info exists ra(-technology)]} { #@ echo "Error: Cannot specify '-reference_control_file' with '-technology'.(CMD-001)" #@ return 0 #@ } elseif {[info exists ra(-plib)]} { #@ echo "Error: Cannot specify '-reference_control_file' with '-plib'.(CMD-001)" #@ return 0 #@ } elseif {[info exists ra(-stream_layer_map_file)]} { #@ echo "Error: Cannot specify '-reference_control_file' with '-stream_layer_map_file'.(CMD-001)" #@ return 0 #@ } else { #@ set cmd [format {report_mw_lib_ref_ctrl_file -output %s %s} $ra(-output) $ra() ] #@ return [uplevel #0 $cmd] #@ } #@ } #@ #@ if {[info exists ra(-technology)]} { #@ if {[info exists ra(-plib)]} { #@ echo "Error: Cannot specify '-technology' with '-plib'.(CMD-001)" #@ return 0 #@ } elseif {[info exists ra(-stream_layer_map_file)]} { #@ echo "Error: Cannot specify '-technology' with '-stream_layer_map_file'.(CMD-001)" #@ return 0 #@ } else { #@ set cmd [format {org_report_mw_lib -output %s %s} $ra(-output) $ra() ] #@ return [uplevel #0 $cmd] #@ } #@ } #@ #@ if {[info exists ra(-plib)]} { #@ if {[info exists ra(-layer_map_file)]} { #@ echo "Error: Cannot specify '-technology' with '-stream_layer_map_file'.(CMD-001)" #@ return 0 #@ } else { #@ set cmd [format {write_plib -lib_name %s %s} $ra() $ra(-output) ] #@ return [uplevel #0 $cmd] #@ } #@ } #@ if {[info exists ra(-stream_layer_map_file)]} { #@ set cmd [format {org_report_mw_lib -stream_layer_map_file %s -output %s %s} $ra(-stream_layer_map_file) $ra(-output) $ra() ] #@ return [uplevel #0 $cmd] #@ } #@ #@ } #@ #@ define_proc_attributes write_mw_lib_files -hide_body -info " Write technology or reference control file " -define_args {{-technology "Dump technology file" "" boolean {optional}} {-plib "Dump plib file" "" boolean {optional}} {-reference_control_file "Dump reference control file" "" boolean {optional}} {-stream_layer_map_file "Dump layer map file during stream in/out" "" string {optional hidden}} {-output "Output file" "file_name" string {required}} {"" "Library to be reported" "libName" string {required}}} #@ } #@ ############################################################################## #@ # #@ # PROCEDURE: close_mw_cel #@ # #@ # ABSTRACT: Wrapper around close_mw_cel to add -save option #@ # remove_timing_design is the command to shutdown dc netlist #@ # #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ #@ proc close_mw_cel args { #@ #@ parse_proc_arguments -args $args ra #@ #@ global mw_is_all_views #@ set cmd [format {icc_is_dc_up} ] #@ set dc_is_up [uplevel #0 $cmd] #@ #@ set cmd_close [format {org_close_mw_cel} ] #@ #@ if {[info exists ra(-all_views)]} { #@ set cmd_close [format {%s -all_views} $cmd_close] #@ set mw_is_all_views 1 #@ } #@ if {[info exists ra(-all_versions)]} { #@ set cmd_close [format {%s -all_versions} $cmd_close] #@ } #@ if {[info exists ra(-save)]} { #@ set cmd_close [format {%s -save} $cmd_close] #@ } #@ if {[info exists ra(-verbose)]} { #@ set cmd_close [format {%s -verbose} $cmd_close] #@ } #@ if {[info exists ra(-hierarchy)]} { #@ set cmd_close [format {%s -hierarchy} $cmd_close] #@ } #@ #@ ui_util_clean_saved_lib_attr $args #@ #@ set cmd "" #@ set lcels "" #@ set is_current_closed 1 #@ #@ if {[info exists ra()]} { #@ set lcels $ra() #@ } #@ set len [string length $lcels] #@ if {$len > 0} { #@ set is_current_closed [is_current_mw_cel $lcels] #@ set cmd_close [format {%s {%s}} $cmd_close $lcels] #@ } #@ if {[uplevel #0 $cmd_close]} { #@ set mw_is_all_views 0 #@ if {$dc_is_up == 1} { #@ if {$is_current_closed == 1} { #@ set cmd [format {remove_design -quiet -designs} ] #@ return [uplevel #0 $cmd] #@ } #@ return 1 #@ } else { #@ return 1 #@ } #@ } else { #@ set mw_is_all_views 0 #@ return 0 #@ } #@ } #@ #@ define_proc_attributes close_mw_cel -hide_body -info " Closes the design " -define_args {{-save "Save the design" "" boolean {optional}} {-discard "Discard any changes" "" boolean {optional hidden}} {-verbose "Print out debugging messages" "" boolean {optional hidden}} {-hierarchy "Close top design and its child designs" "" boolean {optional}} {-all_views "Close all views of the design" "" boolean {optional}} {-all_versions "Close all versions of the design" "" boolean {optional}} {"" "designs to be closed" "design list" list {optional}}} #@ #@ ############################################################################## #@ # #@ # PROCEDURE: save_all_mw_cel #@ # #@ # ABSTRACT: Wrapper around save_mw_cel to save all the open cels. Needed for Black box flow. #@ # #@ ############################################################################## #@ #@ proc save_all_mw_cels { } { #@ set top_cel [get_attribute [current_mw_cel] name] #@ #@ set cels [fp_get_open_cells] #@ #@ foreach cel $cels { #@ if {$cel != $top_cel} { #@ current_mw_cel $cel #@ #@ save_mw_cel #@ } #@ } #@ #@ current_mw_cel $top_cel #@ #@ save_mw_cel #@ } #@ #@ icc_hide_cmd save_all_mw_cels #@ #@ ############################################################################## #@ # PROCEDURE: execute_command_and_create_cel_from_scratch #@ # ABSTRACT: This procedure executes the given command and creates the CEL #@ # from scratch after executing this command. #@ ############################################################################## #@ proc execute_command_and_create_cel_from_scratch {org_cmd_name args} { #@ global mw_create_cel_force #@ global mw_enable_auto_cel #@ global mw_force_auto_cel #@ #@ set lib [current_mw_lib] #@ #@ # If no MW lib, design is not from MW. Execute the original command #@ # and return. #@ if {$lib == ""} { #@ return [eval $org_cmd_name $args] #@ } #@ #@ # Get values of few variables. #@ set incr_mode $mw_create_cel_force #@ set mw_create_cel_force TRUE #@ #@ # Get auto cel mode, disable it temporarily if enabled. #@ set auto_cel_mode $mw_enable_auto_cel #@ set mw_enable_auto_cel FALSE #@ #@ # Check if the already existing CEL is auto-CEL. #@ set auto_cel 0 #@ if {[is_cel_auto_cel]} { #@ set auto_cel 1 #@ } elseif {![get_top_cel_mwid]} { #@ set auto_cel 1 #@ } #@ #@ #@ # Run the original command, if not successful restore the incr_mode #@ # variable and return. No CEL is created. #@ if {![eval $org_cmd_name $args]} { #@ set mw_create_cel_force $incr_mode #@ set mw_enable_auto_cel $auto_cel_mode #@ return 0 #@ } #@ #@ # Restore auto_cel mode #@ set mw_enable_auto_cel $auto_cel_mode #@ #@ # Now create auto or real CEL depending on what the original CEL was. #@ if {$auto_cel == "1"} { #@ # Force creation of auto-CEL, since commands other than read_def/pdef #@ # do not decouple CEL from DC. #@ #@ set mw_force_auto_cel TRUE #@ set cmd [format {save_mw_cel -auto}] #@ } else { #@ if [get_top_cel_mwid] { #@ set cmd [format {save_mw_cel -create}] #@ echo "Information: Command not supported by incr. update or write-thru." #@ echo " Creating new CEL from scratch, old CEL will be closed." #@ } #@ } #@ #@ # Create the Auto CEL or normal CEL from scratch. #@ if {![uplevel #0 $cmd]} { #@ set mw_create_cel_force $incr_mode #@ set mw_force_auto_cel FALSE #@ return 0 #@ } #@ #@ set mw_create_cel_force $incr_mode #@ set mw_force_auto_cel FALSE #@ return 1 #@ } #@ #@ define_proc_attributes execute_command_and_create_cel_from_scratch -hidden -hide_body #@ #@ ############################################################################## #@ # PROCEDURE: read_def #@ # ABSTRACT: Wrapper around read_def to handle incremental update properly #@ # if MW based read_def is used, bypass the wrapper #@ # enable_milkyway_def_reader_writer must be TRUE and use_pdb_lib_format must #@ # be false for MW read_Def to be run, use wrapper if either condition fails #@ ############################################################################## #@ rename -force dc_read_def org_read_def #@ icc_hide_cmd org_read_def #@ proc dc_read_def args { #@ parse_proc_arguments -args $args ra #@ #@ return [eval execute_command_and_create_cel_from_scratch "org_read_def" $args] #@ } #@ #@ define_proc_attributes dc_read_def -hide_body -info " Read a def file " -define_args {{-design "name of design for which clusters are to be read" "" string {optional}} {-quiet "do not print out any warnings" "" boolean {optional}} {-verbose "print out more warnings" "" boolean {optional}} {-allow_physical_cells "allow physical cells" "" boolean {optional}} {-allow_physical_ports "allow physical ports" "" boolean {optional}} {-allow_physical_nets "allow physical nets" "" boolean {optional}} {-skip_signal_nets "skip signal nets" "" boolean {optional}} {-incremental "incremental" "" boolean {optional}} {-enforce_scaling "enforce_scaling" "" boolean {optional}} {-move_bounds "move bounds" "" boolean {optional}} {"" "input def file names" "input_def_file_name" string {required}}} #@ #@ #@ ############################################################################## #@ # PROCEDURE: group #@ # ABSTRACT: Wrapper around group to handle incremental update properly #@ ############################################################################## #@ rename -force group org_group #@ icc_hide_cmd org_group #@ proc group args { #@ parse_proc_arguments -args $args ra #@ return [eval execute_command_and_create_cel_from_scratch "org_group" $args] #@ } #@ #@ define_proc_attributes group -hide_body -info " create new hierarchy" -define_args {{-except "cells not to be included in the group" "exclude_list" list {optional}} #@ {-design_name "name of design created for new hierarchy" "design_name" string {optional}} #@ {-cell_name "name of cell created for new hierarchy" "cell_name" string {optional}} #@ {-logic "group any combinational elements" "" boolean {optional}} #@ {-pla "group any PLA elements" "" boolean {optional}} #@ {-fsm "group all elements part of a finite state machine" "" boolean {optional}} #@ {-hdl_block "name of hdl_block to group" "" string {optional}} #@ {-hdl_bussed "group all bussed gates under this block" "" boolean {optional}} #@ {-hdl_all_blocks "group all hdl blocks under this block" "" boolean {optional}} #@ {-soft "set the group_name attribute" "" boolean {optional}} #@ {"" "cells to be included in the group" "cell_list" list {optional}}} #@ #@ ############################################################################## #@ # PROCEDURE: copy_design #@ # ABSTRACT: Wrapper around copy_design to handle incremental update properly #@ ############################################################################## #@ rename -force copy_design org_copy_design #@ icc_hide_cmd org_copy_design #@ proc copy_design args { #@ parse_proc_arguments -args $args ra #@ return [eval execute_command_and_create_cel_from_scratch "org_copy_design" $args] #@ } #@ #@ define_proc_attributes copy_design -hide_body -info " copy_design" -define_args {{"" "List of designs to be copied" "design_list" list {required}} #@ {"" "Name of new design or target file" "target_name" string {required}}} #@ #@ ############################################################################## #@ # PROCEDURE: create_design #@ # ABSTRACT: Wrapper around create_design to handle incremental update properly #@ ############################################################################## #@ rename -force create_design org_create_design #@ icc_hide_cmd org_create_design #@ proc create_design args { #@ parse_proc_arguments -args $args ra #@ return [eval execute_command_and_create_cel_from_scratch "org_create_design" $args] #@ } #@ #@ define_proc_attributes create_design -hide_body -info " Creates a design in dc_shell memory" -define_args {{"" "name of the design to create" "" string {required}} #@ {"" "name of file for design; optional" "" string {optional}}} #@ #@ ############################################################################## #@ # PROCEDURE: reset_design #@ # ABSTRACT: Wrapper around reset_design to handle incremental update properly #@ ############################################################################## #@ #rename -force reset_design org_reset_design #@ #icc_hide_cmd org_reset_design #@ #proc reset_design args { #@ # parse_proc_arguments -args $args ra #@ # return [eval execute_command_and_create_cel_from_scratch "org_reset_design" $args] #@ #} #@ #@ ############################################################################## #@ # PROCEDURE: rename_design #@ # ABSTRACT: Wrapper around rename_design to handle incremental update properly #@ ############################################################################## #@ rename -force rename_design org_rename_design #@ icc_hide_cmd org_rename_design #@ proc rename_design args { #@ parse_proc_arguments -args $args ra #@ return [eval execute_command_and_create_cel_from_scratch "org_rename_design" $args] #@ } #@ #@ define_proc_attributes rename_design -hide_body -info " rename_design" -define_args {{"" "List of designs to be renamed" "design_list" list {required}} #@ {"" "Name of new design or target file" "target_name" string {required}}} #@ #@ } #@ #@ ############################################################################## #@ # If we are in icc_shell (i.e. Galileo) then #@ # load the procedures to switch between DC and Milkyway collections. #@ # Set the default to MW collection unless otherwise specified. #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ # load the procedures that switch between DC and MW collections #@ source $synopsys_root/auxx/syn/collection_procs.tcl #@ #@ set CS mw #@ #@ # see if the user wants DC #@ if {! [catch {getenv USE_DC_COLLECTIONS_ONLY}] && #@ [getenv USE_DC_COLLECTIONS_ONLY] } { #@ set CS dc #@ } #@ #@ # set the collection source now #@ redirect /dev/null { #@ if {[catch {set_collection_mode -handle $CS}]} { #@ catch {set_collection_option -handle $CS} #@ } #@ } #@ #@ unset CS #@ } #@ #@ ############################################################################## #@ # procedure for route command #@ # echo the command to a temp tcl file for seperate process to pick up #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ rename -force route org_route #@ icc_hide_cmd org_route #@ proc route args { #@ set route_cmd_file_name ".route_cmd.tcl" #@ set route_cmd_temp_file_name ".route_cmd.tcl.temp" #@ set fp [open $route_cmd_file_name "w"] #@ set route_cmd [concat "sep_proc_route " $args " -child"] #@ puts $fp $route_cmd #@ close $fp #@ #@ uplevel #0 rename -force route route_temp_proc #@ uplevel #0 rename -force org_route route #@ set status [ uplevel #0 route $args ] #@ uplevel #0 rename -force route org_route #@ uplevel #0 rename -force route_temp_proc route #@ #@ if { [info exist status ] == 1 } { #@ return $status #@ } #@ return #@ } #@ } #@ #@ ############################################################################## #@ # Tcl Command: set_ignore_cell #@ # Description: Load the command only in IC Compiler (icc_shell) #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ source $synopsys_root/auxx/syn/psyn/ideal_cell.tcl.e #@ } #@ #@ ############################################################################## #@ # Tcl Command: check_physical_design #@ # Description: Load the command only in IC Compiler (icc_shell) #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ # Load the compiled Tcl byte-code: #@ source $synopsys_root/auxx/syn/psyn/check_physical_design_core.tbc #@ source $synopsys_root/auxx/syn/psyn/check_physical_design_utils.tbc #@ source $synopsys_root/auxx/syn/psyn/check_physical_design_flows.tbc #@ source $synopsys_root/auxx/syn/psyn/check_physical_design_reports.tbc #@ source $synopsys_root/auxx/syn/psyn/check_physical_design_ui.tbc #@ source $synopsys_root/auxx/syn/psyn/create_qor_snapshot.tbc #@ source $synopsys_root/auxx/syn/psyn/report_qor_snapshot.tbc #@ source $synopsys_root/auxx/syn/psyn/msgParser.tbc #@ source $synopsys_root/auxx/syn/psyn/displacement_gui.tbc #@ source $synopsys_root/auxx/syn/psyn/categorize_timing_gui.tbc #@ source $synopsys_root/auxx/syn/psyn/mcmm_utils.tcl.e #@ source $synopsys_root/auxx/syn/psyn/propagate_all_clocks.tcl.e #@ } #@ #@ if { [string match -nocase {*dc_shell*} $synopsys_program_name] && [shell_is_in_topographical_mode] } { #@ source $synopsys_root/auxx/syn/psyn/create_qor_snapshot.tbc #@ source $synopsys_root/auxx/syn/psyn/report_qor_snapshot.tbc #@ source $synopsys_root/auxx/syn/psyn/mcmm_utils.tcl.e #@ } #@ #@ if { [string match -nocase {*de_shell*} $synopsys_program_name] && [shell_is_in_topographical_mode] } { #@ source $synopsys_root/auxx/syn/psyn/create_qor_snapshot.tbc #@ source $synopsys_root/auxx/syn/psyn/report_qor_snapshot.tbc #@ } #@ #@ ############################################################################## #@ # ICC setup and hiding commands/procs etc #@ ############################################################################## #@ #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ #set save_mw_cel_lib_setup TRUE #@ #set auto_restore_mw_cel_lib_setup FALSE #@ #@ alias create_wiring_keepout create_wiring_keepouts #@ alias get_wiring_keepout get_wiring_keepouts #@ alias get_placement_keepout get_placement_keepouts #@ alias create_placement_keepout create_placement_keepouts #@ #@ icc_hide_cmd execute_command_and_create_cel_from_scratch #@ icc_hide_cmd dc_read_def #@ icc_hide_cmd read_edif #@ icc_hide_cmd read_sverilog #@ icc_hide_cmd read_vhdl #@ icc_hide_cmd set_collection_mode #@ icc_hide_cmd return_dc_collection #@ icc_hide_cmd return_mw_collection #@ set mw_use_pdb_lib_format true #@ } #@ #@ #@ ############################################################################## #@ # Tcl Command: get_dont_touch_nets #@ # Description: wrapper of "get_nets -filter dont_touch_reason==mv" #@ ############################################################################## #@ if { [string match -nocase {*icc_shell*} $synopsys_program_name] } { #@ #@ proc get_dont_touch_nets args { #@ #@ parse_proc_arguments -args $args ra #@ #@ set cmd [format {get_nets}] #@ #@ if {[info exists ra()]} { #@ set cmd [format {%s {%s}} $cmd $ra()] #@ } #@ if {[info exists ra(-type)]} { #@ set cmd [format {%s -filter dont_touch_reasons=~*%s*} $cmd $ra(-type)] #@ } #@ if {[info exists ra(-hierarchical)]} { #@ set cmd [format {%s -hierarchical} $cmd] #@ } #@ if {[info exists ra(-quiet)]} { #@ set cmd [format {%s -quiet} $cmd] #@ } #@ if {[info exists ra(-regexp)]} { #@ set cmd [format {%s -regexp} $cmd] #@ } #@ if {[info exists ra(-nocase)]} { #@ set cmd [format {%s -nocase} $cmd] #@ } #@ if {[info exists ra(-exact)]} { #@ set cmd [format {%s -exact} $cmd] #@ } #@ #@ return [uplevel #0 $cmd] #@ } #@ #@ define_proc_attributes get_dont_touch_nets -info " Get dont_touch nets " -permanent -define_args { {"" "Match net names against patterns" "patterns" list {optional}} {-type "Match net dont_touch reasons" "reasons" list {required}} {-hierarchical "Search level-by-level in current instance" "" boolean {optional}} {-quiet "Suppress all messages" "" boolean {optional hidden}} {-regexp "Patterns are full regular expressions" "" boolean {optional hidden}} {-nocase "With -regexp, matches are case-insensitive" "" boolean {optional hidden}} {-exact "Wildcards are considered as plain characters" "" boolean {optional hidden}} } #@ #@ alias get_dont_touch_net get_dont_touch_nets #@ } #@ #@ #@ ############################################################################## #@ # return the first {index value} pair in Tcl array ary. #@ ############################################################################## #@ proc _snps_array_peek { level ary } { #@ upvar #$level $ary loc_ary #@ set ret [list] #@ set token [array startsearch loc_ary] #@ while {[array anymore loc_ary $token]} { #@ set k [array nextelement loc_ary $token] #@ set v $loc_ary($k) #@ set ret [list $k $v] #@ break #@ } #@ array donesearch loc_ary $token #@ return $ret; #@ } #@ define_proc_attributes _snps_array_peek -hidden #@ # -- End source /opt/CAD/Synopsys/Current/syn/auxx/syn/.dc_procs.tcl #@ #@ # Temporary fix for the LMC_HOME variable- set it to an empty string #@ #@ if { [catch {getenv LMC_HOME } __err ] != 0 } { #@ setenv LMC_HOME "" #@ } #@ #@ #@ # #@ # #@ # Site-Specific Variables #@ # #@ # These are the variables that are most commonly changed at a #@ # specific site, either upon installation of the Synopsys software, #@ # or by specific engineers in their local .synopsys files. #@ # #@ # #@ #@ # from the System Variable Group #@ set link_library { * your_library.db } #@ #@ set search_path [list . ${synopsys_root}/libraries/syn ${synopsys_root}/minpower/syn ${synopsys_root}/dw/syn_ver ${synopsys_root}/dw/sim_ver] #@ set target_library your_library.db #@ set synthetic_library "" #@ set command_log_file "./command.log" #@ set designer "" #@ set company "" #@ set find_converts_name_lists "false" #@ #@ set symbol_library your_library.sdb #@ #@ # Turn on Formality SVF recording #@ if { $synopsys_program_name == "dc_shell" || $synopsys_program_name == "de_shell" || $synopsys_program_name == "design_vision" } { #@ set_svf -default default.svf #@ } #@ #@ # from the Schematic Variable Group #@ #@ # from the Plot Variable Group #@ if { $sh_arch == "hp700" } { #@ set plot_command "lp -d" #@ } else { #@ set plot_command "lpr -Plw" #@ } #@ #@ set view_command_log_file "./view_command.log" #@ #@ # from the View Variable group #@ if { $sh_arch == "hp700" } { #@ set text_print_command "lp -d" #@ } else { #@ set text_print_command "lpr -Plw" #@ } #@ # #@ # System Variable Group: #@ # #@ # These variables are system-wide variables. #@ # #@ set arch_init_path ${synopsys_root}/${sh_arch}/motif/syn/uid #@ set auto_link_disable "false" #@ set auto_link_options "-all" #@ set uniquify_naming_style "%s_%d" #@ set verbose_messages "true" #@ set echo_include_commands "true" #@ set svf_file_records_change_names_changes "true" #@ set change_names_update_inst_tree "true" #@ set change_names_dont_change_bus_members false #@ set default_name_rules "" #@ #set tdrc_enable_clock_table_creation "true" #@ #@ # #@ # Compile Variable Group: #@ # #@ # These variables affect the designs created by the COMPILE command. #@ # #@ set compile_assume_fully_decoded_three_state_busses "false" #@ set compile_no_new_cells_at_top_level "false" #@ set compile_dont_touch_annotated_cell_during_inplace_opt "false" #@ set compile_update_annotated_delays_during_inplace_opt "true" #@ set compile_instance_name_prefix "U" #@ set compile_instance_name_suffix "" #@ set compile_negative_logic_methodology "false" #@ set compile_disable_hierarchical_inverter_opt "false" #@ set compile_use_low_timing_effort "false" #@ set compile_fix_cell_degradation "false" #@ set compile_preserve_subdesign_interfaces "false" #@ set port_complement_naming_style "%s_BAR" #@ set compile_implementation_selection "true" #@ set compile_delete_unloaded_sequential_cells "true" #@ set reoptimize_design_changed_list_file_name "" #@ set compile_checkpoint_phases "false" #@ set compile_cpu_limit 0.0 #@ set compile_log_format " %elap_time %area %wns %tns %drc %endpoint"; #@ set compile_top_all_paths "false" #@ set compile_top_acs_partition "false" #@ set default_port_connection_class "universal" #@ set compile_hold_reduce_cell_count "false" #@ set compile_retime_license_behavior "wait" #@ set dont_touch_nets_with_size_only_cells "false" #@ if { $synopsys_program_name == "dc_shell" && [shell_is_in_topographical_mode] } { #@ set dct_prioritize_area_correlation "false" #@ set compile_error_on_missing_physical_cells "false" #@ } #@ #@ set ldd_return_val 0 #@ if { [string compare $dc_shell_mode "default"] == 0 } { #@ set ldd_script ${synopsys_root}/auxx/syn/scripts/list_duplicate_designs.dcsh #@ alias list_duplicate_designs "include -quiet ldd_script; dc_shell_status = ldd_return_val " #@ #@ } #@ if { [string compare $dc_shell_mode "tcl"] == 0 } { #@ source ${synopsys_root}/auxx/syn/scripts/list_duplicate_designs.tcl #@ source ${synopsys_root}/auxx/syn/scripts/analyze_datapath.tbc #@ } #@ # -- Starting source /opt/CAD/Synopsys/Current/syn/auxx/syn/scripts/list_duplicate_designs.tcl #@ ####################################################################### #@ # #@ # list_duplicate_designs.tcl 21 Sept. 2006 #@ # #@ # List designs in dc_shell memory that have the same design name #@ # #@ # COPYRIGHT (C) 2006, SYNOPSYS INC., ALL RIGHTS RESERVED. #@ # #@ ####################################################################### #@ #@ proc list_duplicate_designs { args } { #@ parse_proc_arguments -args $args ra #@ #@ # Get the list of duplicate designs #@ set the_pid [pid] #@ set rand_1 [expr int(rand() * 100000)] #@ set temp_file_1 [format "/tmp/ldd_design_%s_%s" $the_pid $rand_1] #@ #@ redirect $temp_file_1 { foreach_in_collection ldd_design [find design "*"] { #@ echo [get_object_name $ldd_design] #@ } } #@ #@ set rand_2 [expr int(rand() * 100000)] #@ set temp_file_2 [format "/tmp/ldd_design_%s_%s" $the_pid $rand_2] #@ #@ sh sort $temp_file_1 | uniq -d | tee $temp_file_2 #@ file delete $temp_file_1 #@ #@ # Report duplicates #@ if { ! [file size $temp_file_2] } { #@ echo [concat {No duplicate designs found.}] #@ set ldd_return_val 0 #@ } else { #@ set rand_3 [expr int(rand() * 100000)] #@ set temp_file_3 [format "/tmp/ldd_design_%s_%s" $the_pid $rand_3] #@ echo {Warning: Multiple designs in memory with the same design name.} #@ echo {} #@ echo { Design File Path} #@ echo { ------ ---- ----} #@ list_designs -table > $temp_file_3 #@ echo [sh fgrep -f $temp_file_2 $temp_file_3 | sort | grep -v 'Design.*File.*Path'] #@ file delete $temp_file_3 #@ set ldd_return_val 1 #@ } #@ #@ # Clean up #@ file delete $temp_file_2 #@ #@ set list_duplicate_designs1 $ldd_return_val #@ } #@ #@ define_proc_attributes list_duplicate_designs -info " List designs of same names" -permanent -define_args { #@ } #@ # -- End source /opt/CAD/Synopsys/Current/syn/auxx/syn/scripts/list_duplicate_designs.tcl #@ # -- Starting source /opt/CAD/Synopsys/Current/syn/auxx/syn/scripts/analyze_datapath.tbc #@ #!/bin/csh -f #@ # the next line restarts using tclshexec tclsh "$0" "$*" #@ # Script to analyze potential of minPower. #@ # Source the file in the DC setup, before compiling the design. #@ # #@ # Alternatively the script can be used standalone with the report_files #@ # then it has to be invoked: #@ # analyze_datapath.tcl report_resources.txt report_area.txt #@ # #@ # #@ # TclPro::Compiler::Include #@ #@ if {[catch {package require tbcload 1.4} err] == 1} { #@ return -code error "[info script]: The TclPro ByteCode Loader is not available or does not support the correct version -- $err" #@ } #@ tbcload::bceval { #@ TclPro ByteCode 2 0 1.4 8.4 #@ 10 0 100 27 0 0 104 0 5 10 10 -1 -1 #@ 100 #@ w0E6#62o9v@t(?!:uS=!;fAs!KIRK%B:3-&/H #@ W,>!MvqqvCpB?)L!f`'BVo9v&-<!EQN!! #@ 10 #@ ;.mOwM=xOw.'! #@ 10 #@ N4xOwM=xOw;9! #@ 27 #@ x #@ 2 #@ FVw #@ x #@ 4 #@ wmwvMfCF'LFY?!(wx?*XxlBagbSAq2K(FmF5SA(|B,EHRM`F&#V<+T@PF #@ +!xMTA%#um#91VE+u'7ID)HfwGja0;@_%+Y?0ot)Fo1#D+s85)Fb1WsE9R,!FgjtSA%vQ<@k #@ tWU@jjp-DwL6<@lT/CF0&ufArZMTA6dV<+s,+v #@ x #@ 4 #@ ,CHr@ #@ x #@ 12 #@ n*Z8Afwwx?6>;EF #@ x #@ 16 #@ 'NB,E(^mID8oATA=;2EF #@ p #@ 7 0 50 9 0 0 28 0 5 7 7 -1 -1 #@ 50 #@ ,|&v!+|Js!8BW@rH&4,#t!%Bo7-/HW!!X8>6#4u&v!8rn9vz #@ 7 #@ ;tcf%-0!! #@ 7 #@ ^fUC(9)'v #@ 9 #@ x #@ 13 #@ u;J9>`mow?Ed@sHA! #@ x #@ 10 #@ #lsU>|S4:G2/# #@ x #@ 6 #@ pR5SA_tw #@ x #@ 4 #@ 3N!iC #@ x #@ 2 #@ &Tv #@ i #@ 0 #@ i #@ -1 #@ x #@ 6 #@ ,Qs/DL+% #@ x #@ 26 #@ ^M;L/n=KE+dCKE+94:JD.XIID*mACF@Pw #@ 0 #@ 0 #@ 2 4 #@ 9 #@ 'NB,E(^mID@v #@ 0 0 257 #@ 6 #@ .9BfD|+% #@ 1 0 257 #@ 6 #@ pR5SA_tw #@ 2 0 9 #@ 6 #@ 7,V`FW+% #@ 3 0 9 #@ x #@ 7 #@ n*Z8Ays_- #@ p #@ 56 0 494 28 3 3 252 1 9 56 60 -1 -1 #@ 494 #@ w0EYUR#3lxN6v*<,f=!I(x4wBJCm#NeL3wn^ #@ _E0hRig%ysm>'v!=>Ks!=QWCig%0 #@ Q58-S3#J&LSaYUv@.mf%Idig%EUAI&aji`^U9n!Hbb>!Ihk>!@#fTvY`Lb' #@ ?nt>!`I.rvMC2u!Wf^Z)7oyX!<5>:vMnk6#z #@ 56 #@ 2,,Uv=yC7#N!5J&:VUm#T#/6,N!5J&yt:vQR`1%p,1>vVu-c'U0 #@ o.& #@ 28 #@ x #@ 6 #@ q'-W@Dhw #@ x #@ 10 #@ )FV5B,QffDX(% #@ i #@ 0 #@ i #@ 10000000 #@ x #@ 6 #@ ?r5DFByw #@ x #@ 2 #@ &Tv #@ x #@ 175 #@ %?!%=%TsiC.r@Q'P>+K3Xj6eJt_F+-0CF>wf*F(c|N@q^>r@Q'P>+># #@ V<+R/v%=P%o-DBFVE+?NfCFvg,<@&8>D+PwO@w%WTW?#*oCFC!xQH91VE+pQIID@@^E1')um #@ #9mMaEw<,DFC!xQH91VE+pQIID@@^E1')um#|(j:@BFVE+PT)!F(c|N@q^>r@P!G>+>N<:+, #@ CEw #@ i #@ 3 #@ x #@ 14 #@ u;J9>`mow?|6cT>h-v #@ x #@ 54 #@ 4|pm7YpL'FEEIF+XOBw?;6-8Ac6;p-6qy4.#lsU>ki;P.:?e?G4%2mBJqS_45mDq.j,v #@ x #@ 6 #@ pR5SA_tw #@ x #@ 7 #@ =r3iC^%g+ #@ x #@ 4 #@ 3N!iC #@ x #@ 0 #@ #@ x #@ 1 #@ A! #@ x #@ 1 #@ L! #@ i #@ 2 #@ i #@ 1 #@ x #@ 13 #@ u;J9>`mow?Ed@sHA! #@ x #@ 24 #@ 4|pm7YpL'FEEIF+0*|CFKaVU>OgS=+ #@ i #@ -1 #@ x #@ 3 #@ Z#-& #@ x #@ 1 #@ K! #@ x #@ 3 #@ x#-& #@ x #@ 1 #@ P! #@ x #@ 6 #@ ,Qs/DL+% #@ x #@ 5 #@ .7Pe02v #@ x #@ 27 #@ ^M;L/n=KE+dCKE+c05#Fe7Oa1JeV<+Dv:- #@ 3 #@ L 1 90 56 149 83 -1 #@ L 1 211 67 281 204 -1 #@ L 1 337 56 396 330 -1 #@ 3 #@ F #@ 1 9 10 #@ 4 #@ 11 12 13 14 #@ F #@ 1 16 17 #@ 4 #@ 11 12 13 14 #@ F #@ 1 18 19 #@ 3 #@ 11 12 13 #@ 2 22 #@ 9 #@ 'NB,E(^mID@v #@ 0 0 257 #@ 6 #@ .9BfD|+% #@ 1 0 257 #@ 5 #@ -lTKD@v #@ 2 0 9 #@ 3 #@ fLc, #@ 3 0 9 #@ 3 #@ hph- #@ 4 0 9 #@ 9 #@ 0*|CF'oU`F9v #@ 5 0 9 #@ 6 #@ pQIIDByw #@ 6 0 8 #@ 6 #@ pR5SA_tw #@ 7 0 9 #@ 6 #@ 7,V`FW+% #@ 8 0 9 #@ 0 #@ #@ 9 0 521 #@ 0 #@ #@ 10 0 521 #@ 4 #@ u3uSA #@ 11 0 9 #@ 1 #@ -v #@ 12 0 9 #@ 1 #@ .v #@ 13 0 9 #@ 1 #@ /v #@ 14 0 9 #@ 5 #@ 0*|CF4v #@ 15 0 9 #@ 0 #@ #@ 16 0 521 #@ 0 #@ #@ 17 0 521 #@ 0 #@ #@ 18 0 521 #@ 0 #@ #@ 19 0 521 #@ 10 #@ )FV5B,QffDX(% #@ 20 0 9 #@ 3 #@ ^=g+ #@ 21 0 9 #@ x #@ 17 #@ lj|Z?.30bE_%vY?0*|CF4v #@ x #@ 16 #@ mxoRA:ovlB5ZB3@6`t!H #@ p #@ 30 0 247 26 3 2 148 2 7 30 34 -1 -1 #@ 247 #@ -fA=!,cSs!/)13w,f+pv55>:v7HrP&+K&s!3TA9v0|yTv59Ks!0#>6#4;tl#;,5Uv;KW #@ Ts!H+%8#g@#!!ee6(!G#+3-AB,:=AAFHo9VL3wGb5t!d!!!!fC#!!Id.%!x-IK!NnGt!9i&v #@ !`8s!Pl&s!9i&v!!WXN5wH1%Wv2rnTvB@Irv6YQK%JjJE'N-,'(MjFB(2iS #@ s!Bd'w)P#J6,>1ZrE,?!! #@ 30 #@ 3rr!!7JHK%5&TTvU:_Vv6JGY!8lE!!Fvc:v:-! #@ 34 #@ @DGUvQOWg%O0gZ)%w*!!.!Y*'6R60'S*#/&|N,N%GK! #@ 26 #@ x #@ 5 #@ 4UQ<@>v #@ x #@ 14 #@ .9BfDs++:@t-%lB^+% #@ x #@ 9 #@ uRKZ?sB-<@Ev #@ x #@ 5 #@ 0a%lB@v #@ x #@ 1 #@ Hv #@ i #@ 5 #@ x #@ 6 #@ pR5SA_tw #@ x #@ 4 #@ 3N!iC #@ x #@ 7 #@ =r3iC^%g+ #@ x #@ 14 #@ 0uPL8hJ%.<6mDq.j,v #@ x #@ 0 #@ #@ i #@ 1 #@ x #@ 1 #@ A! #@ x #@ 1 #@ N! #@ x #@ 2 #@ FVw #@ x #@ 2 #@ h-v #@ x #@ 2 #@ kJv #@ x #@ 55 #@ x-WsEt*Z8A%0J9>0a%lBF-:aC)G#D+O(wa1yB/:+,CEw #@ x #@ 6 #@ ;oRJ0uE% #@ x #@ 1 #@ B! #@ x #@ 4 #@ wmr #@ @Kq-=w5dV<+5|VkB9mZQHuuCTA,rP-Eu|cTH,'R4IO-:aCfnIv?Dn<@wXP_nA/Y:EF(FV5B/ #@ #BCF/Q:s+|_'RH>b&>V=+ko< #@ JD.I%F+vHFiCC2qT,u3uSA;@0C+prsm#e(um#eu>r@,?/kB.XIIDR6tm#vMfCF0owO@w5d #@ V<+Tur! #@ x #@ 30 #@ tsU<+:tJTA8cN<@q<`aEA6|!.:,aaEY-Js+4v #@ x #@ 24 #@ j?VTA9hd#H1Q2TA.EffD6oATA=;2EF #@ p #@ 34 0 274 29 1 1 168 1 9 34 34 -1 -1 #@ 274 #@ 6Mbt!7nMH&)0*!!;KWTs!/lA=!-cJs!=QW:v3t%4wfJ8p+525t!l?vjw2ZW|/=!URE5w0uS=!G#|s!>SYQ#N3GB(K4mf%Eqk6#>hk>!Y%MqvGtP #@ t!UZC?)Zuw!*D;Ts!Zuw!*7iSs!Zuw!*8lSs!Zuw!*9oSs!Gyk6#z #@ 34 #@ 0&,UvY#Eqt:vgoKYvUr-c'V4_R#-hDR#19! #@ 29 #@ i #@ 0 #@ i #@ 10000000 #@ x #@ 19 #@ 1opp/DEIF+i>sU>C1AsHcq_' #@ x #@ 6 #@ jy'X>l9v #@ x #@ 5 #@ 0a%lB@v #@ x #@ 1 #@ +! #@ x #@ 7 #@ rLa:@_k,, #@ x #@ 7 #@ 8*Z4Bo0!- #@ x #@ 4 #@ 3N!iC #@ x #@ 6 #@ ?r5DFByw #@ x #@ 499 #@ Oc57A#oU`F)n<@w5dV<+;d?3@)+GsU>C1AsHo4Z6@()V`F6tsg/clAsH+)um #@ #LdV<+rLa:@*8>D+8*Z4B:R2E+3N!iC=%BTA=;2EF_XTZ?4/;EF=%BTA,rP-EtsU<+:tJTA8 #@ oATA@)QDFs':p@n1O:@Lc2xE1fsiC/!J9>rLa:@*8>D+8*Z4B:R2E+3N!iC=%BTA=;2EF_XT #@ Z?4/;EF=%BTA,rP-EDssm#%2WsE#6oCF%#um#LdV<+*T67A-APQB)oATA@)QDF5,:eD:;GQB #@ 8'0!.N*dfD.0?SA0osU>C1AsH,-DwF#6 #@ oCFS,+u@oC+vqbnAy^S=+.30bE%_MPF+4oD+8*Z4B:R2E+jZnT,78?cE,?elBE3xQH|>/:+RFXQHF #@ 2Op.:DeT>jxPF+crgm#vMfCFk*T7A!si'FFRVE+f*Z4B:R2E+3N!iCf/#>+AGbT>^:GF+I3L #@ 3.HC&LA7aDTA69XeDUssm#a.JTA3osdDDLVE+uqP-E;1Ej@>5cDFxTnT,x=oRA1oU`Fma.=w #@ Z-WsE=!D9G!dRQB,o90D%)(yGH,qT,0*|CF'oU`FORe=+56-8AHDiN.+`67Ag^KZ?DAuDFF# #@ qm#5dV<+')um#5dV<+-g97A&acW@CYPF+crgm#eu>r@1osdD.0U?wZ-WsE=!D9G!dRQB,o90 #@ D%)(yGH,qT,0*|CF'oU`FORe=+56-8Ae=.=w|>/:+TX93Ie2g0ItsU<+>wO@w5dV<+;SsiC; #@ n<@wXP_nAt;D+.30bEu@oC+mSPcE54OBDs2K(F6,aaE8UZQH|>/:+@NncBGYU^,4|k)FM! #@ R,EsQIIDa1lW4-j)5I@2NTA=bl(FnEuSAHRM`Fl)um#e(um#o<,D+Hnl(FnEuSADn<@wssU< #@ +IA-^D/Vi|Dup,<@(rpcBx!G>++p/bEwQ5cEvK&5B,^DTA|>/:+:mui@26nlBt?v>w&POF+! #@ xMTA%#um#5dV<+'!?r@1osdDDLVE+|>/:+IJcZE!N(yG6f*@?R*?P.Bn3m-6qy4.#lsU>5:S #@ :5^Ky=+79S:5F2a3I;%#lBBVeK/`x1mBlN=>wssU<+:tJTAAy1mBlOFY?B7lD+uqP-EO;e9G #@ !dRQB,o90DxTnT,0*|CFOssm#e(um#LdV<+'C/:+JS)!FfIBq@;n<@w`(ATA,rP-EvbDx>R@ #@ hU>B_UU>61_U>C1AsH61Kp-R*s?+79S:5F2a3I;%#lBBVeK/`x1mBlN=>w`C9JD%f#j@>5cD #@ Fx-WsE=!D9G!dRQB,o90D%)(yGH,qT,0*|CF'oU`FORe=+56-8Ae=.=wFtpm#LdV<+'C/:+J #@ S)!F#6oCF%#um#wd?3@vc1`F52ufAal4s4M`O?4ufY8A1QVkBM:B4.x-WsE/Fur@ID/yE!N( #@ yGa)/M/;%#lB;mZQH|>/:+RFXQH1opp/DEIF+i>sU>C1AsH61Kp-3th?+6aO?4m.H)cN<@/&0C+BV&d0Z_xQHFngm#LdV<+7nsdD.R?<@BR,!F#6oCFFngm#LdV<+,#cDF) #@ m_TAFngm#;`4hC@mZQHFngm#LdV<+pR5SAP9xQH1opp/DEIF+5mDq.Ervs.R*?P.<72s4q:G #@ F+8`L3.jy'X>_MPF+4o5cDF|qgm#5dV<+9MfCF #@ 16-8A&Ui'F*dI9>78?cEFg1mBlOFY?B7lD+|:e9G!dRQBErgm#e(um#5dV<+')um#5dV<+vb #@ Dx>R@hU>)7^6AGrvs.R*?P.PQVkB+kUs-jy'X>_MPF+crgm#5dV<++*Z4B:R2E+)!CsHR-As #@ H*N^6AE.L'FSnpp/fBHQBlRa|>69S:5F2a3I;%#lBBVeK/`x1mBlN=>wy>/:+@NncB0tCE+- #@ lTKDseqm#ssU<+:tJTAAy1mBlOFY?B7lD+uqP-EO;e9G!dRQB,o90DxTnT,0*|CFP':4wssU #@ <+>wO@we2g0IGv.4w5dV<+')um#LdV<+4oW/D60veDnCBRA+IhgCEm<@wXP_nAt;/:+@NncBGYU^,4|k)FM!R,EsQIID`(Q<48%tdD!7q-DA-SF+?NfCF,oW/Dr3.lBJ2JsF #@ ;E'!.5Q2TArgY8A0)um#e(um#vMfCF16-8ABcpT,'NB,ErGYxGQ(GaB0tCE+-lTKDyrgm#91 #@ VE+0*|CF'oU`Fo9pQAGFDE+56-8A&Ui'FOy/j.Fg1mBj=ev?^A/:+TX93ItsU<+tdqm# #@ x #@ 0 #@ #@ x #@ 3 #@ Z#-& #@ i #@ -1 #@ x #@ 1 #@ A! #@ x #@ 1 #@ K! #@ x #@ 3 #@ x#-& #@ x #@ 1 #@ P! #@ x #@ 6 #@ )'|(FNJw #@ x #@ 2 #@ &Tv #@ x #@ 17 #@ |dT^>|bM!?I6imH*uR^>Hv #@ x #@ 14 #@ 1-=JD**T,Ew3BCFX%% #@ x #@ 6 #@ I(+41uE% #@ x #@ 6 #@ ,Qs/DL+% #@ x #@ 5 #@ .7Pe02v #@ x #@ 27 #@ ^M;L/n=KE+dCKE+c05#Fe7Oa1JeV<+Dv:- #@ x #@ 6 #@ :!7nMH&(9EvRK%?e1R#68#>!H5K=!@fAs!K|&s #@ !DeUR#2/YQ#!PytpvG&)a^<)Xe^R#=)#UvCvwh7UR/d&LS>:v #@ 24 #@ i #@ 0 #@ x #@ 3 #@ Z#-& #@ x #@ 5 #@ 0a%lB@v #@ x #@ 1 #@ +! #@ x #@ 7 #@ rLa:@_k,, #@ x #@ 43 #@ bDnlBt?VTAw)^aEvJi|D6(RKD5;2`F&&oC+FAcDFvpmlB!?m;@&7<- #@ i #@ 1 #@ x #@ 1 #@ A! #@ x #@ 1 #@ L! #@ x #@ 4 #@ rwIID #@ x #@ 16 #@ T77p,>@i0ABo)D+L.dp, #@ x #@ 6 #@ bD#_FHSw #@ x #@ 4 #@ _5FiC #@ x #@ 5 #@ bkTKD@v #@ x #@ 4 #@ FIa:@ #@ x #@ 7 #@ W-cr@i*E- #@ x #@ 6 #@ ?r5DFByw #@ x #@ 5 #@ <&seD.v #@ x #@ 176 #@ tsU<+KEcd:*OjV?Fm<@w`C9JD&o>0An-!eDDLVE+mV0`Flctm#vMfCFuN9Z?fIa:@%)(yGH, #@ qT,at*:@%iSC+'RRp5b;%v?x-WsE*u>0Aq!2TAu5cDF #@ 1 0 9 #@ 7 #@ at*:@ZGB+ #@ 2 0 9 #@ 10 #@ pQm*ElafRAY+% #@ 3 0 9 #@ 8 #@ jFap@>5cDF #@ 4 0 9 #@ 7 #@ h4+:@ZGB+ #@ 5 0 9 #@ 10 #@ vgm*ElafRAY+% #@ 6 0 9 #@ 14 #@ .9BfDs++:@t-%lB^+% #@ 7 0 9 #@ 5 #@ mxoRADv #@ 8 0 9 #@ 8 #@ ,/;EFdUfRA #@ 9 0 9 #@ 4 #@ u3uSA #@ 10 0 9 #@ 6 #@ bD#_FHSw #@ 11 0 8 #@ 1 #@ -v #@ 12 0 9 #@ x #@ 16 #@ i3hgC/P+Y?gp><@%xRQB #@ x #@ 4 #@ %N|(F #@ p #@ 98 0 766 61 6 5 448 2 8 98 106 -1 -1 #@ 766 #@ w0EUNw:HWS:qv.TA9v>TW,>!MytpvDPos!Px

!Qk(VvH@@S#1d1U!>YQK%B:3-&Ime`'ADPpvEiW!JPG>!Qk(VvP3o.&1d1U!5|yTvG=RK%MR74wTQ(w)3`/X!EYT #@ s!+Ki*g@#!!hn6(!J5F3-oW#7wdxIrvTmqu!jYro+2t%4wf!;p+4,,t!.*|NwxG@L #@ &1i-(!iJ*j6%E89v:853-#Jop+Myo9vx7M3w9<:g/uru!*P%n+WH&-NN!!+?N!!8fN!!Xgy`'HarH&MwK*'H@*-&@.df%DMC7#KbLNwGyfv!C5Kv!7c #@ /v!AJt6#8D5Y!=5BX!Bbt6#=Jt6#=Jt6#=Jt6#=Jt6#L'b'(/6! #@ 106 #@ ;8>UvA80sr0OQfx#6WW!3b/X!/W/X!Rj8M%t6fI&iGhj%h)VC(Z0K.&%Rna0Gbk:vtOWg%oc #@ S4wGb^R#Gn^R#KsFa'^H>/&UE>/&>Jt6#=Jt6#=Jt6#=Jt6#=Jt6#:8Y6#.3! #@ 61 #@ x #@ 6 #@ q'-W@Dhw #@ x #@ 10 #@ )FV5B,QffDX(% #@ x #@ 21 #@ i3hgC/P+Y?gp><@%xRQBm&sJD1v #@ x #@ 21 #@ Ai0fDGhV*F(fTfDtH..Dh<..D1v #@ i #@ 0 #@ x #@ 2 #@ FVw #@ x #@ 4 #@ wm+lQ2TAvw/gCmxoRAmh>x3AE%6BEC #@ dq>pZ.=wa.JTABn-0D*Z'aElnnC+:qoq>x-WsE'ZB3@!XNaE.o5cE/!J9>pR5SAWvfK/wx%l #@ BBVeK/&kbD+5*Z8AqiJ(Ff/#>+*!jU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>. #@ uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>.uiU>h_oJ;.o5cEeWC?+G,, #@ X.aLqT,&YX#?KGNg@+dMTARxMk0x-WsE4%OBD!M|RAswDoAs&O+E@G)*F%)(yG*sI9>#XmID #@ 0k>D+*N!iCs&O+E@G)*F='vr>x-WsE)l#j@>5cDF/@rm#rO5cE^IbOB?,ETA=;2EFt)O+Ew3 #@ BCF@CfZE.o5cEWMqT,eOjY?.9BfDFXME+crgm#LdV<+w!saE4b1`F.GX6wssU<+:tJTA8oAT #@ A=;2EF/Y:EF(FV5B.QIID.6Y<+ByB,EruwlB'E(yG=%BTA=;2EFDZ-C+ko.>,=wssU<+>wO@wssU<+Ll4BGu-cOB=%BTA=;2EF%#um#y7|aE.aZQH9M #@ fCF4&O+E,=^Z?fIa:@/Y:EF(FV5B.QIID2ZpT,>12E+ko9(kIDj2Q@wYw2`F%jJ(FPf,!F8IfZE.o5cEv.DTAA;lcE(+ME+,AccE+S5D+u #@ -V5B?uht*Z8AC>qT,.9BfD0wj'Fw30bE.&6cEDZ-C+(sY8Ad)um#5dV<+')um#f1; #@ 4w5dV<+DCZKA1V#D+crgm#91VE+4YG9>*dmIDruwlB'E(yG/Ny|3(iY%GDZ-C+Yssm#vMfCF #@ OOR>+lQ2TAvw/gCmxoRAmh>x3AE%6BFImq>pZ.=wa.JTA8oATA=;2EF!BK(F1^cr@uuI9>i% #@ 97ARxMk0Ergm#91VE+.9BfDs++:@%iSC+`Ia:@0LAgAnrsm#LdV<+y!s! #@ x #@ 1039 #@ tsU<+1A`nAaLN:@,8>D+6p`aEt0m*EpvnX?'`>_F,ZbDFCU`4@91ME++E%6B7oATA@)QDFBU #@ ZQH82_`FS@(d0'C/:+@NncBl|2jB0k(E+1lo(FFFfZE1fsiCQE>hA0=m:.wn<@wa.JTAMPMk #@ 0'rS,E9upT,7,V`FW^YL/m'cSA:&h#?x-WsE:xGi%97ARxMk0Ergm#)lP)F1LAgAn #@ qgm#91VE+eOjY?.9BfDFXME+f*Z4B:R2E+=r3iC)G#D+3N!iCFx:JDbFfRAd)/M/C<7U..H4 #@ U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U..H4U. #@ .H4U..H4U..H4U..H4U.rYnHDc8BfDbNrZ3=Oc?GgxPF+ByB,EErgm#91VE+*7pV@rNRdDi- #@ DTA=;2EFu9pQAGFDE+e0cSA)mRQB3SegCo-DTA=;2EFSpu+1Ergm#91VE+-lTKDET<8w^:9e #@ Dhqrp@BpJdE.o5cE#4MTAup,<@BCDE+.9BfDP?SF+*N!iCs&O+E@G)*F%#um#5dV<+'!?r@1 #@ osdDDLVE+|>/:+JS)!F8IfZE.o5cE/cB'F5-=JD'K*<@'2#D+Gw.0Dww/gCmxoRAPc2xE.o5 #@ cECCdq>ruwlB'E(yG=%BTA=;2EF-0T!?|>/:+@NncBC5>F+8b1`FainW4f>pBD!M|RAswDoA #@ s&O+E@G)*FDn<@wZ-WsE+)ZKAwNYKAy3tm#5dV<+DCZKA1V#D+crgm#vMfCFwsY8AruwlB'E #@ (yG3SegCo-DTA=;2EFu9pQAGFDE+8b1`F`BI+1,Cdq>|>/:+TX93I|>/:+JS)!F/Fur@@c2x #@ E.o5cE;n<@wH5m0@%iSC+@uJTA8oATA=;2EFd3DTAqbB'F5-=JD'K*<@'2#D+ByB,EruwlB' #@ E(yG=%BTA=;2EFt)O+Ew3BCFSCbH0(C&LAwBg9IFngm#1K|fD'bfRAP5>F+91VE+.9BfD/pN #@ aE4>2`F%jJ(F/Y:EF(FV5B.QIID2ZpT,>12E+ko #@ 9(kIDj2Q@wssU<+>wO@we3N@wtsU<+T@PF+!xMTA&,;4w`(ATAqKDTAF.fK/*XxlBagbSA4& #@ O+E,=^Z?1K|fD'bfRAMpJdE.o5cEv.DTAA;lcE(+ME+0gGSAOulCD6HFiC1#R@w`(ATAqKDT #@ AF.fK/*XxlBagbSA4&O+E,=^Z?fIa:@?,ETA=;2EFd3DTA4py1AuE)5B00aaEl)um#LdV<+y #@ !s! #@ x #@ 6 #@ pR5SA_tw #@ x #@ 7 #@ =r3iC^%g+ #@ x #@ 4 #@ 3N!iC #@ x #@ 2 #@ &Tv #@ x #@ 14 #@ eE?<@BbL'F5N^6AuGv #@ x #@ 1 #@ A! #@ x #@ 1 #@ L! #@ x #@ 23 #@ dp?L:ZD0|F18lDF0yQW>D+VU>/FB% #@ x #@ 1 #@ B! #@ x #@ 49 #@ eE?<@E*k#H'1?SA-,fC+mZ!iC%3DTA7bL'Fh=`6A4cXp.D@Bn-D)%y>Vxy4.F! #@ x #@ 2 #@ 72# #@ x #@ 6 #@ .4^Z?Ktw #@ x #@ 12 #@ 91VE+.4^Z?F=bH0 #@ x #@ 63 #@ kAKCF(FhgC7O,D+gp><@%xRQB:^cd:'4nY>3icRA&BB3@?Tla3vcX:>lpMm/w5L'F,U&x>mA #@ Tq>E'sw #@ x #@ 6 #@ (O^Z?Ktw #@ x #@ 12 #@ 91VE+(O^Z?F=bH0 #@ x #@ 1 #@ N! #@ x #@ 28 #@ D+37UgC*#)*FE0v% #@ =nB)5B/9JQBR/v%=l!L;@0 #@ v%=KSWjBg:oRA@0v%=P%o-DJu,m6:HE%4DTAM0v%=rE-<@ #@ x #@ 12 #@ n*Z8Afwwx?6>;EF #@ x #@ 123 #@ Uy!Y?7J|C+AGbT>^:GF+I3L3.L7r_FHExQHE)4U.|xPF+!qbSA?ExQHZv #@ x #@ 4 #@ (w=JD #@ x #@ 1 #@ +! #@ x #@ 4 #@ DP)*F #@ x #@ 52 #@ TnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO. #@ x #@ 28 #@ bDnlBt?VTA7O,D+Gp><@%xRQBblqJD3ZbDF #@ x #@ 6 #@ ,Qs/DL+% #@ x #@ 49 #@ pOccEjEVTAK527@sXo;@X1F?+8x?3@%iSC+.Aj'2`Tu0/3>m;@FXME+,/4F1?v #@ x #@ 5 #@ -4Pe02v #@ x #@ 49 #@ ^EV5B,QffDU527@sXo;@X1F?+8x?3@%iSC+.Aj'2`Tu0/3>m;@FXME+,/4F1?v #@ x #@ 49 #@ eE?<@S527@sXo;@X1F?+LdV<+8x?3@%iSC+.Aj'2`Tu0/3>m;@FXME+,/4F1?v #@ x #@ 51 #@ tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.tnlO.JHK% #@ x #@ 26 #@ bDnlBt?VTA7O,D+Gp><@%xRQB*DY-EO(% #@ x #@ 11 #@ ^EV5B,QffD=15' #@ x #@ 33 #@ LdV<+LdV<+LdV<+LdV<+LdV<+LdV<+EaVE+0*|CF4v #@ x #@ 41 #@ 4nsdD2KsJD4LVE+LdV<+-lTKDKeV<+1ntD+0,R;@OeV<+9LuwG1v #@ x #@ 42 #@ f(/M/+P/M/+P/M/+P/M/+P/M/+P/M/+P/M/+P/M/+P/M/+P/M/&Tv #@ x #@ 20 #@ pOccEjEVTAK527@sXo;@Vtec3 #@ x #@ 41 #@ AjQ,Ew3BCF3+uD+LdV<+-lTKDKeV<+1ntD+0,R;@OeV<+9LuwG1v #@ i #@ 1 #@ x #@ 390 #@ YP_nAM|8EFa7X:@&FuSA%#um#LdV<+DP)*FLZ/*Fo1#D+Zd'!,tsU<+GH8`FKr:s+i3hgC/P #@ +Y?gp><@%xRQB4&O+E,=^Z?1K|fD'bfRAZQY|G8oATA=;2EFd3DTAHQY|G-YU&,tsU<+GH8` #@ FKr:s+c4#D+%wviC5<=JD+A-bE@CDE+!6|,EiX|7AJj6|,6tk%,f5g0I1D5)F,n<@w5dV<+1 #@ =,D+L1<)F%)A!,gFPF+crgm#82_`FjQtm#LdV<+;`4hC@mZQHXgZ!EIXME+ew>SA.oSA/@G#V<+a,v #@ x #@ 5 #@ 3aMTA@v #@ x #@ 10 #@ .XIIDmireDJSw #@ 6 #@ C 1 57 670 -1 -1 734 #@ L 2 129 15 147 122 -1 #@ L 2 189 15 207 182 -1 #@ L 2 320 26 349 313 -1 #@ L 2 369 26 398 362 -1 #@ L 2 418 28 449 411 -1 #@ 5 #@ F #@ 1 11 12 #@ 2 #@ 13 14 #@ F #@ 1 17 18 #@ 2 #@ 13 14 #@ F #@ 1 25 26 #@ 1 #@ 27 #@ F #@ 1 29 30 #@ 1 #@ 27 #@ F #@ 1 31 32 #@ 2 #@ 33 34 #@ 1 35 #@ 4 #@ %N|(F #@ 0 0 257 #@ 21 #@ i3hgC/P+Y?gp><@%xRQBm&sJD1v #@ 1 0 9 #@ 10 #@ )FV5B,QffDX(% #@ 2 0 9 #@ 3 #@ i@w, #@ 3 0 9 #@ 14 #@ p'ZjB,@^Z?@5--E`+% #@ 4 0 9 #@ 9 #@ !^RdDFG;`F@v #@ 5 0 9 #@ 9 #@ oHRdDFG;`F@v #@ 6 0 9 #@ 10 #@ .XIIDmireDJSw #@ 7 0 8 #@ 8 #@ .4^Z?6>;EF #@ 8 0 9 #@ 22 #@ .9BfDs++:@dMxX?0F?<@m-%lB^+% #@ 9 0 9 #@ 11 #@ .9BfDs++:@ZGB+ #@ 10 0 8 #@ 0 #@ #@ 11 0 521 #@ 0 #@ #@ 12 0 521 #@ 1 #@ Dv #@ 13 0 9 #@ 5 #@ -lTKD@v #@ 14 0 9 #@ 19 #@ .9BfDs++:@dMxX?l-VgCr9E- #@ 15 0 9 #@ 8 #@ (O^Z?6>;EF #@ 16 0 9 #@ 0 #@ #@ 17 0 521 #@ 0 #@ #@ 18 0 521 #@ 7 #@ )FV5BUIu, #@ 19 0 9 #@ 6 #@ .4^Z?Ktw #@ 20 0 8 #@ 6 #@ (O^Z?Ktw #@ 21 0 8 #@ 9 #@ )FV5B!|G)F@v #@ 22 0 9 #@ 14 #@ gp><@%xRQBsb1`FY+% #@ 23 0 9 #@ 16 #@ .9BfD/pNaE4>2`F%jJ(F #@ 24 0 8 #@ 0 #@ #@ 25 0 521 #@ 0 #@ #@ 26 0 521 #@ 9 #@ 'NB,E(^mID@v #@ 27 0 9 #@ 3 #@ sdu, #@ 28 0 9 #@ 0 #@ #@ 29 0 521 #@ 0 #@ #@ 30 0 521 #@ 0 #@ #@ 31 0 521 #@ 0 #@ #@ 32 0 521 #@ 8 #@ j?VTA9hd#H #@ 33 0 9 #@ 8 #@ .30bE.&6cE #@ 34 0 9 #@ x #@ 265 #@ 6dV<+9MfCF'LFY?!(wx?*XxlBagbSAq2K(FmF5SAAFGQB!Zb@Gu,aaEegpgCcdkSA&k54Br, #@ 00D1#V<++olRAo3uSA(fTfDdNACF)kKV@9HK(F1YFID8=j?HV_W:@sXo;@>?Y<+7<;oAEWuZ #@ E.o5cE&LU:@sXo;@,H#j@3QBfD-ZbDF5fAoA';>0AuE)5BGkV<+)L>nAh++Y?%N|(FRvZ<+D #@ rAkB5H:s+5^wpGHwD9G0LVE+:G7*CIxVE+i%97A.0?SA4&O+E@G)*FufY8A>%lDF'9DTA'Y# #@ D+&CR.DA?/gA)SY%,F@ccE+S5D+4